注册

给Android应用设置DeviceOwner权限遇到的问题及解决方案



背景


Android手机品牌和型号众多,特别是国产手机系统时常添加各种中国特色功能,因此其与设备管理员模式的兼容性或多或少存在一些问题,今天专门来讲讲我遇到的一些常见机型兼容性问题。


注意事项


设备管理员模式不需要反复连接电脑设置,只需要配置一次,重启或升级系统都没有影响。


但是在执行命令之前需要对手机进行一些设置,具体如下:



  • 小米用户需要开启「USB 调试(安全设置)」关闭「MIUI 优化」
  • 所有手机进入「设置 - 帐户」,删除所有的帐户,包括你的 Google、小米、华为、OPPO、vivo等系统帐号(像OPPO和vivo这样安装需要登录账户的可以之后再登录回来)
  • 如果你之前设置过多用户或开启过手机自带的访客模式、应用双开等,也需要一并关闭或删除(之后可以再打开)

常见问题


问题1:提示 “Not allowed to … already several accounts on the device”


说明手机上的账户没有删干净,这时候需要注销手机上的所有账户,包括 Google 账号和系统自带的如小米账号、华为账号、OPPO/vivo账号等,另外索尼手机需要拔掉 SIM 卡重启。


问题2:提示 “Not allowed to … already several users on the device”


说明手机的多用户或应用双开没删干净或者关闭,请删除或关闭所有的多用户、访客模式以及应用双开。


问题3:提示 “Trying to set the device owner, but device owner is already set.”


说明手机已经设置了其他 APP 为设备管理员,一台手机上只能有一个设备管理员。


问题4:MIUI 用户提示 “Neither user xxx nor current process has android.permission.MANAGE_DEVICE_ADMINS”


这个时候需要手动在系统设置- 开发者设置里开启「USB 调试(安全设置)」,如果任然不可以,那么就关闭 MIUI 优化重试。


问题5:尝试完以上步骤还是无法设置DeviceOwner权限


但是在有些机型上即便重置了手机,发现还是设置不了DeviceOwner权限,那就说明这台手机存在隐藏账户或者用户了,这时候我们可以通过adb命令来获取手机账户信息从而查看设置不了权限的原因。


查看手机账户(Account):


adb shell dumpsys account

图片


如果账户数目大于0,则请查看手机账户管理,是否有账户存在,存在的账户要退出或者删除;如果没有看到账户,那可能是隐藏账户,需要重置手机,然后再重新设置权限,如下图是重置手机后的结果:


图片


查看手机用户(User):


adb shell dumpsys user

图片


Android 6.0以后,设置DeviceOwner会检测手机里面user数目,如果大于1个则不能设置DeviceOwner权限。


问题6:手机重置之后仍然无法设置DeviceOwner权限


重置手机的时候需要注意,在系统初始化设置的时候,初始化界面上有一些选项(比如智能助手、智能桌面、用户体验计划等),能不选的就都别勾选,因为勾选了这些选项之后系统就会创建一个隐藏的账户。


问题7:提示:java.lang.IllegalStateException: Unexpected @ProvisioningPreCondition 99


这个问题暂时解决不了,据了解OPPO以及Realme 最新的几款机型已经修改了底层源码,不支持设置DeviceOwner了。


截至发稿,我已经在小米、红米、华为、荣耀、三星、魅族、一加、HTC、努比亚、vivo这几款主流机型上验证过了将近200个机型都是可以正常激活DeviceOwner权限的,另外早期的几款OPPO手机型号也是可以的。

0 个评论

要回复文章请先登录注册