我有从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
(如Activity
)上的Assets属性,可以获得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
。
在Android中,无法使用filePath
从assets
或raw
文件夹检索文件。相反,这是通过使用AsssetManager
或通过这里提到的Resource
来完成的。
我还对您的代码进行了一些优化,因为不需要else
子句。
资源文件夹
尝试从assets
文件夹访问文件时,需要使用静态方法OpenFd
fromthis.Assets
(其中this
是Activity
的Context
)和文件名。这将返回一个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
是指Resource.raw.youraudiofile
可以访问的raw
文件夹中的音频文件(其中youraudiofile
是raw
文件夹中音频文件的名称)。
您可以阅读Xamarin文档中有关使用raw
文件夹的更多信息。