Android注册设备管理器(获取超级管理员权限)
16lz
2021-01-26
注意:一旦一个应用开启了超级管理员权限,是不能直接在 设置--->应用程序里 进行删除的(删除失败)
必须要在 设置--->位置和安全--->选择设备管理器 里取消要删除应用的激活 然后再去应用程序里删除
1.创建一个DeviceAdminReceiver子类(DeviceAdminReceiver是广播接收者的子类)
import android.app.admin.DeviceAdminReceiver;public class MyAdmin extends DeviceAdminReceiver {}
2.配置广播接收者清单文件
<?xml version="1.0" encoding="utf-8"?>
values目录下的strings.xml
<?xml version="1.0" encoding="utf-8"?> 一键锁屏 Hello world! Settings 此应用用于锁屏 锁屏
3.在res目录下创建xml文件夹,再此文件夹里创建device_admin_sample.xml
<?xml version="1.0" encoding="utf-8"?>
4.在Activity里调用
package com.xxc.lockscreen;import android.app.Activity;import android.app.admin.DevicePolicyManager;import android.content.ComponentName;import android.content.Intent;import android.content.pm.ComponentInfo;import android.os.Bundle;import android.view.View;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;/** * 步骤: * 1.创建一个类继承DeviceAdminReceiver * 2.因为DeviceAdminReceiver是一个广播接收者,那么就需要在清单文件里配置receiver * //在res下创建xml文件夹,并创建device_admin_sample.xml文件 *3.device_admin_sample.xml文件内容为: * * *4.设置--->设备管理器--->将锁屏程序勾选激活 * *5.而让一般的用户手动执行第四步会感觉很繁琐,所以在界面上加一个CheckBox组件,直接完成第四步的操作 */public class MainActivity extends Activity {private DevicePolicyManager dpm;private CheckBox cb_status;private ComponentName mDeviceAdminSample;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);//设备策略管理器cb_status = (CheckBox) findViewById(R.id.cb_status);//复选框组件//第一个参数 上下文 第二个参数 需要被激活的超级管理员类mDeviceAdminSample = new ComponentName(getApplicationContext(), MyAdmin.class);isOpen();//判断是否激活,再进行对应的数据回显cb_status.setOnCheckedChangeListener(new OnCheckedChangeListener() {//多选框勾选状态改变的监听器@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {//以下这段都是API上复制的if(isChecked){//多选框被勾选,激活超级管理员 Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"开启后就可以使用锁屏功能了...");//显示位置见图二 /* * 不能直接startActivity 因为可能在激活的时候用户点击了取消,这时候CheckBox状态是勾选的,但是实际是没激活的, * 所以要等打开的Activity关闭后的回调函数里去判断是否真正激活,再对CheckBox状态进行改变 */ startActivityForResult(intent, 0);}else{//多选框取消勾选,取消激活超级管理员dpm.removeActiveAdmin(mDeviceAdminSample);}}});}/** * 关闭激活Activity后的回调函数 */@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);isOpen();}/** * 检测用户是否开启了超级管理员 */private void isOpen() {if(dpm.isAdminActive(mDeviceAdminSample)){//判断超级管理员是否激活cb_status.setChecked(true);}else{cb_status.setChecked(false);}}public void screenLock(View view){dpm.lockNow();//锁屏}}
图一:
图二:
更多相关文章
- EventBus使用教程
- Android入门:Activity四种启动模式
- Android应用程序申请系统管理员权限
- Android四大组件之一 广播接收者 BroadcastReceiver
- Android_BroadcastReceiver广播接收者详解及应用
- launchMode之的几种取值
- Android简单发送邮件(可带附件)
- android 广播接收者--BroadcastReceiver
- android之拨打电话时在电话号码前加17951