Чтение (аудио) файла из подпапки в AndroidAssets в Xamarin.Forms - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь включить аудио в моем приложении 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 Я посмотрелзатем в реализации функции Load и я нашел следующий код

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 Документация на самом деле не предоставляет никакой информации от Microsoft и от сайта Android . У меня вопросы

  1. Как получить файл из подпапки в Android-активах?
  2. Что я могу вставить в функцию Assets.OpenFd () (подпапки и т. Д.)?

Буду признателен за любой совет, так как после долгих попыток решить его у меня на самом деле нет идеи.

1 Ответ

0 голосов
/ 03 октября 2019

Согласно документам пакета, вы не сможете сделать это, потому что вы должны использовать 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 - имя вашей подпапки.

...