资源原始文件夹在 xamarin.forms

问题描述

我是 Xamarin 开发人员

我想在本地化的应用程序中播放 *.mp3 或 *.wav 文件

所以我就这样分割了文件

enter image description here

我在依赖服务中实现代码,如

  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