Android-DevicePolicyManager
DevicePolicyManager
DevicePolicyManager,设备策略管理器。顾名思义,DevicePolicyManager为Android系统的管理提供了一套策略,有三种方案:
Device Administration, 设备管理员
Device Owner, 设备所有者
Profile Owner, 配置文件所有者
移动设备管理中主要使用Android的DeviceAdmin和DeviceOwner两大模块功能。
DeviceAdmin(设备管理):弱管控
移动设备管理中使用Google提供的DeviceAdmin设备管理功能,在Android在2.2版本中引进的。通过用户授权自己的应用设备管理权限后,可以在代码中修改很多系统设置,比如设置锁屏方式、恢复出厂设置、设置密码、强制清除密码,修改密码等操作。
DeviceOwner(设备所有者):强管控
通过DeviceAdmin所做的功能很有限,所以需要用到DeviceOwner。“设备所有者”是一类特殊的设备管理员,具有在设备上创建和移除辅助用户以及配置全局设置的额外能力。之前申请的DeviceAdmin可以对设备进行一些修改,而当应用成为DeviceOwner后,可以拥有更多的能力,可以对其他应用进行限制。
Device Owner 概述 DeviceOwner 译为设备所有者,在Android5.0系统推出。DeviceOwner涵盖了DeviceAdmin用户的所有管理能力,也涵盖了ProfileOwner的所有管理能力,并且在这些基础上额外添加了一些管理权限,如重启设备、禁用状态栏等。Android提供的三种权限管理策略的能力大小依次为 DeviceAdmin < ProfileOwner < DeviceOwner。
Android系统只能设置一个DeviceOwner程序,并且该程序在设置为DeviceOwner后不能取消,应用不能卸载,唯一可以取消的途径是恢复出厂设置。并且,DeviceOwner应用和ProfileOwner也会产生冲突,系统只能有一个DeviceOwner应用或者ProfileOwner应用。
DeviceOwner 的设置和能力 要使一个应用成为DeviceOwner,首先这个程序必须是一个DeviceAdmin,按照DeviceAdmin的标准流程配置一个程序,回顾往期文章Android Device Administration 应用的能力。 将配置好的程序设置为DeviceOwner之前,不必刻意去激活DeviceAdmin,系统在设置DeviceOwner的过程中会自动先激活DeviceAdmin,这也是DeviceOwner拥有DeviceAdmin所有能力的原因。 第三方应用和系统应用都没有权限设置DeviceOwner,
设置权限
通过手机设置能够开启的权限为Device Administration-设备管理员权限,在手机设置的设备管理内可以关闭。其能力有限,只能做很少的事,比如锁屏。
如果想要获取更高的权限,则会麻烦一点,以下是使用USB的方式,会获得Device Owner-设备所有者权限,能做的事更多,开启成功后,在手机设置的设备管理内无法停用:
提示:以下指令以搭配小助手App为前提,如果使用自己的App,则需要将包名替换为自己应用的包名。
1、在手机设置-账户内退出所有账号,比如小米账号、谷歌账号等。
可以使用以下命令查看账户:主要看此方法
1 | adb shell pm list users |
使用以下命令退出账户:如 999 根据上面的命令查看更改。只保留0:机主
名称可能不同,但数字为 0。
1 | adb shell pm remove-user 999 |
还有此命令查看账户:
1 | adb shell dumpsys account |
2、使用以下命令获取权限
1 | adb shell dpm set-device-owner com.example.littlehelper/com.example.littlehelper.ui.main.todo.service.LockReceiver |
或
1 | adb shell dpm set-profile-owner com.example.littlehelper/com.example.littlehelper.ui.main.todo.service.LockReceiver |
注意:只能使用一种命令,只可以获取一种权限,否则报错
1 | java.lang.IllegalStateException: Trying to set the device owner, but the user already has a profile owner. |
成功后会有类似以下信息:
1 | Success: Device owner set to package ComponentInfo{com.example.littlehelper/com.example.littlehelper.ui.main.todo.service.LockReceiver} |
或
1 | Success: Active admin and profile owner set to {com.example.littlehelper/com.example.littlehelper.ui.main.todo.service.LockReceiver} for user 0 |
使用以下命令移除权限:移除权限后,设置的功能会重置还原。
1 | adb shell dpm remove-active-admin com.example.littlehelper/com.example.littlehelper.ui.main.todo.service.LockReceiver |
成功信息如下:
1 | Success: Admin removed ComponentInfo{com.example.littlehelper/com.example.littlehelper.ui.main.todo.service.LockReceiver} |
执行 adb 指令后提示:
- 提示 “Not allowed to … already some accounts on the device”
没有移除全部账号,请移除您手机上所有的账户,包括 Google 账号和系统自带的如小米账户、三星账户等 - 提示 “Not allowed to … already some users on the device”
没有移除全部用户,请确认已移除全部用户
开启权限成功提示:
- 在 Redmi Note 8 和 vivo NEX 上测试:移除权限后,设置的功能会失效还原。(所以,如果遇到什么问题无法解决,最后可以选择移除权限还原)
- vivo NEX 开启权限后,应用即无法卸载,不需要开启
禁止本应用被卸载
开关。 - Redmi Note 8 开启权限后,应用也可以被卸载,如果不想被误删,可以手动开启
禁止本应用被卸载
开关。
Provisioning API
当设备已经被设置并在使用中时,应用无法使用 Provisioning API 进行设备初始化和配置。
Provisioning API 仅适用于初始化和配置新设备或在设备重置后的初始化和配置。
备注
参考资料:
欢迎关注微信公众号:非也缘也