Android 10新特性:设备硬件标识符访问限制与解决方案

0 下载量 39 浏览量 更新于2024-08-29 收藏 79KB PDF 举报
"Android10 (Api 29)对设备硬件标识符访问进行了限制,主要涉及IMEI、序列号等不可重设的设备识别码。系统应用可以正常访问,而第三方应用则受到限制。在Android Q及以上版本,如果targetSdkVersion小于Q,这些方法将返回null或'unknown';如果targetSdkVersion等于或大于Q,则会抛出SecurityException。为应对这一变化,开发者可以采取两种替代方案:一是使用AndroidId,但其值可能因应用签名或用户变化而改变;二是通过硬件信息拼接,但这不是官方推荐且可能不唯一。" 在Android10 (API 29)中,谷歌为了加强用户隐私保护,对设备硬件标识符的访问实施了新的限制。这主要针对IMEI(国际移动设备识别码)、序列号等设备标识符,目的是防止第三方应用无限制地获取用户的设备信息。这些改变对系统应用没有影响,但对第三方应用来说,如果试图通过`TelephonyManager`的`getDeviceId()`、`getSubscriberId()`等方法获取这些信息,将受到限制。 在Android Q及更高版本中,如果应用的`targetSdkVersion`小于Q,这些方法会返回`null`或字符串"unknown";而如果`targetSdkVersion`等于或大于Q,调用这些方法会抛出`SecurityException`,提示用户权限不足。例如,尝试获取IMEI或序列号时,会出现类似"The user 10196 does not meet the requirement to access device identifiers."的错误信息。 为了适应这一变化,开发者需要寻找替代策略来获取设备唯一标识。一种解决方案是使用`Settings.Secure.ANDROID_ID`,即`androidId`。这个ID基于设备的硬件和软件状态生成,但在不同签名的应用之间可能会有所不同,因此并不总是全局唯一。当应用的签署密钥或用户发生变化时,`androidId`的值也可能改变。 另一种替代方案是通过读取设备的其他硬件信息并进行拼接来创建一个自定义的设备标识。这种方法虽然可能在一定程度上保持稳定性,不依赖于应用签名,但并未得到官方支持,因此可能存在安全风险,并且不能保证生成的ID在所有情况下都是唯一的。 Android10的这些改动要求开发者更加重视用户隐私,谨慎处理设备标识符的获取和使用。在设计应用时,应当遵循最佳实践,尊重用户隐私,避免因不当使用设备信息而引发的安全问题。同时,开发者需要根据新的API限制调整代码逻辑,选择合适的替代方案来满足应用的需求。