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

Android MediaPlayer调用setDataSource报status=0x80000000错误问询

错误原因
  • 核心错误是多余的URI解码操作:Android Content URI 本身是符合RFC规范的编码格式,Uri.parse()要求传入编码后的合法URI字符串。你将URI解码后,路径中的空格、方括号等特殊字符没有编码,生成的URI是无效的,MediaPlayer无法识别无效的数据源,就会返回0x80000000未知错误。
  • 次要可能原因:如果是长期存储后再使用从系统文件选择器获取的URI,默认的临时访问权限已经失效,MediaPlayer没有权限读取对应文件也会触发该错误。
修复方案
  1. 移除多余的解码逻辑,存储、使用时都直接操作原始编码后的URI即可,正确代码示例:
val audioFileUri = data.data!! // 原始Uri类型的Content URI
// 存储时直接转字符串,无需解码
val storedUriStr = audioFileUri.toString()
// 后续使用时直接解析原始字符串
mediaPlayer.setDataSource(this, Uri.parse(storedUriStr))
  1. 如果需要长期使用获取到的Content URI,拿到URI后主动申请持久化访问权限:
// 拿到URI后立即申请持久化权限
val takeFlags = intent.flags and (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
contentResolver.takePersistableUriPermission(audioFileUri, takeFlags)
  1. 调用setDataSource、prepare等MediaPlayer方法时添加try-catch捕获IOException、IllegalArgumentException,避免应用崩溃的同时方便定位其他潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:24:01