mic*_*nha 9 xamarin xamarin.forms
我想播放使用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");
Run Code Online (Sandbox Code Playgroud)
当我改为加载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
Run Code Online (Sandbox Code Playgroud)
如果我加载链接而不是本地文件,则可以正常工作,但是我需要本地文件。
我不知道为什么这会在Android上发生
您正在从内部存储(文件目录)读取声音文件。Files 目录是一个私有目录,只能由您的应用程序访问。用户或操作系统都无法访问该文件。
它有这样的路径:
/data/user/0/com.my.app/files/20.wav
您必须从公共外部存储或私有外部存储读取文件。这取决于您是否希望 MediaStore 内容提供商可以访问您的声音文件。
这里可以从公共外部存储中读取声音文件,其路径如下:
/存储/模拟/0/.../
并且需要将权限添加到清单中:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
但这还不够。在访问外部存储之前必须先请求许可,如下所示(在此处使用 Android 项目的 NuGet 插件 Current Activity 来获取当前活动):
var currentActivity = CrossCurrentActivity.Current.Activity;
int requestCode=1;
ActivityCompat.RequestPermissions(currentActivity, new string[] {
Manifest.Permission.ReadExternalStorage,
Manifest.Permission.WriteExternalStorage
}, requestCode);
Run Code Online (Sandbox Code Playgroud)
如果授予权限,则继续并将文件复制到外部存储:
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");
}
Run Code Online (Sandbox Code Playgroud)
如果不能在 CrossSimpleAudioPlayer 中工作,您可以使用DependencyService和MediaPlayer来播放 Audio.Best 使用流来播放,如下所示:
File tempFile = new File(path);
FileInputStream fis = new FileInputStream(tempFile);
mediaPlayer.reset();
mediaPlayer.setDataSource(fis.getFD());
mediaPlayer.prepare();
mediaPlayer.start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |