如何通过Linphone SDK获取Android音频设备的常规名称
Android端Linphone SDK获取可读音频设备名称方案
你当前的问题是Android端通过driverName拿到的是音频驱动标识(如AAudio、Audio),而非iOS端那样的设备友好名称(如Speaker)。原因是Linphone在Android和iOS上对driverName的实现逻辑不同:iOS端该字段直接返回设备名称,而Android端返回的是底层驱动类型。
解决方案1:使用name属性(推荐)
Linphone的LinphoneAudioDevice类提供了name字段,在Android端会返回设备的友好名称(如"Speaker"、"Earpiece"、"Bluetooth Headset"等),替换代码中的driverName即可:
val devices = core.audioDevices val devicesMap: Map<Int, String> = devices.associateBy({ it.type.ordinal }, { it.name })
解决方案2:自定义类型映射(按需使用)
如果name返回的内容仍不符合需求,可以根据设备的type枚举值手动映射为你需要的名称:
val devices = core.audioDevices val devicesMap: Map<Int, String> = devices.associateBy( keySelector = { it.type.ordinal }, valueTransform = { device -> when (device.type) { LinphoneAudioDevice.Type.Earpiece -> "听筒" LinphoneAudioDevice.Type.Speaker -> "扬声器" LinphoneAudioDevice.Type.Bluetooth -> "蓝牙耳机" LinphoneAudioDevice.Type.Microphone -> "内置麦克风" // 其他设备类型可根据需求补充 else -> device.name ?: device.driverName } } )
说明
Android端的driverName用于标识底层音频驱动框架(如AAudio、OpenSL ES),并非面向用户的设备名称;而name字段才是Linphone为Android端提供的设备友好名称,和iOS端driverName的行为对齐。
内容的提问来源于stack exchange,提问作者steind.VY
相关产品推荐
相关产品推荐

