首页 > 解决方案 > 我无法让 Xamarin 播放小型媒体文件

问题描述

使用安卓扫描仪设备,运行KitKat

Visual Studio Enterprise 2017、15.9.9中使用Xamarin 。

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

我正在使用依赖注入来正确运行 Android 代码,因为 Xamarin 没有任何排序或媒体 API。我将 Android 的 MediaPlayer 实例化为变量“ player ”,它确实成功实例化了,但是一旦我尝试对它做任何事情,它就会引发Null 异常错误,并且“player”的值显示为 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 还比较陌生,可能缺少一些老手眼中显而易见的东西。我已经尝试了很多其他的东西,其中大部分没有在这里提到,抓住一些稻草。这应该很简单,但事实证明并非如此。感谢您提供的任何帮助。

标签: c#xamarin.formsxamarin.android

解决方案


推荐阅读