已获取设备管理员权限的Android 10设备如何获取IMEI
Android 10 设备管理员权限获取IMEI可行方案
前提注意事项
DevicePolicyManager.EXTRA_PROVISIONING_IMEI 仅可在设备首次置备(激活设备管理员)阶段获取,应用日常运行时调用无法拿到有效值,这是调用失败的核心原因。
Android 10 对唯一标识获取做了强制限制,仅*设备所有者(Device Owner)/ 配置文件所有者(Profile Owner)*级别的应用可获取IMEI,普通设备管理员权限不满足要求。
实现方案
方案1:置备阶段获取IMEI
仅可在设备首次置备流程中取值,拿到后需自行持久化存储,后续无法二次获取:
- 提前注册广播接收
DevicePolicyManager.ACTION_PROVISIONING_SUCCESSFUL,该广播仅会在置备完成后触发一次 - 在广播回调的
onReceive方法中,从传入的intent中提取DevicePolicyManager.EXTRA_PROVISIONING_IMEI对应的字符串,此时可拿到有效IMEI
方案2:日常运行时获取稳定替代标识
如果无法在置备阶段操作,可使用官方提供的专属稳定标识替代IMEI做设备识别:
调用DevicePolicyManager.getEnrollmentSpecificId()即可获取,该标识只要设备不恢复出厂、不取消应用的设备所有者权限就不会变更,支持运行时直接调用,无需额外权限。
错误排查项
- 调用
DevicePolicyManager.isDeviceOwnerApp(你的应用包名)验证返回值是否为true,确认应用具备设备所有者权限 - 若返回为
false,说明应用仅为普通设备管理员,无法获取IMEI,需重新走设备所有者置备流程
内容的提问来源于stack exchange,提问作者andrefarinh
相关产品推荐
相关产品推荐

