android MediaPlayer无法播放程序数据文件夹中的音频文件?

pbpqsu0x  于 2023-02-02  发布在  Android
关注(0)|答案(5)|浏览(431)

当我从MIC录制我的音频并将文件存储在/data/data/.....为什么MediaPlayer不能播放此文件?如果我将目标更改为/ sdcard/..... -一切正常。我做错了什么吗?我没有发现MediaPlayer的限制。设备-三星T959(Galaxy S)谢谢,我希望任何人知道解决方案...

72qzrwbm

72qzrwbm1#

我也有同样的问题......每当我使用setDataSource和文件路径时,它就不起作用;不断收到IOException。
更改我的代码以使用setDataSource(FileDescriptor)确实有效...并且使用此方法,我不必将文件复制到SDCard或类似的东西。
因此,使用一个简单的File对象,创建一个新的FileInputStream,并将实际的文件描述符作为数据源传递,如下所示:

setDataSource((new FileInputStream(myFileInstance)).getFD());

创建输入流将文件数据拉入存储器,从而解决/数据/数据访问违规。

lx0bsm1f

lx0bsm1f2#

更好的做法是关闭流,如下所示:

FileInputStream stream = new FileInputStream(path);
mediaPlayer.setDataSource(stream.getFD());
stream.close();

Kotlin的话更妙:

mediaPlayer.setDataSource(
  FileInputStream(path).use { it.fd }
)

在方法文件中注明:
android.media.MediaPlayer.setDataSource(FileDescriptor fd)
设置要使用的数据源(FileDescriptor)。关闭文件描述符是调用方的责任。一旦此调用返回,就可以安全地执行此操作。

crcmnpdw

crcmnpdw3#

使用媒体播放器.setDataSource(文件描述符fd)

ttcibm8c

ttcibm8c4#

尝试设置ContentValues并存储一些标准的元数据属性,然后使用ContentResolver设置元数据和文件的URI。
参见:http://developer.android.com/guide/topics/media/index.html
"示例:音频捕获设置和启动",然后尝试将Uri base更改为您的/data/data/- filename。

zf2sa74q

zf2sa74q5#

由于Android的安全模式,MediaPlayer没有足够的权限。它可以访问SD卡,但不能访问其他地方没有权限。
因此,setDataSource(...)可以抛出SecurityException,我认为它正在发生。

您可以通过以下方式播放此文件:

  • 复制到临时目录并播放;
  • 复制到临时目录并播放;
  • 复制到sdcard;
  • 将其完全读取到存储器并尝试通过流播放。

相关问题