[英]SetDataSource in MediaPlayer class to load up an mp3 file from Assets or raw folder
我有從path
播放mp3
文件的代碼。 我雖然不知道調用StartPlayer(String filePath)
時filePath
的值是什么。
我存儲的音頻文件位於assets
和raw
文件夾中。 但是我不知道存儲音頻文件的最佳位置是什么? 另外,我不確定如何從任何一個文件夾訪問路徑。
protected MediaPlayer player;
public void StartPlayer(String filePath)
{
if (player == null) {
player = new MediaPlayer();
} else {
player.Reset();
player.SetDataSource(filePath);
player.Prepare();
player.Start();
}
}
任何幫助表示贊賞。
如果將媒體文件添加為資產,則需要使用AssetManager
來獲取AssetFileDescriptor
。 通過訪問Android.App.Context
上的Assets屬性(例如Activity
,可以使用AssetManager
的實例。 因此,在“ Activity
子類中,可以在else
子句中執行以下操作:
AssetFileDescriptor afd = Assets.OpenFd("filenameinAssetsfolder.mp3");
player = new MediaPlayer();
player.Reset();
player.SetDataSource(afd.FileDescriptor);
player.Prepare();
player.Start();
但是我不得不說,由於您的else
子句,您的音頻不會第一次播放,當調用該方法時MediaPlayer為null時,該子句將不會運行。 似乎您應該這樣做:
if (player == null)
{
player = new MediaPlayer();
}
AssetFileDescriptor afd = Assets.OpenFd("filenameinAssetsfolder.mp3");
player.Reset();
player.SetDataSource(afd.FileDescriptor);
player.Prepare();
player.Start();
有關AssetManager的更多信息,請訪問: https : //developer.xamarin.com/guides/android/application_fundamentals/resources_in_android/part_6_-_using_android_assets/
您可以同時使用assets
和raw
文件夾來存儲將用.APK編譯的音頻文件。
但是您應該重新考慮使用filePath
作為參數的策略。 相反,請考慮使用string fileName
或int resource
。
從assets
或raw
文件夾中檢索文件無法使用Android中的filePath
完成。 相反,這是通過使用做AsssetManager
或通過Resource
提到這里 。
我還優化了您的代碼,因為不需要else
子句。
當試圖從訪問文件assets
的文件夾,您需要使用靜態方法OpenFd
從this.Assets
(其中this
是Context
你的Activity
與文件的名稱)。 這將返回一個AssetFileDescriptor
,您可以將其用作DataSource
,如下所示:
protected MediaPlayer player;
public void StartPlayer(string fileName)
{
if (player == null)
player = new MediaPlayer();
var fileDescriptor = Assets.OpenFd(filename);
player.Reset();
player.SetDataSource(fileDescriptor.FileDescriptor);
player.Prepare();
player.Start();
}
您還可以使用raw
文件夾,盡管該文件夾要求您指向給定Resource
的自動生成的id
。 這是使用MediaPlayer
的靜態Create
方法完成的:
protected MediaPlayer player;
public void StartPlayer(int resource)
{
if (player == null)
player = MediaPlayer.Create(this, resource);
player.Reset();
player.Prepare();
player.Start();
}
其中resource
是指raw
文件夾中的音頻文件,可通過Resource.raw.youraudiofile
(其中youraudiofile
是raw
文件夾中的音頻文件的名稱)訪問。
您可以在Xamarin文檔中閱讀有關使用raw
文件夾的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.