Android 10 (API 29)新特性:设备标识访问限制造成的影响与替代方案

1 下载量 100 浏览量 更新于2024-08-29 收藏 79KB PDF 举报
Android 10 (API级别29)引入了一项重要的安全更新,即设备硬件标识符访问限制。这个新特性旨在保护用户的隐私,防止应用滥用不可更改的设备标识,如IMEI(国际移动设备身份码)、序列号等。在Android Q及更高版本中,对于这些系统敏感信息的操作有显著变化: 1. 原来的做法:在Android Q之前,开发者可以通过`TelephonyManager`获取设备ID和序列号等信息。但在API 29及后续版本中,如果没有满足特定权限要求,这些方法将不再直接可用。例如,尝试获取IMEI时,如果targetSdkVersion小于Q,可能返回null或"unknown";如果大于等于Q,则会抛出`SecurityException`,提示用户没有权限访问设备标识。 2. 受影响的方法:`Build.getSerial()`,`TelephonyManager.getImei()`, `getDeviceId()`, `getMeid()`, `getSimSerialNumber()`以及`getSubscriberId()`都受到影响。 3. 替代方案: - 方案一:使用Android ID,虽然这个标识是基于应用的签名密钥生成的,不同应用可能会得到不同的Android ID,但当应用使用相同的签名密钥时,Android ID保持不变。此方案适用于测试,但不保证在系统恢复或升级后仍保持一致。 ``` String androidId = Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); ``` - 方案二:通过硬件信息的组合来创建一个独特的标识,这种方法相对更稳定,不受应用签名影响,但非官方推荐,可能存在一定的不确定性和不安全性。 Android 10对设备硬件标识符的访问进行了严格的控制,开发者在设计应用时需要遵循新的权限模型,并考虑使用替代方法来获取必要的设备信息,同时尊重用户的隐私权。这体现了Android在隐私保护上的持续改进,也是向更安全的移动设备生态系统迈进的重要一步。