gpt4 book ai didi

Xamarin 表单使用 CrossSimpleAudioPlayer 播放声音

转载 作者:行者123 更新时间:2023-12-02 09:01:36 26 4
gpt4 key购买 nike

我想播放我使用 CrossSimpleAudioPlayer 插件下载的声音。

我实例化并初始化了插件,在 IOS 上一切正常,但在 Android 上,当我加载文件“Java.IO.FileNotFoundException”时,它给了我这个错误但文件存在并且有读取权限

控制台上出现此“[MediaPlayer] 错误 (1, -2147483648)”。

我以这种方式加载剪辑

ISimpleAudioPlayer player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
player.Load("/data/user/0/com.my.app/files/20.wav");

当我使用 Stream 加载时,会抛出错误“Java.IO.IOException: 准备失败。: status=0x1”

var temp = new MemoryStream(DependencyService.Get<IFileHelper>().GetFileAsByte(path));
//This works fine and loads the file
player.Load(temp); //throws the error

如果我加载链接而不是本地文件,则效果很好,但我需要本地文件。

我不知道为什么 Android 上会出现这种情况

最佳答案

您正在从内部存储(文件目录)读取声音文件。 Files 目录是一个私有(private)目录,只能由您的应用程序访问。用户或操作系统都无法访问该文件。

它的路径是这样的:

/data/user/0/com.my.app/files/20.wav

您必须从 Public External Storage 读取该文件。或Private External Storage 。这取决于您是否希望 MediaStore 内容提供商可以访问您的声音文件。

这里可以从公共(public)外部存储读取声音文件,其路径如下:

/storage/emulated/0/.../

并且需要将权限添加到 list 中:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

但这还不够。在访问外部存储之前必须先请求许可,如下所示(在此处使用 Android 项目的 NuGet 插件 Current Activity 来获取当前事件):

var currentActivity = CrossCurrentActivity.Current.Activity;
int requestCode=1;

ActivityCompat.RequestPermissions(currentActivity, new string[] {
Manifest.Permission.ReadExternalStorage,
Manifest.Permission.WriteExternalStorage
}, requestCode);

如果授予权限,则继续并将文件复制到外部存储:

var recordingFileExternalPath = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, AppConstants.CUSTOM_ALERT_FILENAME);

if (ContextCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.WriteExternalStorage) == (int)Permission.Granted)
{
try
{
if (File.Exists(recordingFileExternalPath))
{
File.Delete(recordingFileExternalPath);
}

File.Copy(filePath, recordingFileExternalPath);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
UserDialogs.Instance.Alert("Permission to write to External Storage not approved, cannot save settings.", "Permission Denied", "Ok");
}

如果不能在 CrossSimpleAudioPlayer 中工作,您可以使用 DependencyServiceMediaPlayer播放Audio.Best使用流播放如下:

File tempFile = new File(path);           
FileInputStream fis = new FileInputStream(tempFile);
mediaPlayer.reset();
mediaPlayer.setDataSource(fis.getFD());
mediaPlayer.prepare();
mediaPlayer.start();

关于Xamarin 表单使用 CrossSimpleAudioPlayer 播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55041398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com