Android Q 中的多媒体文件访问策略详解
32 浏览量
更新于2024-08-28
收藏 117KB PDF 举报
"Android Q 沙箱适配多媒体文件的小结主要涉及在Android Q系统中,由于安全性的提升,应用程序对多媒体文件的访问模式发生了变化。在新的Android版本中,应用需要适配新的沙箱机制,尤其是对外部媒体文件(如照片、视频和图片)的扫描、读取和写入操作。
在Android Q中,外部媒体文件的扫描依然通过`MediaStore`接口进行。`MediaStore`是一个系统提供的多媒体数据库,存储着设备上的音频、视频和图像信息。以下是一个示例代码,展示了如何查询本地视频信息:
```java
protected List<VideoInfo> doInBackground(Void... params) {
mContentResolver = context.getContentResolver();
String[] mediaColumns = {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.MIME_TYPE,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.SIZE,
MediaStore.Video.Media.DATE_ADDED,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.WIDTH,
MediaStore.Video.Media.HEIGHT
};
Cursor cursor = mContentResolver.query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
mediaColumns,
null, null, MediaStore.Video.Media.DATE_ADDED
);
if (cursor == null) {
return null;
}
// 在Android Q中,MediaStore.Video.Media.DATA不再提供有效的文件路径
int ixData = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
int ixMime = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE);
...
}
```
在上述代码中,我们看到通过`ContentResolver`查询`MediaStore.Video.Media.EXTERNAL_CONTENT_URI`来获取视频信息。然而,需要注意的是,在Android Q及更高版本中,`MediaStore.Video.Media.DATA`字段不再提供可访问的文件路径,因为文件现在被隔离在应用的私有沙箱内。因此,应用不能直接使用这个字段来访问文件,而应该使用`ContentResolver`和`Uri`来操作文件。
对于读取多媒体文件,Android Q引入了`DocumentFile`类,它允许应用以安全的方式操作文件,包括创建、删除、重命名等。例如,要读取一个文件,应用需要先获取到对应的`Uri`,然后使用`ContentResolver.openInputStream()`打开输入流进行读取。
写入操作同样受到影响。在Android Q之前,应用可以直接写入外部存储的文件,但现在需要通过`ContentResolver`的`openOutputStream()`方法获取输出流,然后写入数据。在写入完成后,系统会自动更新`MediaStore`中的元数据。
此外,对于权限管理,Android Q要求应用需要`MANAGE_EXTERNAL_STORAGE`权限才能访问所有外部存储空间的文件,否则只能访问自己创建或修改的文件。在目标API级别29及以上时,开发者需要考虑适配这一权限变更,以确保应用在新系统上的正常运行。
总结起来,Android Q的沙箱机制对多媒体文件的处理提出了新的挑战,开发者需要调整代码,使用`MediaStore`、`ContentResolver`和`DocumentFile`等工具来适应这些变化,同时确保符合最新的权限管理规定,以保证应用在新平台上的兼容性和安全性。"
180 浏览量
2021-05-26 上传
2022-11-21 上传
2013-08-17 上传
2021-05-27 上传
2021-05-21 上传
2021-02-18 上传
2021-05-20 上传
2020-08-25 上传
weixin_38562085
- 粉丝: 6
- 资源: 964
最新资源
- JavaScript实现的高效pomodoro时钟教程
- CMake 3.25.3版本发布:程序员必备构建工具
- 直流无刷电机控制技术项目源码集合
- Ak Kamal电子安全客户端加载器-CRX插件介绍
- 揭露流氓软件:月息背后的秘密
- 京东自动抢购茅台脚本指南:如何设置eid与fp参数
- 动态格式化Matlab轴刻度标签 - ticklabelformat实用教程
- DSTUHack2021后端接口与Go语言实现解析
- CMake 3.25.2版本Linux软件包发布
- Node.js网络数据抓取技术深入解析
- QRSorteios-crx扩展:优化税务文件扫描流程
- 掌握JavaScript中的算法技巧
- Rails+React打造MF员工租房解决方案
- Utsanjan:自学成才的UI/UX设计师与技术博客作者
- CMake 3.25.2版本发布,支持Windows x86_64架构
- AR_RENTAL平台:HTML技术在增强现实领域的应用