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 或飞行模式,MediaItemFailed
event 不会被触发。我已经使用了很好触发的StateChanged
event:但是如果我使用错误的 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;
该事件仅在 Android 上1 分钟后引发,而 在 iOS 上根本不引发。
这个解决方案并不完美,对于 2 个平台也不一样,但我还没有找到更好的解决方案......
【讨论】:
以上是关于Xamarin.Forms 和 XamarinMediaManager:如何管理错误案例?的主要内容,如果未能解决你的问题,请参考以下文章
ScrollView 问题中的 Xamarin.Forms 捏手势
xamarin.forms - 音量增大和减小键的事件侦听器