c# - 我无法让 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 还比较陌生,可能缺少一些老手眼中显而易见的东西。我已经尝试了很多其他的东西,其中大部分没有在这里提到,抓住一些稻草。这应该很简单,但事实证明并非如此。感谢您提供的任何帮助。
解决方案
推荐阅读
- angular - 使用 X-map-polyline 在 bing 地图折线上添加标记
- javascript - 在javascript中将Uint8Array转换为字符串
- node.js - npm 错误!代码 ELIFECYCLE npm 错误!错误号 126
- linux - 如何在远程 exec -Terraform 中引入重启选项
- java - 如何在 Java JUnit 中结合这两个 RunWith?
- javascript - 如何使用 HTML 发送 WPS 请求
- css - 刷卡器不刷卡
- flutter - 如何在颤动中像给定图像一样构建自定义 OTP 屏幕
- ruby-on-rails - 导入 ruby c 扩展时找不到 .so 文件。(在窗户上)
- html - 渐变背景正在切断 png 图像