簡體   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