Xamarin.Формы и XamarinMediaManager: как управлять случаями ошибок?

#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 платформ, но я пока не нашел лучшего…