Xamarin.Forms 和 XamarinMediaManager:如何管理错误案例?

Posted

技术标签:

【中文标题】Xamarin.Forms 和 XamarinMediaManager:如何管理错误案例?【英文标题】:Xamarin.Forms and XamarinMediaManager: how to manage errors cases? 【发布时间】:2021-02-09 17:16:26 【问题描述】:

我在 Xamarin.Forms 项目中使用 XamarinMediaManager 来播放网络广播中的音频。

但我想管理错误情况,例如 URL 不再可用或无法访问 Internet 时。

我像这样启动音频流:

var mediaItem = await CrossMediaManager.Current.Play(audioUrl);

如果我使用“错误”的 URL,什么也不会发生,但我没有找到如何“识别”这种情况。开启飞行模式也是一样。

我想在这两种情况下都向用户显示一条错误消息,以便他了解音频无法启动的原因。

有没有办法解决这个问题?

【问题讨论】:

github.com/Baseflow/XamarinMediaManager#hook-into-events 好主意@Jason。我已经尝试过,但如果我使用错误的 URL 或飞行模式,MediaItemFailedevent 不会被触发。我已经使用了很好触发的StateChangedevent:但是如果我使用错误的 URL 或飞行模式,状态将传递给“暂停”。所以不可能像我想的那样跟踪错误。 @Gold.strike 关于网络可用,您可以使用Xamarin.Essentials: Connectivity 查询。 嗨@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; 

该事件仅在 Android1 分钟后引发,而 在 iOS 上根本不引发

这个解决方案并不完美,对于 2 个平台也不一样,但我还没有找到更好的解决方案......

【讨论】:

以上是关于Xamarin.Forms 和 XamarinMediaManager:如何管理错误案例?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms 手势密码实现

ScrollView 问题中的 Xamarin.Forms 捏手势

xamarin.forms - 音量增大和减小键的事件侦听器

Xamarin.Forms 和 XamarinMediaManager:如何管理错误案例?

结合汉堡菜单和导航页面,Xamarin.Forms

Xamarin.Forms:如何只允许数字和点