用于蓝牙的 MediaRouter selectRoute 不会切换到适用于华为 Android 10 的手机

问题描述

我们有一个使用 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 (将#修改为@)