Android Q 中的多媒体文件访问策略详解
"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`等工具来适应这些变化,同时确保符合最新的权限管理规定,以保证应用在新平台上的兼容性和安全性。"
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 6
- 资源: 964
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 十种常见电感线圈电感量计算公式详解
- 军用车辆:CAN总线的集成与优势
- CAN总线在汽车智能换档系统中的作用与实现
- CAN总线数据超载问题及解决策略
- 汽车车身系统CAN总线设计与应用
- SAP企业需求深度剖析:财务会计与供应链的关键流程与改进策略
- CAN总线在发动机电控系统中的通信设计实践
- Spring与iBATIS整合:快速开发与比较分析
- CAN总线驱动的整车管理系统硬件设计详解
- CAN总线通讯智能节点设计与实现
- DSP实现电动汽车CAN总线通讯技术
- CAN协议网关设计:自动位速率检测与互连
- Xcode免证书调试iPad程序开发指南
- 分布式数据库查询优化算法探讨
- Win7安装VC++6.0完全指南:解决兼容性与Office冲突
- MFC实现学生信息管理系统:登录与数据库操作