Android Q 要来了,给你一份很"全面"的适配指南!

论坛 期权论坛     
选择匿名的用户   2021-5-22 15:22   63   0
<div id="js_content">
<p><img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-24715a73780743d18898dcc39b639a3d" title="" width="640"></p>
<p style="text-align: center"><img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-ba4c05e59bd8854412d67926210db680" width="940"></p>
<p>Android Q 越来越近了,最近 Google 又发布了 Android Q Beta 的第五个版本,眼瞅着这进度,在今年 Q3 季度,Android Q 就正式和用户见面了,在此之前,开发者必然又是面临的一波让人头疼的适配。<br></p>
<img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-66e4f348daf2a5110870b29d2def6b95" title="" width="728">
<p>了解新特性,首推应该去看官方文档,官方已经给出了一份完整的新特性文档,在发布的这段时间,也一直在保持同步的更新。而作为开发者,我们更关心的是如何解决在我们现有的 App 上,保证 Android Q 的兼容性问题。</p>
<p>今天就给推荐给大家一份适配文档,以开发者的角度列一份适配清单,在 Android Q 还没来之前,先了解需要做什么,以及怎么做,到时候才不至于措手不及。</p>
<p>这份文档的出自 OPPO 开放平台,可能有人会觉得是 KPI 工程,但是你想想这些厂商每年耗巨资研发的旗舰机,用着最新的硬件,当然要搭配最新的系统,而用户在旗舰机上的体验,也是他们最关心的,所以每次 Android 发布新系统,这些厂商也在推进自己应用市场上 App 的适配工作。</p>
<p>你只需要想想他们做这件事的动机,就能知道这份文档肯定是花了心思的。文档我看过一遍,从场景出发来分析原因,并附上解决方案,很有参考意义。</p>
<p>文档比较长,大家可以先收藏,再跳跃阅读看自己关注的点。</p>
<hr>
<h2>一. 背景说明</h2>
<p>本文档是基于谷歌安卓 Q 的 beta4 版本的变更输出的兼容性整改指导,如果后续 beta 版本有新的变更和新的特性,我们也会刷新文档的相关章节内容,请开发者持续关注。</p>
<h2>二. 存储空间限制</h2>
<h3>2.1 背景</h3>
<p>为了让用户更好地控制自己的文件,并限制文件混乱的情况,Android Q 修改了 APP 访问外部存储中文件的方法。外部存储的新特性被称为 Scoped Storage。</p>
<p>Android Q 仍然使用 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 作为面向用户的存储相关运行时权限,但现在即使获取了这些权限,访问外部存储也受到了限制。APP 需要这些运行时权限的情景发生了变化,且各种情况下外部存储对 APP 的可见性也发生了变化。</p>
<p>在 Scoped Storage 新特性中,外部存储空间被分为两部分:</p>
<p><strong>●</strong> <strong>公共目录</strong>:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones 等</p>
<ul><li><p>公共目录下的文件在 APP 卸载后,不会删除。</p></li><li><p>APP 可以通过 SAF(System Access Framework)、MediaStore 接口访问其中的文件。</p></li></ul>
<p><strong>●</strong> <strong>App-specific 目录</strong></p>
<ul><li><p>APP 卸载后,数据会清除。</p></li><li><p>APP 的私密目录,APP 访问自己的 App-specific 目录时无需任何权限。</p></li></ul>
<p style="text-align: center"><img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-86a93196f6d85e128ba913756cd986c1" width="919"></p>
<p>Android Q 规定了 APP 有两种外部存储空间视图模式:Legacy View、Filtered View。<br></p>
<p><strong>●</strong> <strong>Filtered View</strong></p>
<ul><li><p>App 可以直接访问 App-specific 目录,但不能直接访问 App-specific 外的文件。访问公共目录或其他 APP 的 App-specific 目录,只能通过 MediaStore、SAF、或者其他 APP 提供的 ContentProvider、FileProvider 等访问。</p></li></ul>
<p><strong>●</strong> <strong>Legacy View</strong></p>
<ul><li><p>兼容模式。与 Android Q 以前一样,申请权限后 App 可访问外部存储,拥有完整的访问权限。</p></li></ul>
<p>在 Android Q 上,target SDK 大于或等于 29 的 APP 默认被赋予 Filtered View,反之则默认被赋予 Legacy View。APP 可以在 <code>AndroidManifest.xml</code> 中设置新属性 <code>requestLegacyExternalStorage</code> 来修改外部存储空间视图模式,true 为 Legacy View,false 为 Filtered View。可以使用 <code>Environment.isExternalStorageLegacy()</code> 这个 API 来检查 APP 的运行模式。APP 开启 Filtered View 后,Scoped Storage 新特性对 APP 生效。</p>
<p>Android Q 除了划分外部存储和定义 Filtered View,还在查询、读写文件的一些细节上做了改进或限制,例如图片文件中的地理位置信息将不再默认提供、查询 MediaProvider 获得的 DATA 字段不再可靠、新增了文件的 Pending 状态等等。这些
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP