【Android激活设备管理器--一键锁屏】激活设备管理器就是把系统的某些权力例如锁屏,链接蓝牙等功能交给某个应用来执行。也就是说,如果想要某个应用执行某些系统超级管理员才能执行的功能时,就需要让这个应用激活设备管理器。此时该应用就拿到了系统管理员的权限。
这件事要怎么做呢?
写一个广播接收者,给这个BroadcastReceiver申请系统管理员的权限,让操作系统给广播接收者授权。这样就激活了系统的授权组件。这些功能都是由android提供的DevicePolicyManager类来完成的。
下面用申请应用系统管理员以及一键锁屏来介绍这个权限操作。
1.首先创建自定义的权限xml文件– device_admin.xml
在Android工程的res目录下新建xml目录,在xml目录下新建device_admin.xml文件
//一键锁屏
//停用相机,禁止使用所有设备摄像头
//设置密码规则
//监视屏幕解锁尝试次数,如果输错次数过多则锁定手机或者清除所有数据
//重置密码
//恢复出厂设置
可以看到后四个的权限很大,最好不要在真机上测试。本例只用
2.创建布局文件,主要是定义三个按钮:注册组件,注销组件和锁屏。
3.定义BroadcastReceiver–DeviceManagerBC,使之继承DeviceAdminReceiver。
package com.cindy.onekeylock;
import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
/**
* Created by Cindy on 2016/10/23.
*/
public class DeviceManagerBC extends DeviceAdminReceiver{
@Override
public void onEnabled(Context context, Intent intent) {
super.onEnabled(context, intent);
System.out.println("已经注册成为系统组件");
}@Override
public void onDisabled(Context context, Intent intent) {
super.onDisabled(context, intent);
System.out.println("已经注销了系统组件");
}
}
4.在AndroidManifest.xml文件中注册BroadcastReceiver。
5.在MainActivity中完善各个按钮的功能。
package com.cindy.onekeylock;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button btn_regDivice,btn_unRegDivice,btn_lockScreen;
private DevicePolicyManager devicePolicyManager;
public ComponentName componentName;
//权限监听器
private boolean flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_regDivice = (Button)findViewById(R.id.btn_regDivice);
btn_regDivice.setOnClickListener(this);
btn_unRegDivice = (Button)findViewById(R.id.btn_unRegDivice);
btn_unRegDivice.setOnClickListener(this);
btn_lockScreen = (Button)findViewById(R.id.btn_lockScreen);
btn_lockScreen.setOnClickListener(this);
devicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
componentName =new ComponentName(this,DeviceManagerBC.class);
//用广播接收器实例化一个系统组件
flag = devicePolicyManager.isAdminActive(componentName);
//判断这个应用是否激活了设备管理器
if(flag){
btn_regDivice.setVisibility(View.GONE);
btn_lockScreen.setVisibility(View.VISIBLE);
btn_unRegDivice.setVisibility(View.VISIBLE);
}else{
btn_regDivice.setVisibility(View.VISIBLE);
btn_lockScreen.setVisibility(View.GONE);
btn_unRegDivice.setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_regDivice:
Intent i = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//激活系统设备管理器
i.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
//注册系统组件
startActivity(i);
break;
case R.id.btn_unRegDivice:
devicePolicyManager.removeActiveAdmin(componentName);
//注销系统组件
this.finish();
break;
case R.id.btn_lockScreen:
devicePolicyManager.lockNow();
this.finish();
break;
}
}@Override
protected void onResume(){
super.onResume();
boolean flagChanged = devicePolicyManager.isAdminActive(componentName);
//判断这个应用是否激活了设备管理器
if(flagChanged){
btn_regDivice.setVisibility(View.GONE);
btn_lockScreen.setVisibility(View.VISIBLE);
btn_unRegDivice.setVisibility(View.VISIBLE);
}else{
btn_regDivice.setVisibility(View.VISIBLE);
btn_lockScreen.setVisibility(View.GONE);
btn_unRegDivice.setVisibility(View.GONE);
}
}
}
6.运行效果
只有一键锁屏权限时的激活页面显示:
文章图片
按照第一步的device-admin.xml设置时的激活页面:
文章图片
7.一键锁屏的运行逻辑:
点击权限配置进入应用,首先检查应用有没有激活系统管理器,若激活,则显示注销和锁屏按钮。此时点击“注销”则注销系统管理器并退出应用;点击“锁屏”则锁屏后退出应用。如果应用没有激活系统管理器,主页显示“注册组件”。点击后进入上图图一,点击“激活”,则应用获取系统管理员权限,页面显示“注销”和“锁屏”按钮;点击“取消”则返回“注册组件”页面。