如何获取可用audio route列表及当前正在使用的audio route
音频路由查询实现方案
以下是不同平台下获取可用音频路由、查询当前激活音频路由的实现方式:
安卓平台
依赖系统提供的AudioManager类实现相关功能:
- 获取可用音频路由:调用
getDevices(int flags)方法,flags传入AudioManager.GET_DEVICES_OUTPUTS即可获取所有可用输出设备列表,返回的AudioDeviceInfo实例可通过getType()匹配设备类型,对应常用常量如下:TYPE_BLUETOOTH_A2DP:蓝牙音频设备TYPE_WIRED_HEADSET:有线耳机TYPE_EARPIECE:听筒TYPE_SPEAKER:内置扬声器
- 查询当前使用的路由:可注册
AudioManager.ACTION_AUDIO_DEVICE_CHANGED广播实时监听路由切换,也可主动调用上述getDevices方法后,筛选isPreferred()返回值为true的设备,即为当前正在使用的输出路由。
核心代码示例:
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); // 获取所有可用输出设备 AudioDeviceInfo[] availableDevices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS); for (AudioDeviceInfo device : availableDevices) { int deviceType = device.getType(); // 按业务需求匹配对应路由类型即可 }
注意:安卓平台需要提前申请MODIFY_AUDIO_SETTINGS权限才能调用相关接口。
iOS平台
依赖AVAudioSession类实现相关功能:
- 获取可用音频路由:访问
AVAudioSession实例的availableInputs属性,即可拿到所有可用的音频端口,端口类型对应常用枚举如下:AVAudioSessionPortBluetoothA2DP:蓝牙音频设备AVAudioSessionPortHeadphones:有线耳机AVAudioSessionPortBuiltInReceiver:听筒AVAudioSessionPortBuiltInSpeaker:内置扬声器
- 查询当前使用的路由:访问
AVAudioSession实例的currentRoute属性,其outputs数组中存储的即为当前激活的输出路由。
核心代码示例(Swift):
let audioSession = AVAudioSession.sharedInstance() // 获取可用路由列表 let availableRoutes = audioSession.availableInputs // 获取当前在用路由 let currentUsingRoute = audioSession.currentRoute
Windows平台
依赖Win32 API的MMDeviceEnumerator组件实现:
- 获取可用音频路由:调用
EnumAudioEndpoints方法,过滤状态为DEVICE_STATE_ACTIVE的设备即为可用输出路由。 - 查询当前使用的路由:调用
GetDefaultAudioEndpoint方法即可获取当前系统默认的激活输出路由。
macOS平台
依赖CoreAudio框架实现:
- 获取可用音频路由:调用
AudioObjectGetPropertyData接口,查询kAudioHardwarePropertyDevices属性即可枚举所有可用音频设备。 - 查询当前使用的路由:查询
kAudioHardwarePropertyDefaultOutputDevice属性即可获取当前激活的默认输出路由。
内容的提问来源于stack exchange,提问作者Faaatman
相关产品推荐
相关产品推荐

