Android应用程序申请系统管理员权限

    ONE Goal, ONE Passion !

一些操作比如: 自动锁屏.清除数据.等都需要获取系统管理员权限才能够操作.那么怎么才能获得管理员权限呢?

程序向获得系统管理员权限步骤:

  • 1, 声明一个广播接受者MyPolicyReceiver继承DeviceAdminReceiver.(MyPolicyReceiver继承至BroadcastReceiver)
  • 2,为这个广播接受者做特殊的配置
    • 2.1 声明一些需要的管理员权限(策略集)
  • 3,使用DevicePolicyManager类去操作比如:锁屏,清空数据

第一步:声明一个广播接受者

/**     * 广播接收者. 去申请管理员权限. 这个广播接收者需要在清单文件中做一些特殊的配置     *      * @string/app_name"   给用户的描述     *  android:label="@string/app_name"       设备管理器中显示的应用标题名     * android:permission="android.permission.BIND_DEVICE_ADMIN">  需要申请的权限     * @xml/policy"/>     policy.xml中为所声明的设备管理员权限     *      *      *   监听改频段的广播     *      *      *      * @author      *      */    public class MyPolicyReceiver extends DeviceAdminReceiver {    }

第二步:清单文件中配置

<receiver                android:name="com.example.policy.MyPolicyReceiver"                android:description="@string/app_name"                android:label="@string/app_name"                android:permission="android.permission.BIND_DEVICE_ADMIN" >                 <meta-data                    android:name="android.app.device_admin"                    android:resource="@xml/policy" />                  <intent-filter>                    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />                intent-filter>            receiver>

2.1声明一些需要的管理员权限(策略集)

在src/xml/pilicy.xml下:

<?xml version="1.0" encoding="UTF-8"?>    <device-admin xmlns:android="http://schemas.android.com/apk/res/android" >                <uses-policies>                        <force-lock />                        <limit-password />                        <watch-login />                        <reset-password />                        <wipe-data />        uses-policies>    device-admin>

第三步:使用获得的管理员权限做一些操作

public class MainActivity extends Activity {        /**         * 设备管理员         */        private DevicePolicyManager mDPM;        /**         * 四大组件名的封装类         */        private ComponentName mConmp;        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);            // 1, 获取设备管理员            mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);            // 2, 申请权限            mConmp = new ComponentName(this, MyPolicyReceiver.class);        }        // 点击按钮去锁屏        public void policy(View v) {            // 判断是否获得管理员权限啊            boolean active = mDPM.isAdminActive(mConmp);            if (active) {                // 已经获取管理员权限可以锁屏                System.out.println("--已经获取管理员权限--");                mDPM.lockNow();                // 解锁时要输入123才能解锁                mDPM.resetPassword("123", 0);            } else {                // 没有管理员权限---启动系统activity让用户激活管理员权限                Intent intent = new Intent(                        DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mConmp);                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,                        "只有激活了管理员权限才能锁屏,清理缓存");                startActivityForResult(intent, 0);            }        }    }

激活权限有两种方式:

  • 第一种: 直接进入到设置—-安全—设备管理器.点击激活.
    前提是已经完成了,申请权限的前2步.
    如图:

  • 第二种: 直接使用代码去激活.

// 没有管理员权限---启动系统activity让用户激活管理员权限                Intent intent = new Intent(                        DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mConmp);                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,                        "只有激活了管理员权限才能锁屏,清理缓存");                startActivityForResult(intent, 0);

执行激活的代码后会出现下图所示:

点击激活即可. 只有激活了权限才能成为系统管理员.


注: 异常

08-27 09:00:53.332: E/AndroidRuntime(1906): Caused by: java.lang.SecurityException: No active admin owned by uid 10089 for policy #3

如果报类似的异常是因为没有激活管理员权限.或者是相应的锁屏,清理缓存等权限没有被申请.(最稳妥做法就是在策略集中把所有的权限都申请).

更多相关文章

  1. Android(安卓)Fragment 申请权限 onRequestPermissionsResult 不
  2. Android(安卓)需要动态申请的权限以及EasyPermission 的使用
  3. Content Provider使用方法以及Android运行时权限申请
  4. Android(安卓)Map 申请Debug Key的方法
  5. android 6.0 以上 动态申请多个权限
  6. Flutter开发之动态权限
  7. Android高效处理权限——EasyPermissions框架的使用
  8. 个人自制unity插件"android动态权限自动申请"的用法
  9. launchMode之的几种取值

随机推荐

  1. android 自定义权限
  2. Android(安卓)Studio 配置多个代码仓库(m
  3. android studio 添加外部库的问题
  4. android -------- ConstraintLayout 宽高
  5. Android(安卓)下载文件 显示进度条
  6. Android(安卓)Studio 安装教程
  7. MediaPlayer+Stagefright架构(音频)图解
  8. Warning:The specified Android(安卓)SDK
  9. Android(安卓)app启动流程(Activity启动
  10. Android(安卓)开发Tips 之 Bmob操作