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