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(如果两者都已连接)的主要内容,如果未能解决你的问题,请参考以下文章