Xamarin.Forms проблема с доступом к файлам Assets
Имеется решение Xamarin.Forms, которое состоит из двух проектов QmsPointXamarin и QmsPointXamarin.Android. Вопрос: каким образом можно получить доступ к файлу Assets/sound/begin.mp3 проекта QmsPointXamarin.Android из файла HybridWebViewPagе.xaml.cs проекта QmsPointXamarin?
Попытка использовать string soundPath = "file:///android_asset/sounds/begin.mp3"; доступа к файлу не даёт.
Ответы (1 шт):
Автор решения: andrey.t
→ Ссылка
Для воспроизведения звукового файла из Assets необходимо использовать механизм DependencyCervice:
- В проекте QmsPointXamarin определяем интерфейс IAudioService:
using System.Threading.Tasks;
namespace QmsPointXamarin.Interfaces
{
public interface IAudioService
{
Task PlayAudioFile(string fileName);
}
}
- В проект QmsPointXamarin.Droid добавляем класс AudioServiceImplementation, реализующий интерфейс IAudioService:
using QmsPointXamarin.Interfaces;
using QmsPointXamarin.Droid.Implementations;
using Android.Media;
using System.Threading.Tasks;
using Xamarin.Forms;
[assembly: Dependency(typeof(AudioServiceImplementation))]
namespace QmsPointXamarin.Droid.Implementations
{
public class AudioServiceImplementation : IAudioService
{
private MediaPlayer _mediaPlayer;
public async Task PlayAudioFile(string fileName)
{
_mediaPlayer = new MediaPlayer();
var fd = global::Android.App.Application.Context.Assets.OpenFd(fileName);
_mediaPlayer.Prepared += (s, e) =>
{
_mediaPlayer.Start();
};
await _mediaPlayer.SetDataSourceAsync(fd.FileDescriptor, fd.StartOffset, fd.Length);
_mediaPlayer.Prepare();
}
}
}
- Для вызова метода PlayAudioFile в проекте QmsPointXamarin используем DependencyService.Get:
IAudioService audioService = DependencyService.Get<IAudioService>();
audioService.PlayAudioFile("sounds/begin.mp3");
