You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android系统如何使用MediaStore访问其他应用创建的媒体文件

Android 10读取其他应用创建的公共媒体文件解决方案

你遇到的报错是Android 10引入的分区存储限制导致的,默认应用只能访问自身向MediaStore写入的媒体文件,要访问其他应用创建的公共媒体文件,需要按以下步骤修改:

1. 权限配置与申请

  • 清单文件声明对应权限:
    • 若targetSdkVersion ≤ 32,声明READ_EXTERNAL_STORAGE权限
    • 若targetSdkVersion ≥ 33,声明READ_MEDIA_AUDIO权限
  • 上述权限都属于运行时权限,必须在代码中主动发起申请,拿到用户授权后才能访问媒体文件
  • 临时适配方案:如果不想做分区存储适配,可在AndroidManifest.xml的<application>节点添加属性android:requestLegacyExternalStorage="true",即可在Android 10设备上沿用旧版存储访问逻辑

2. 代码逻辑修正

你当前代码中调用getPathFromUri(testUri)拿到原始文件路径传给MediaPlayer的逻辑是错误的,分区存储规则下,你没有权限直接访问其他应用创建文件的原始路径,会触发权限拒绝的报错。正确做法是直接使用MediaStore查询得到的Uri设置数据源:

// 错误用法:用转出来的本地路径设置
// mediaPlayer.setDataSource(getPathFromUri(testUri));

// 正确用法:直接传入MediaStore返回的Uri
mediaPlayer.setDataSource(context, uri);
mediaPlayer.prepareAsync();

3. 补充注意点

  • 查询MediaStore时的筛选条件RELATIVE_PATH要保证和其他应用写入文件时的路径完全一致,注意末尾斜杠、大小写等差异,避免查询不到其他应用写入的文件
  • 注意:android:requestLegacyExternalStorage仅在Android 10设备上生效,Android 11及以上系统会忽略该属性,长期适配建议直接使用Uri访问媒体资源,不要依赖原始文件路径

内容的提问来源于stack exchange,提问作者swiftbegineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:45:00