繁体   English   中英

从上下文资产中的 Uri 加载 MediaPlayer

[英]load a MediaPlayer from a Uri in a context assets

我的资产目录中有一个音频文件。 资产/音频/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,并且不可能为资产文件创建一个 URI。 尝试创建一个MediaPlayer object 并使用MediaPlayer.setDataSource(FileDescriptor)方法为其设置数据源。 您可以使用AssetManager.openFd()方法获取FileDescriptor object,然后为返回的 object 调用AssetFileDescriptor.getFileDescriptor()方法。

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

你不能调用 mp.setDataSource(afd.getFileDescriptor()); 在资产文件上,因为它将播放所有资产。 而是遵循此线程中的解决方案: 从资产目录播放音频文件

我问过类似的问题,请查看android 上的原始文件夹和 sdcard 之间的这个帖子 MediaPlayer 问题 我希望这对你有帮助

您需要将文件放在res/raw文件夹中,然后使用以下命令加载它:

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);

来自: Android 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM