注意:一旦一个应用开启了超级管理员权限,是不能直接在  设置--->应用程序里  进行删除的(删除失败)   

必须要在  设置--->位置和安全--->选择设备管理器  里取消要删除应用的激活  然后再去应用程序里删除

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();//锁屏}}


图一:


图二:







更多相关文章

  1. EventBus使用教程
  2. Android入门:Activity四种启动模式
  3. Android应用程序申请系统管理员权限
  4. Android四大组件之一 广播接收者 BroadcastReceiver
  5. Android_BroadcastReceiver广播接收者详解及应用
  6. launchMode之的几种取值
  7. Android简单发送邮件(可带附件)
  8. android 广播接收者--BroadcastReceiver
  9. android之拨打电话时在电话号码前加17951

随机推荐

  1. android中的多线程基础问题
  2. Android(安卓)Data Binding
  3. 终于来了!耗时268天,7大模块、2983页58万字
  4. Android(安卓)MVP 实践 Dagger + activit
  5. Android Binder AIDL解析
  6. Android 个人开发者接入支付功能
  7. Android 移动应用开发模拟题
  8. Android Jetpack架构组件简介
  9. (一)、android各个版本的发展历程
  10. Android(安卓)PNG渐变背景图片失真问题