• Android Q适配(1)-------图标篇: https://blog.csdn.net/ccffvii/article/details/89037137
  • Android Q适配(2)-------定位篇: https://blog.csdn.net/ccffvii/article/details/89215861
  • Android Q适配(3)-------唯一标识符篇:https://blog.csdn.net/ccffvii/article/details/89306853
  • Android Q适配(4)-------针对后台 Activity 启动的限制:https://blog.csdn.net/ccffvii/article/details/89446351

前言

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很久以前就专门写文档说明过这个问题《唯一识别符的最佳做法》:https://developer.android.com/training/articles/user-data-ids

这里如果后台只是想要一个唯一识别符,那么我们最适合的选择应该是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的权限以后要怎么正确的完成推送动作。不过这也不是我该想的事。

  • Github: https://github.com/liyuhaolol
  • 博客: http://blog.csdn.net/ccffvii
  • 简书: https://www.jianshu.com/u/a305fae6394f
  • 邮箱: liyuhaoid@sina.com

如果看不懂或者我写的有问题的地方,欢迎在评论中指出,大家一切探究讨论!

更多相关文章

  1. Android(安卓)动态获取权限(6.0 , 7.0)
  2. Android(安卓)输入系统(二)EventHub
  3. android组播开发(2.3.7以下无法正常接收组播)
  4. Android各个版本API的差异
  5. android 6.0 权限问题的解决
  6. Android(安卓)6.0 RxJava2 + RxPermissions 获取运行时权限
  7. Android(安卓)广播大全 Intent Action 事件
  8. android访问权限(Android(安卓)permission )大全
  9. Android(安卓)调用用相机拍照保存在本地,imageview根据路径读取图

随机推荐

  1. android 自定义title样式
  2. 周末好去处!猿圈带你【2小时了解Android安
  3. 利用android sdk 下的adb程序捕获手机log
  4. Android(安卓)API : SMS短信服务处理
  5. Android下led控制(下)--Linux驱动部分--p
  6. Android(安卓)EditText 的使用及值得注意
  7. Android(安卓)java层音频相关的分析与理
  8. 清洁和新Android架构的认知诉求
  9. android项目目录介绍之二
  10. 【翻译】Android(安卓)数据存储