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

Android应用通过Uri播放同目录外部音频失败,求替代ACTION_OPEN_DOCUMENT_TREE方案

应用功能说明
  • 允许用户从手机存储中选择XML文件
  • 通过ACTION_OPEN_DOCUMENT(原ACTION_GET_CONTENT)Intent打开XML文件,借助XML的Uri创建临时File读取内容(应用原本仅处理File而非Uri)
  • XML数据包含一个音频文件路径,该音频始终与XML位于同一目录下,示例:
    • XML路径:myStorage/myProject/example.xml
    • 音频文件:myStorage/myProject/audio/audioSample.mp3
  • 读取完XML数据后,用户打开新Fragment,其中的MediaPlayer需要播放上述音频文件
  • MediaPlayer原本使用应用内部资源路径作为测试音频,例如"content://" + "com.my.app/" + "audio/audioSample.mp3",同时支持通过Uri而非路径字符串播放媒体
问题描述
  • 无法播放应用内部资源以外的外部音频文件
已尝试方案
  • 使用MediaPlayer的Uri和路径字符串两种播放方式
  • 硬编码“audioSample”的绝对路径字符串
  • 基于XML原始Uri创建新Uri,例如"content://interalStorage/myProject:audio/audioSample.mp3"
  • 对Uri路径的最后部分进行编码(参考用户直接选择音频文件时系统生成的Uri格式)
  • 直接复制系统生成的音频文件Uri并硬编码
  • 得到自认为正确的Uri后,出现错误:No persistable permission grants found for UID 10476 and Uri content://com.android.externalstorage.documents/document/primary:myProject/audio/audioSample.mp3。查阅资料了解到takePersistableUriPermission选项,但存在问题:
    • 该方法与fileChooserResultLauncher兼容性不佳,仅适配已废弃的onActivityResult
    • 权限仅针对单个文件,无法覆盖整个“myProject”目录;因此考虑使用ACTION_OPEN_DOCUMENT_TREE
提问

除ACTION_OPEN_DOCUMENT_TREE外,是否有其他解决方案?另外,能否将目录权限请求包含在原有Intent中,还是必须让用户进行两次选择(一次选XML,一次选目录)?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:47:53