| — | — |
| createWriteRequest (ContentResolver, Collection) | 用户向应用授予对指定媒体文件组的写入访问权限的请求。 |
| createFavoriteRequest (ContentResolver, Collection, boolean) | 用户将设备上指定的媒体文件标记为 “收藏” 的请求。对该文件具有读取访问权限的任何应用都可以看到用户已将该文件标记为 “收藏”。 |
| createTrashRequest (ContentResolver, Collection, boolean) | 用户将指定的媒体文件放入设备垃圾箱的请求。垃圾箱中的内容在特定时间段(默认为 7 天)后会永久删除。 |
| createDeleteRequest (ContentResolver, Collection) | 用户立即永久删除指定的媒体文件(而不是先将其放入垃圾箱)的请求。 |
系统在调用以上任何一个方法后,会构建一个 PendingIntent 对象。应用调用此 intent 后,用户会看到一个对话框,请求用户同意应用更新或删除指定的媒体文件。
2. 使用直接文件路径和原生库访问文件
为了帮助您的应用更顺畅地使用第三方媒体库,Android 11 允许您使用除 MediaStore API 之外的 API 访问共享存储空间中的媒体文件。不过,您也可以转而选择使用以下任一 API 直接访问媒体文件:
File API。
原生库,例如 fopen()。
简单来说就是,可以通过 File()
等API 访问有权限访问的媒体集了。
性能:
通过 File ()
等直接通过路径访问的 API 实际上也会映射为MediaStore
API 。
按文件路径顺序读取的时候性能相当;随机读取和写入的时候则会更慢,所以还是推荐直接使用 MediaStore
API。
3. 新增权限
MANAGE_EXTERNAL_STORAGE
: 类似以前的 READ_EXTERNAL_STORAGE
+ WRITE_EXTERNAL_STORAGE
,除了应用专有目录都可以访问。
应用可通过执行以下操作向用户请求名为所有文件访问权限的特殊应用访问权限:
- 在清单中声明
MANAGE_EXTERNAL_STORAGE
权限。 - 使用
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
intent 操作将用户引导至一个系统设置页面,在该页面上,用户可以为您的应用启用以下选项:授予所有文件的管理权限。
- 在 Google Play 上架的话,需要提交使用此权限的说明,只有指定的几种类型的 APP 才能使用。
Sample
-
使用
MediaStore
增删改查媒体集 -
使用
Storage Access Framework
访问文件集
1. 媒体集
1) 查询媒体集(需要 READ_EXTERNAL_STORAGE 权限)
实际上 MediaStore
是以前就有的 API ,不同的是过去主要通过 Medi