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

转自:https://blog.csdn.net/qq_37199105/article/details/89632363

前言
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升级之后观望结果吧。
--------------------- 
作者:_YoungMan 
来源:CSDN 
原文:https://blog.csdn.net/qq_37199105/article/details/89632363 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(Android)