Android激活设备管理器--一键锁屏

【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.运行效果
只有一键锁屏权限时的激活页面显示:Android激活设备管理器--一键锁屏
文章图片

按照第一步的device-admin.xml设置时的激活页面:Android激活设备管理器--一键锁屏
文章图片

7.一键锁屏的运行逻辑:
点击权限配置进入应用,首先检查应用有没有激活系统管理器,若激活,则显示注销和锁屏按钮。此时点击“注销”则注销系统管理器并退出应用;点击“锁屏”则锁屏后退出应用。如果应用没有激活系统管理器,主页显示“注册组件”。点击后进入上图图一,点击“激活”,则应用获取系统管理员权限,页面显示“注销”和“锁屏”按钮;点击“取消”则返回“注册组件”页面。

    推荐阅读