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

Android Java 从URI获取MP4路径供MediaExtractor调用失败怎么解决?

错误原因

content://开头的URI是系统内容提供器返回的共享文件标识,不是本地文件路径,调用Uri.getPath()得到的是内容提供器内部的映射路径,不是磁盘上的真实文件存储路径,直接传给仅接收本地路径的setDataSource(String path)方法必然抛出IO异常。

最简解决方案

不需要写复杂的URI转真实路径逻辑,直接使用MediaExtractor自带的重载方法,通过文件描述符加载内容即可,适配所有Android 4.4及以上版本的系统文件选择器返回结果:

Uri currFileURI = data.getData();
MediaExtractor extractor = new MediaExtractor();
try {
    AssetFileDescriptor afd = getContentResolver().openAssetFileDescriptor(currFileURI, "r");
    // 传入偏移量和长度,适配切片共享文件场景,兼容性更强
    extractor.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
    afd.close();
} catch (IOException e) {
    e.printStackTrace();
    return;
}

方案优势

  • 无需适配不同厂商、不同系统版本的URI路径规则,代码量仅几行
  • 兼容所有合法的文件URI,包括下载目录、媒体库、第三方应用提供的共享文件
  • 自动适配系统权限规则,只要拿到URI时获取了读取权限即可正常访问,无需额外申请存储权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:06:06