文章目录

  • 1. 前言
  • 2. 隐私策略方面
  • 2.1 不可重置设备标识限制
  • 2.2 限制通过API启用/禁用WIFI
  • 2.3 访问WiFi配置受限
  • 3. 用户行为方面
  • 3.1 以旧版本为目标的应用提示


1. 前言

Android10已经发布,在这里将一些Android 10适配的一些注意事项。

这里只说明部分变动,更多详情请前往Google官方介绍

2. 隐私策略方面

2.1 不可重置设备标识限制

在Android 10,app拥有READ_PRIVILEGED_PHONE_STATE权限才能访问设备不可重置的标识(例如:IMEI、设别序列号)。

注意:第三方app无法授予READ_PRIVILEGED_PHONE_STATE权限,也就是只有系统应用才能拥有此权限

此更新影响有以下api:

  • Build
         - getSerial()
  • TelephonyManager
         - getImei()      - getDeviceId()      - getMeid()      - getSimSerialNumber()      - getSubscriberId()

如果应用没有权限并调用获取不可重置设别标识,根据目标API的版本不同,有着不同的效果:

  • 应用目标API在Android 10(API level 29)及以上,抛出SecurityException
  • 应用目标API在Android 9(API level 28)及以下,如果应用授予了READ_PHONE_STATE权限,将返回null或者其他占位符,否则抛出SecurityException

如果需要实现广告追踪等,海外可以使用Google官方的用户唯一标识最佳推荐,至于国内,因各大厂商参差不齐,目前还是比较头疼的事,移动安全联盟搞了个OAID,但据说目前极其不稳定。

2.2 限制通过API启用/禁用WIFI

在Android 10,使用WifiManager.setWifiEnabled() api进行启用/禁用wifi,将直接返回false(接口调用失败)。如果需要设置wifi,请使用设置面板,但必须注意,设置面板只有在Android 10(API level 29)才可用。

2.3 访问WiFi配置受限

如果应用的目标API在Android 10(Api level 29)及以上,一下接口方法将返回无用数据:

  • getConfiguredNetworks()总返回空列表
  • 所有返回整型值的网络操作的方法(如:addNetwork()updateNetwork()),总返回-1
  • 所有返回布尔值的网络操作的方法(如:removeNetwork()reassociate()enableNetwork()disableNetwork()reconnect()disconnect()),总返回false

3. 用户行为方面

3.1 以旧版本为目标的应用提示

如果你的应用targetSdkVersion是在Android 5.1 (API level 22)及以下的话,在启动程序时,系统会弹出一个提示窗口,内容大致是“此应用专为旧版Android打造,可能无法正常运行,请尝试检查更新或与开发者联系”,提示窗口如下:

android10 权限申请源码 android10权限变更_android10 权限申请源码


出现这样的提示窗,是可以继续打开应用,但是对于程序是否能正常运行,就要看兼容性了。作为开发者,应当及时更新自己的应用的目标版本以适配最新系统,在Android 10开始隐私政策和用户行为方面都有很多的改变,如果不及时调整,很要可能导致程序在新系统中无法运行。对于国内厂商,可能很多没有这个限制,假设您的应用需要上海外市场(Google Play),那么你就必须符合他们的政策要求,要达到最低的目标版本,否则会无法上架(即使已上架也会被下架要求更新)