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

问题描述

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

是否有允许检查的API ?

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

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

标签: androidandroid-audiomanagerandroid-developer-api

解决方案


请查看MediaRouter API。

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

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

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

onRouteChanged RouteInfo{ name=Headphones, description=null, status=null, category=RouteCategory{ name=System types=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false }, supportedTypes=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO , presentationDisplay=null }

onRouteUnselected RouteInfo{ name=Jabra MINI v1.0.5, description=蓝牙音频, status=null, category=RouteCategory{ name=System types=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false }, supportedTypes=ROUTE_TYPE_LIVE_AUDIO , presentationDisplay=null }

onRouteSelected RouteInfo{ name=Headphones, description=null, status=null, category=RouteCategory{ name=System types=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false }, supportedTypes=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO , presentationDisplay=null }

onRouteRemoved RouteInfo{ name=Jabra MINI v1.0.5, description=蓝牙音频, status=null, category=RouteCategory{ name=System types=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false }, supportedTypes=ROUTE_TYPE_LIVE_AUDIO , presentationDisplay=null }


推荐阅读