要不了多久,Android 13正式版就要发布了。
其实就在几个月前,我写了一篇关于Android 13首个开发者体验版的全面介绍,详情可以参考 Android 13 Developer Preview一览 。
那么相比于首个开发者体验版,目前Android 13已经进入了平台稳定期阶段,也就是说API基本已经固定,不会再有什么大的修改了。
于是我又重新回顾了一遍Android 13的重要新特性和行为变更,发现有一处重大变化在首个开发者体验版中几乎没有提及,那就是Android 13的运行时权限变更。
因此,今天我就再写一篇Android 13的运行时权限变更一览,带你全面了解Android 13的所有运行时权限变更。
/ 细化的媒体权限 /
Google在Android 13上对本地数据访问权限做了更进一步的细化。
只能说Google为了保护用户隐私已经不遗余力了,而且今天的这步棋其实已经提前布局了很久了。
要知道,早在Android 10系统中,Google就禁用了本地文件通过绝对路径直接访问的形式,而是要通过MediaStore API来进行访问,我们称这个功能为Scoped Storage。
关于Scoped Storage,我在两年前就写过一篇文章进行介绍,详细请参考 Android 10适配要点,作用域存储 。
在这篇文章中,有这样的一处描述:
Android 10系统针对文件类型进行了分类,图片、音频、视频这三类文件将可以通过MediaStore API来进行访问,而其他类型的文件则需要使用系统的文件选择器来进行访问。
另外,我们的应用程序向媒体库贡献的图片、音频或视频,将会自动拥有其读写权限,不需要额外申请READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限。而如果你要读取其他应用程序向媒体库贡献的图片、音频或视频,则必须要申请READ_EXTERNAL_STORAGE权限才行。WRITE_EXTERNAL_STORAGE权限将会在未来的Android版本中废弃。
这部分描述在Android 13之前看起来基本都是正确的。WRITE_EXTERNAL_STORAGE权限虽然还没有被废弃,但是我们无论在各种场景下几乎都已经不太可能再用到它了。
然而在Android 13当中,Google为了让用户能够更精细化地管理媒体权限,反而先对READ_EXTERNAL_STORAGE权限下手了。
从Android 13开始,如果你的应用targetSdk指定到了33或以上,那么READ_EXTERNAL_STORAGE权限就完全失去了作用,申请它将不会产生任何的效果。
与此相对应的,Google新增了READ_MEDIA_IMAGES、READ_MEDIA_VIDEO和READ_MEDIA_AUDIO这3个运行时权限,分别用于管理手机的照片、视频和音频文件。
也就是说,以前只要申请一个READ_EXTERNAL_STORAGE权限就可以了。现在不行了,得按需申请,用户从而能够更加精细地了解你的应用到底申请了哪些媒体权限。
至于申请运行时权限的代码都是同样的模板,并没有什么特别的地方。这里给大家贴出一个用Activity Result API申请的版本,PermissionX由于我还没去适配Android 13,暂时还没法跟大家演示,等适配完成后我会再写一篇文章。