gpt4 book ai didi

android - 从上下文 Assets 中的 Uri 加载 MediaPlayer

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:48 25 4
gpt4 key购买 nike

我的 Assets 目录中有一个音频文件。 assets/audio/dance.mp3.

如果我运行 context.getAssets().list("audio");它出现了。

但是当我尝试使用 MediaPlayer.create(context,uri) 时,它总是失败并返回 null。

这些似乎都不起作用

private void tryLoad(String path,Context context)
{
Uri uri = Uri.parse(path);
this.audioPlayer = MediaPlayer.create(context,uri);
if (this.audioPlayer == null)
{
Log.d(TAG, "loadAudio: audioPlayer is null. current assets"+ uri.toString()) ;
}
else
{
Log.d(TAG, "loadAudio: WORKED"+ uri.toString()) ;
}

}
public void loadAudio(Context context)
{
if (this.audioPlayer != null)
return;
if (this.audioFile != null && this.audioFile.length() >0)
{
try
{
tryLoad("/dance.mp3",context);
tryLoad("dance.mp3",context);
tryLoad("audio/dance.mp3",context);
tryLoad("/audio/dance.mp3",context);
tryLoad("assets/audio/dance.mp3",context);
tryLoad("/assets/audio/dance.mp3",context);
tryLoad("\\dance.mp3",context);
tryLoad("dance.mp3",context);
tryLoad("audio\\dance.mp3",context);
tryLoad("\\audio\\dance.mp3",context);
tryLoad("assets\\audio\\dance.mp3",context);
tryLoad("\\assets\\audio\\dance.mp3",context);
}
catch (Exception e)
{
Log.d(TAG, "loadAudio exception: " + e.getMessage());
}
}
}

最佳答案

我认为您可以这样做,因为 MediaPlayer 需要一个 URI,并且不可能为 Assets 文件创建 URI。尝试创建一个 MediaPlayer 对象并使用 MediaPlayer.setDataSource(FileDescriptor) 方法为其设置数据源。您可以使用 AssetManager.openFd() 方法获取 FileDescriptor 对象,然后为返回的对象调用 AssetFileDescriptor.getFileDescriptor() 方法。

我还没有尝试过这个解决方案,所以这只是一个想法。但我希望它能奏效。

关于android - 从上下文 Assets 中的 Uri 加载 MediaPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com