爱笑的姑娘|拖不得了,Android11真的要来了,最全适配实践指南奉上( 五 )

判断该值 , 如果为 true , 则将连接视为不按流量计费 。
后台位置信息访问权限 ?在搭载 Android 11 的设备上 , 当应用中的某项功能请求在后台访问位置信息时 , 用户看到的系统对话框不再包含用于启用后台位置信息访问权限的按钮 。 如需启用后台位置信息访问权限 , 用户必须在设置页面上针对应用的位置权限设置一律允许选项 。
什么意思呢?在较低版本的Android系统中 , 当应用获得前台位置信息访问权限时 , 也会自动获得后台位置信息访问权限 。 比如我请求一个前台位置访问权限:
requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), 100)授权后 , 就能同时获取前台位置权限和后台位置权限(ACCESS_BACKGROUND_LOCATION) 。
但是现在不行了 , 你必须单独申请后台位置权限 , 而且 , 要在获取前台权限之后 , 顺序还不能乱 。
requestPermissions(arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), 100)如果在没获取前台权限的时候执行这个获取后台权限的代码会没反应 , 等获取前台权限(ACCESS_COARSE_LOCATION)之后 , 申请后台权限就会跳转到一个新的权限页面了 , 而且必须选择Allow all the time (始终允许)才能获得后台位置权限 , 看图:
爱笑的姑娘|拖不得了,Android11真的要来了,最全适配实践指南奉上
软件包可见性 ?Android 11 更改了应用查询用户已在设备上安装的其他应用以及与之交互的方式 。 使用新的 元素 , 应用可以定义一组自身可访问的其他应用 。 通过告知系统应向您的应用显示哪些其他应用 , 此元素有助于鼓励最小权限原则 。 此外 , 此元素还可帮助 Google Play 等应用商店评估应用为用户提供的隐私权和安全性 。
也就是说 , Android11中 , 如果你想去获取其他应用的信息 , 比如包名 , 名称等等 , 不能直接获取了 , 必须在清单文件中添加元素 , 告知系统你要获取哪些应用信息或者哪一类应用 。
比如我这段查询应用信息的代码:
val pm = this.packageManagerval listAppcations: List = pm.getInstalledApplications(PackageManager.GET_META_DATA)for (app in listAppcations) {Log.e("lz",app.packageName)}在Android11版本 , 只能查询到自己应用和系统应用的信息 , 查不到其他应用的信息了 。 怎么呢?添加元素 , 两种方式:
1)元素中加入具体包名
...1)元素中加入固定过滤的intent
可能还是有人会疑惑 , 那我的应用是浏览器或者设备管理器咋办呢?我就要获取所有包名啊? 放心 , Android11还引入了 QUERY_ALL_PACKAGES 权限 , 清单文件中加入即可 。 但是Google Play可不一定能滥用哦 , 它为需要QUERY_ALL_PACKAGES 权限的应用会提供相关指南 , 但是还没出来 , 具体要看后面的消息了 。
至于国内市场 。。。 (希望能有个应用市场一统天下好好管理这混乱的市场吧!)
文档访问限制为让开发者有时间进行测试 , 以下与存储访问框架 (SAF) 相关的变更只有在应用以 Android 11 为目标平台时才会生效 。
上文存储的时候说过可以通过SAF(存储访问框架--Storage Access Framework)来访问公共目录 , 但是Android11再次升级 , 部分目录和文件不能访问了 , 具体如下:
无法再使用 ACTION_OPEN_DOCUMENT_TREE intent 操作请求访问以下目录:


推荐阅读