[英]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.