从Xamarin.Forms中的AndroidAssets的子文件夹中读取(音频)文件

问题描述 投票:0回答:1

我尝试在Xamarin.Forms应用程序中添加音频。我想将音频文件放在Subfolder文件夹的Assets中,例如Assets/Subfolder/Audio.mp3

我发现了一个提供示例的插件SimpleAudioPlayer。以下代码与提供的代码类似。

var player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
player.Load("Audio.mp3");

现在,我想将音频文件放在子文件夹中,并尝试调用

player.Load("Subfolder/Audio.mp3");

但是我得到了Java.IO.FileNotFoundException然后,我查看了implementation of the Load function,然后输入了以下代码

public bool Load(string fileName)
{
    player.Reset();
    AssetFileDescriptor afd = Android.App.Application.Context.Assets.OpenFd(fileName);
    player?.SetDataSource(afd.FileDescriptor, afd.StartOffset, afd.Length);
    return PreparePlayer();
}

filename粘贴到Assets.OpenFd()功能的位置。返回AndroidFileDesriptor该文档实际上并没有提供MicrosoftAndroid网站的任何信息。我的问题是

  1. 如何从Android Assets的子文件夹中接收文件?
  2. 我可以粘贴到Assets.OpenFd()函数(子文件夹等)中吗?

我将不胜感激,因为经过很长一段时间的尝试,我仍然没有任何想法。

xamarin.forms xamarin.android android-assets
1个回答
0
投票

根据软件包的文档,您将无法做到这一点,因为必须使用player.Load(GetStreamFromFile("mysound.wav"));,其中GetStreamFromFile基本上是]

Stream GetStreamFromFile(string filename)
{
    var assembly = typeof(App).GetTypeInfo().Assembly;
    var stream = assembly.GetManifestResourceStream("App." + filename); 
    // Obviously App in the line above should be replaced with your app
    return stream;
}

然后,您必须输入player.Load(GetStreamFromFile("Subfolder.mysound.wav"));,其中Subfolder是子文件夹的名称。

© www.soinside.com 2019 - 2024. All rights reserved.