Android设备管理器开发

在开发设备管理器之前应该先了解一下什么是设备管理器,他的作用是什么。这里附上Android设备管理器的官方介绍

https://developer.android.com/guide/topics/admin/device-admin.html

开发步骤

首先要在 AndroidManifest.xml 中添加下面的权限声明

<receiver android:name=".receiver.MainDeviceAdminReceiver" android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin" android:resource="@xml/devicepolicymanager_permission" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

其中引用了一个@xml/devicepolicymanager_permission,他的内容为

<?xml version="1.0" encoding="UTF-8"?>
<device-admin>
    <uses-policies>
        <force-lock/>
        <wipe-data/>
        <reset-password/>
        <limit-password/>
        <watch-login/>
    </uses-policies>
</device-admin>

同样AndroidManifest.xml的声明中有一个.receiver.MainDeviceAdminReceiver, 这个是一个继承于android.app.admin.DeviceAdminReceiver的因,同样要重新这个类。这里同样给出DeviceAdminReceiver的所有方法列表。

https://developer.android.com/reference/android/app/admin/DeviceAdminReceiver.html

申请权限操作

在你的Activity的代码中填写下面这样的代码,用来申请设备管理器界面

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, new ComponentName(activity, MainDeviceAdminReceiver.class));
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "需要权限");
activity.startActivityForResult(intent, REQUEST_DEVICE_ADMIN_CODE);

这时手机中会出现这样的界面提示:

当用户点击ACTIVATE会触发MainDeviceAdminReceiver中的onEnabled方法。同时在Activity的onActivityResult也会收到结果,这里检测代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PhoneUtil.REQUEST_DEVICE_ADMIN_CODE) {
        if (resultCode != Activity.RESULT_OK) {
            // TODO: 用户确定授权
        } else {
            // TODO: 用户没有授权设备管理器
        }
    }
}

其他说明

当设备管理器一旦激活,软件就不能正常卸载

无法卸载的 App - 设备管理器漏洞

https://2bab.me/2015/02/09/app-cannot-be-uninstalled

点赞