0

我们有一个使用 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

4

0 回答 0