我无法让Xamarin播放小型媒体文件

时间:2019-03-25 23:51:29

标签: c# xamarin.forms xamarin.android

使用运行 KitKat 的android扫描仪设备。

Visual Studio Enterprise 2017 (15.9.9)中使用 Xamarin

我需要根据扫描条形码的内容生成“成功”或“错误”的声音。 我有两个文件:“ Success.mp3 ”和“ Error.wav ”,这两个文件都不会播放。 由于这应该是一个非常简单的过程,因此,我尝试使用Android的 MediaPlayer 类,而不是添加一些NuGet包。

由于Xamarin没有任何排序或媒体API,因此我正在使用依赖注入来正确运行Android代码。 我将Android的MediaPlayer实例化为变量“ player ”,并且实例化成功,但是一旦我尝试对其进行任何操作,它将引发 Null Exception 错误,并且“玩家”的值显示为Null。 我一直在尝试不同的方法来做到这一点,并将声音文件的副本存储在Assets文件夹和Resources / Raw文件夹中(请参见下文)。

这是我的方法:

public void PlaySound(string soundType) {
    var filename = 
        global::Android.App.Application.Context.Assets.OpenFd(soundType);

    if (player == null) {
        MediaPlayer player = new MediaPlayer();
    }
    //This is where the error happens
    player.SetDataSource(filename);
    player.Prepare();
    player.Start();
}

我还尝试了以下三行,结果相同:

player.Prepared += (s, e) => {
    player.Start();
};
player.SetDataSource(filename.FileDescriptor, filename.StartOffset, 
    filename.Length);
player.Prepare();

我还尝试利用许多人展示的方法来实现此目的,但这对我不起作用。这是文件必须存储在Resources / Raw中的位置:

player = MediaPlayer.Create(global::Android.App.Application.Context, 
    Resource.Raw.someFileName);

无论您为“ someFileName”使用什么值,Visual Studio所提供的全部都是“ 'Resource.Raw'不包含'someFileName'的定义”。 Resource.designer.CS确实包含两个文件的条目:

public const int Error = 2131230720;
public const int Success = 2131230721;

预期结果:声音或一些有意义的错误消息使我走上正确的道路。

对于Xamarin来说,我还是一个相对较新的人,可能会错过一些老兵眼中显而易见的东西。我已经尝试了很多其他方法,其中有些未在此处提及,因此需要一些技巧。这应该很简单,但事实证明并非如此。感谢您提供的任何帮助。

0 个答案:

没有答案