Android Q适配攻略(三)(唯一标识符更改)

Android Q之提前适配攻略(一)(图标适配)

Android Q之提前适配攻略(二)(后台定位适配)

Android Q之提前适配攻略(三)(唯一标识符更改)

Android Q之提前适配攻略(四)(后台Activity启动限制)

Android Q之提前适配攻略(五)(读取权限变更)

 

前言

AndroidQ对设备的系统标识增加了更多的限制和修改,那么让我们来看一下,在AndroidQ的上的改动和适配方法。

MAC地址

默认情况下,搭载 Android Q 的设备会传输随机选择的 MAC 地址。如果您的应用处理企业用例,平台会提供几个新的 API:

  • 获取随机选择的 MAC 地址:设备所有者应用和个人资料所有者应用可以通过调用 WifiConfiguration.getRandomizedMacAddress() 检索分配给特定网络的随机选择 MAC 地址。这个方法返回的mac地址永远为02:00:00:00:00:00,所以这个接口没有什么实际意义。
  • 获取实际的出厂 MAC 地址:设备所有者应用可以通过调用 WifiInfo.getFactoryMacAddress() 检索设备的实际硬件 MAC 地址。此方法对于跟踪设备队列非常有用。这方法目前在AndroidQ beta2中并未实装到SDK,无法调用。原因不明,但是官方文档里确实说了这个方法。

不可重置的设备标识符

AndroidQ将彻底禁止第三方应用获取设备的imei序列号,无论你是以target多少版本编译的应用,都不能在AndroidQ的设备上获得设备标识符。所以如果你只是想得到唯一标识符,请不要再加入READ_PHONE_STATE权限,不会生效。

如果你的应用可以加入系统级应用,那么你需要加入权限



READ_PRIVILEGED_PHONE_STATE为系统级别权限,第三方应用加入无效。

如果依然使用获取imel相关的代码时

  • 如果应用以 Android Q 为目标平台,则会发生 SecurityException
  • 如果应用以 Android 9(API 级别 28)或更低版本为目标平台,则相应方法会返回 null 或占位符数据(如果应用具有 READ_PHONE_STATE 权限)。否则,会发生 SecurityException

那我们应该如何来正确获取一个唯一识别码呢?

其实Google很久以前就专门写文档说明过这个问题唯一识别符的最佳做法

这里如果后台只是想要一个唯一识别符,那么我们最适合的选择应该是UUID,UUID每次请求都会重新生成,所以我们申请一个UUID后,用sp把他存储起来。这样只要我们的App没有被删除,这个UUID将永远唯一的存在。我知道这里有的同学会把UUID直接存到sd卡里,这样就算卸载了App依然可以保证UUID是存在的,不过我们都知道AndroidQ对IO进行了修改,你这么做不合适了已经。

UUID.randomUUID().toString()

得到一个唯一的识别符,保存起来就可以了。

访问剪贴板数据

除非您的应用是默认输入法 (IME) 或是目前处于焦点的应用,否则应用无法访问剪贴板数据。

这句话的意思其实就是,你的App不再可以在不可见也就是后台状态下访问剪贴板,具体没有适配方法,请遵守Google的开发要求。

以下变更仅会影响以 Android Q 为目标平台的应用。

访问 USB 串行设备需要用户授予权限

如果您的应用以 Android Q 为目标平台,则该应用只能在用户授予其访问 USB 设备或配件的权限后才能读取序列号。

 

总结

唯一识别符的改动和适配还是比较容易理解的,我现在唯一想知道的是那些第三方的推送平台,没有了读取设备id的权限以后要怎么正确的完成推送动作,等三方SDK升级之后观望结果吧。

你可能感兴趣的:(版本适配)