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