微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决用于蓝牙的 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 举报,一经查实,本站将立刻删除。