#c# #audio #xamarin.forms #audio-streaming #plugin.mediamanager.forms
#c# #Аудио #xamarin.forms #потоковое аудио #plugin.mediamanager.forms
Вопрос:
Я использую XamarinMediaManager в Xamarin.Проект Forms для воспроизведения звука с веб-радио.
Но я хотел бы управлять случаями ошибок, например, когда URL-адрес больше не доступен, или, например, если нет доступа в Интернет.
Я запускаю аудиопоток следующим образом:
var mediaItem = await CrossMediaManager.Current.Play(audioUrl);
Если я использую «неправильный» URL-адрес, ничего не произойдет, но я не нашел, как «идентифицировать» этот случай. То же самое происходит, если я активирую режим полета.
Я хотел бы отобразить сообщение об ошибке пользователю в обоих случаях, чтобы он мог понять, почему звук не запускается.
Есть ли способ справиться с этим?
Комментарии:
1. github.com/Baseflow/XamarinMediaManager#hook-into-events
2. Хорошая идея, Джейсон. Я пробовал, но
MediaItemFailed
событие не запускается, если я использую неправильный URL-адрес или режим полета. Я уже используюStateChanged
событие, которое хорошо запущено: но состояние переходит в «Паузу», если я использую неправильный URL или режим полета. Таким образом, невозможно отследить ошибку, как мне бы хотелось.3. @Gold.strike О наличии интернета вы можете использовать Xamarin. Основы: проверка подключения .
4. Привет @CherryBu-MSFT, ты подходишь для этого конкретного случая. Один из них также предложил мне другое решение для других случаев путем проверки
MediaItem.Title
.
Ответ №1:
Наконец, я реализовал решение, которое было предложено с помощью MediaItem.Title
:
var mediaItem = await CrossMediaManager.Current.Play(radioUrl);
var currentTitle = mediaItem.Title;
Это работает только для iOS, на Android использование mediaItem.Title
вызывает исключение…
Итак, для управления случаем Android я использую MediaItemFailed
:
CrossMediaManager.Current.MediaItemFailed = OnCurrentMediaItemFailed;
Событие возникает только через 1 минуту на Android, а на iOS оно вообще не возникает.
Это решение не идеально и не одинаково для 2 платформ, но я пока не нашел лучшего…