获取DeviceAdmin

375 阅读1分钟

Android 提供了三种设备管理方案:DeviceAdmin(设备管理员)、ProfileOwner(配置文件所有者) 和 DeviceOwner(设备所有者),这三种设备管理方案的权限大小分别为:DeviceAdmin < ProfileOwner < DeviceOwner。应用需要最大的授权才能成为DeviceOwner,DeviceOwner具有设备的最高权限。

开启DeviceAdmin

1.Manifest中注册广播

<receiver
    android:name=".SpeedFragment$VPNReceiver"
    android:description="@string/sample_device_admin_description"
    android:label="@string/sample_device_admin"
    android:permission="android.permission.BIND_DEVICE_ADMIN"
    android:exported="true">

    <meta-data
        android:name="android.app.device_admin"
        android:resource="@xml/device_admin_sample" />

    <intent-filter>

        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>

</receiver>

2.基本配置(device_admin_sample)

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android" >
    <uses-policies>
        <!-- 设置密码规则 -->
        <limit-password />
        <!-- 监视屏幕解锁尝试次数 -->
        <watch-login />
        <!-- 更改解锁密码 -->
        <reset-password />
        <!-- 锁定屏幕 -->
        <force-lock />
        <!-- 清除数据,恢复出厂模式,在不发出警告的情况下 -->
        <wipe-data />
        <!-- 锁屏密码有效期 -->
        <expire-password />
        <!-- 对存储的应用数据加密 -->
        <encrypted-storage />
        <!-- 禁用锁屏信息 -->
        <disable-keyguard-features/>
     <!-- 禁用摄像头 -->
        <disable-camera />
    </uses-policies>
</device-admin>

3.注册一个自定义广播接收器继承自DeviceAdminReceiver

class AdminReceiver : DeviceAdminReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        super.onReceive(context, intent)
        LogUtils.d("TAG_ADMIN", "onReceive: ${intent.toString()}")
    }

    override fun onEnabled(context: Context, intent: Intent) {
        super.onEnabled(context, intent)
        LogUtils.d("TAG_ADMIN", "激活了")
    }

    override fun onDisabled(context: Context, intent: Intent) {
        super.onDisabled(context, intent)
        LogUtils.d("TAG_ADMIN", "取消激活了")
    }
    
}

4.激活DeviceAdmin

val devicePolicyManager =
    context?.getSystemService(Context.DEVICE_POLICY_SERVICE) as? DevicePolicyManager
val componentName = ComponentName(context!!, AdminReceiver::class.java)


val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)
intent.putExtra(
    DevicePolicyManager.EXTRA_DEVICE_ADMIN,
    ComponentName(context!!, VPNReceiver::class.java)
)
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Device Admin")
startActivity(intent)