问题描述
我们有一个使用 SimpleExoPlayer 播放音频文件的应用程序。我们支持 Exo 播放器的 Google Cast,我们使用 MediaRouter 告诉我们哪些设备可用于投射。这是我们用来获取设备列表的媒体选择器:
private val mediaSelector = MediaRouteSelector.Builder()
.addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
.build()
这就是我们在它们之间切换的方式:
mediaRouter?.unselect(MediaRouter.UNSELECT_REASON_ROUTE_CHANGED)
mediaRouter?.selectRoute(it)
这适用于 Android 8、Android 11,以及三星 A71、Pixel 2、华为 P10 lite 等不同设备。
问题
一旦您连接了蓝牙扬声器,它就会显示在设备列表中。如果您尝试切换到手机 - 它不起作用。调用 selectRoute() 什么也不做。它显示为选中状态,调用 onRouteSelected 但音频继续从扬声器播放。
复制设备
Android 10 更新后,华为设备上出现问题。它不适用于带有 Android 10 更新的华为 P20。但它适用于搭载 Android 8 的华为 P20(更新前)。此外,您无法在搭载 Android 10 的华为 Mate 10 Pro 上从蓝牙扬声器切换到手机。如果您停止蓝牙连接 - 那么它会成功切换到手机。
调试结果
- 调用 route.candisconnect() 无论设备和路由如何,始终返回 false。
- 使用 CATEGORY_LIVE_AUdio 调用 router.supportsControlCategory 始终返回 true,无论设备和路由如何
- 使用 CATEGORY_REMOTE_PLAYBACK 调用 router.supportsControlCategory 总是返回 false,无论设备和路由如何
我真的不确定是否所有的变量都是这样,它是如何工作的。
我们课程的完整要点
https://gist.github.com/n0m0r3pa1n/cb2dba1553941b1eb95d61c3a2143a13
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)