Android版本适配
总结 Android 6 - Android 13 比较有影响的,比较常见的一些场景的开发适配的行为变更。
Android 6
- 在 Android 6 版本开始引进运行时权限机制,Android 将所有的权限归为两类,一类是普通权限,一类是危险权限。普通权限一般不会威胁到用户的安全和隐私,对于这部分权限,系统自动对软件进行授权,不需要询问用户。危险权限是可能对用户的安全和隐私造成影响的权限,如获取设备地理位置,获取设备联系人信息等,这些就需要明确通知用户,并由用户手动进行授权才可以进行相应操作。
Android 7
- Android 7 禁止向你的应用外公开 file://URI, 如果在 Android 7 及以上系统传递 file:// URI 就会触发 FileUriExposedException,不适配的话在 Android 7 及以上系统就会出现应用崩溃的现象。如果要在应用间共享文件,可以发送 content://URI 类型的 URI,并授予 URI 临时访问权限,这就需要用到 FileProvider 类。
Android 8
- 规定所有的通知必须分配一个渠道,每一个渠道,你都可以设置渠道中所有通知的行为。用户界面将通知渠道称之为通知类别,用户可以随意修改这些设置来决定通知的行为。
- 不允许后台应用启动后台服务,需要使用 startForegroundService 指定为前台服务,否则系统会停止 Service 并抛出异常。
- 未知应用安装权限默认关闭,且权限入口隐藏。
Android 9
- 限制了 HTTP 网络请求,如果继续使用 HTTP 请求,会在日志做出警告,不过只是无法正常发出请求,不会导致应用崩溃
Android 10
- Android 10 开始引入了分区存储的概念
- Android 中存储可以分为两大类:专属存储和共享存储。
- 专属存储:每个应用都拥有自己的专属目录,其它应用看不到。它包括 APP 自身的内部存储和外部存储,无需存储权限便可访问。
- 共享存储:共享存储空间存放的是图片,视频和音频等文件,这些资源是公共的,所有 App 都能访问它们。
Android 11
Android 11 增加了单次授权,就是请求与位置信息,麦克风或摄像头相关的权限时,系统会自动提供一个单次授权的选项,只供这一次权限获取,选择它的话,用户下次再次打开 APP 的时候,系统会再次提示用户请求权限,所以,需要我们每次使用的时候去判断一下权限,没有就去申请。
Android 12
Android 12 修改了根 Activity 返回键的默认行为。在以前的版本中,返回键会执行 finish activity,而从 Android 12 开始会将任务栈切换到后台,也就是说在根 Activity 点击返回键时,生命周期只会执行到 onStop,不执行 onDestroy,所以,用户返回应用时将执行温启动。
Android 13
Android 13 引入了运行时通知权限:POST_NOTIFICATIONS, 如果拒绝这个权限的话,应用将无法发送通知,此更改有助于用户只关注自己认为重要的通知,但是与媒体会话以及自行管理通话的应用相关的通知不受此行为变更的影响。