问题描述
我是 Xamarin 开发人员
我想在本地化的应用程序中播放 *.mp3 或 *.wav 文件
所以我就这样分割了文件
我在依赖服务中实现代码,如
public void OnePlaySound()
{
_mediaPlayer = MediaPlayer.Create(context,Resource.Raw.wavone);
_mediaPlayer.Start();
_mediaPlayer.Completion += delegate
{
if (_mediaPlayer != null)
{
_mediaPlayer.Stop();
_mediaPlayer.Release();
_mediaPlayer = null;
}
};
}
但 _mediaPlayer 总是返回 null..
解决方法
我从您的描述中了解到,您想使用 MediaPlayer 使用 Xamarin.Forms 中的依赖项服务在 Resource/Raw 文件夹中播放音频文件。下面是一个例子:
首先在.Net标准库项目(共享代码)中创建名为IPPlayAudio的接口。
public interface IPlayAudio
{
void playaudio();
}
然后在Android平台创建一个实现IPPlayAudio的类,平台实现必须注册到DependencyService,这样Xamarin.Forms才能在运行时定位。
[assembly: Dependency(typeof(PlayAudiomethod))]
namespace playvideo.Droid
{
public class PlayAudiomethod : IPlayAudio
{
private MediaPlayer _player;
public void playaudio()
{
_player = MediaPlayer.Create(MainActivity.mac,Resource.Raw.MyAudio);
_player.Start();
}
}
}
对于 MainActivity.mac,请在 MainActivity 中创建名为“mac”的静态成员,并在调用 LoadApplication 后设置。
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
public static MainActivity mac;
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this,savedInstanceState);
global::Xamarin.Forms.Forms.Init(this,savedInstanceState);
LoadApplication(new App());
mac = this;
}
}
现在您可以播放来自 Xamarin.Forms 共享代码的音频。
private void mediaplayer_Clicked(object sender,EventArgs e)
{
DependencyService.Get<IPlayAudio>().playaudio();
}
注意:请将 xxx.mp3 Build Action 设置为 AndroidResource。