Android - 用于检查哪个设备(有线耳机或 USB 耳机)正在播放音频的 API(如果两者都已连接)

Posted

技术标签:

【中文标题】Android - 用于检查哪个设备(有线耳机或 USB 耳机)正在播放音频的 API(如果两者都已连接)【英文标题】:Android - API to check which device, wired headset or USB headset, is playing audio if both are connected 【发布时间】:2020-01-26 16:49:04 【问题描述】:

当有线耳机或 USB 耳机都连接到 android 设备时,我无法检测到哪个设备正在播放音频。

是否有 API 允许检查?

我注意到不同设备的行为方式不同。例如。在带有 Android 9 的三星 S10+ 上,稍后连接的外围设备用于播放音频。但是,在 Moto G6 Android 7 和 Samsung S8+ Android 9 上始终使用有线耳机,无论以后连接哪个外围设备。

我需要这些信息来正确配置音频流并显示当前正在使用的设备。

【问题讨论】:

【参考方案1】:

请查看MediaRouter API。

MediaRouter.RouteInfo getSelectedRoute() 可能是您正在寻找的。​​p>

它还允许您注册一个监听器,以便在当前音频设备配置更改时收到通知(MediaRouter.Callback 接口)。它的 onRouteSelected 和 onRouteUnselected 回调在当 音频设备分别开始/停止播放音频。

这是来自我的 MTK 设备的日志(删节),展示了 MediaRouter.RouteInfo 的属性以及当我插入有线耳机并通过 Jabra 蓝牙耳机听音乐时发生的事件流。

onRouteChanged RouteInfo name=耳机, description=null, 状态=空,类别=RouteCategory名称=系统 类型=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false , supportedTypes=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO , 演示显示=null

onRouteUnselected RouteInfo name=Jabra MINI v1.0.5, 描述=蓝牙音频,状态=null,类别=RouteCategory 名称=系统类型=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false ,supportedTypes=ROUTE_TYPE_LIVE_AUDIO, 演示显示=null

onRouteSelected RouteInfo name=耳机, description=null, 状态=空,类别=RouteCategory名称=系统 类型=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false , supportedTypes=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO , 演示显示=null

onRouteRemoved RouteInfo name=Jabra MINI v1.0.5, 描述=蓝牙音频,状态=null,类别=RouteCategory 名称=系统类型=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false ,supportedTypes=ROUTE_TYPE_LIVE_AUDIO, 演示显示=null

【讨论】:

感谢您的回答。我会检查它,但它可能仅在使用流类型媒体时才有效,例如玩音乐。我正在使用 VoiceCommunication 或 VoiceRecognition,此 API 可能无法正常工作。

以上是关于Android - 用于检查哪个设备(有线耳机或 USB 耳机)正在播放音频的 API(如果两者都已连接)的主要内容,如果未能解决你的问题,请参考以下文章

将音频呼叫路由到有线耳机

Android蓝牙耳机/扬声器音频切换

Android蓝牙耳机/扬声器音频切换

联想笔记本电脑插耳机没有声音怎么办

检查耳机是不是连接到不同的 API 级别

Android 配对蓝牙耳机也能像 AirPods 那样炫酷了