微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

资源原始文件夹在 xamarin.forms

如何解决资源原始文件夹在 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。