Android-适配记录API28~33:读写权限变更记录
背景
因为Android应用市场要求是最低要求API 30以上,我准备就直接从API 28升到API 33了,其中遇到了一些读写存储空间的问题,这里做一些记录总结~
相关权限:
permission.READ_EXTERNAL_STORAGEpermission.WRITE_EXTERNAL_STORAGEpermission.MANAGE_EXTERNAL_STORAGEpermission.READ_MEDIA_VIDEOpermission.READ_MEDIA_IMAGESpermission.READ_MEDIA_AUDIO
相关知识点
低版本的,我这里就不说明了
- Android 10(API 级别 29)开始,
android.permission.WRITE_EXTERNAL_STORAGE权限的行为发生了变化,这个权限默认情况下被视为无效,可以通过permission.MANAGE_EXTERNAL_STORAGE获取全部文件的权限,但是只有系统应用程序或具有特殊要求的应用程序才能申请此权限,Environment.isExternalStorageManager()判断自己是否获取了全部的权限。Environment.getExternalStorageDirectory()在没有权限时,是无法访问的。 android:requestLegacyExternalStorage="true"是一个用于在 Android 10(API 级别 29)及以上版本中启用传统外部存储权限模式的应用程序清单属性,Android 11(API 级别 30)中将不再生效。- Android 11(API 级别 30) 后,默认获取权限可以通过
context.getExternalFilesDir获取外部存储的,/storage/emulated/0/Android/data/包名/file,不需要特殊的权限,因为这个目录是应用程序的私有目录,删除app后会同时删除。 - Android 11(API 级别 30) 中,读取媒体文件的权限受到了更严格的限制。即使你声明了
READ_EXTERNAL_STORAGE权限,你的应用程序也只能访问自己的媒体文件或存储在媒体库中的公共文件。如果你需要访问其他应用程序的媒体文件,你需要使用 Storage Access Framework 或 MediaStore API 来进行访问。 - 要读取媒体文件(如图片、音频、视频等)需要
permission.READ_EXTERNAL_STORAGE, 在Android 33后被细分出了permission.READ_MEDIA_VIDEO,permission.READ_MEDIA_IMAGES,permission.READ_MEDIA_AUDIO
总结
- Android 10(API 级别 29)以后:
android.permission.WRITE_EXTERNAL_STORAGE默认无效,但是可以使用android:requestLegacyExternalStorage="true"过度。 - Android 11(API 级别 30)以后:
androi

本文档概述了Android从API28到33期间对读写权限的更新,包括WRITE_EXTERNAL_STORAGE行为的变化、MANAGE_EXTERNAL_STORAGE权限的应用、以及在不同版本中访问第三方相册和媒体文件的方法。特别关注了Android10和11后的权限管理策略以及新版本对媒体文件权限的细分。
最低0.47元/天 解锁文章
4290

被折叠的 条评论
为什么被折叠?



