gpt4 book ai didi

android - Android中的USB type-c耳机检测

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:19 24 4
gpt4 key购买 nike

抱歉提问。这是我第一次来这里。我在网上做了一些搜索,但没有结果。真的需要帮助来澄清这个问题。我有两个关于USB耳机检测和状态查询的问题。

  1. 我的目标设备运行的是 Android 版本 7.1.1。该设备具有 USB type-c 连接器并支持 USB type-c 耳机。但是,当 USB 耳机状态更改时,AudioService 似乎不会发送 Intent 。 OEM 是否必须针对这种情况实现自己的 Intent ?

  2. 对于传统的有线耳机,我可以使用 AudioManager.isWiredHeadsetOn() 来检查它的状态。但是USB type-c耳机好像不能这样用。有没有其他方法可以获取USB耳机的状态?

谢谢,磊

最佳答案

除了 EscapeArtist 建议的方法,您还可以监听 UsbManager.ACTION_USB_DEVICE_ATTACHEDUsbManager.ACTION_USB_DEVICE_DETACHED 操作并检查当前连接的 USB 设备是否具有音频接口(interface) UsbConstants.USB_CLASS_AUDIO。不幸的是,AudioManager.ACTION_HEADSET_PLUG 不会针对复合(不要担心措辞)USB 设备触发,例如 OTG + 标准 USB 耳机,或者只是 USB-C 耳机。

  override fun onReceive(context: Context, intent: Intent) {
if (intent.action == UsbManager.ACTION_USB_DEVICE_ATTACHED) {
context.usbManager.deviceList.values.indexOfFirst {
it.hasUsbAudioInterfaceClass()
}.takeIf { it > -1 }?.run {
//This attached USB device has audio interface
}
} else if (intent.action == UsbManager.ACTION_USB_DEVICE_DETACHED) {
val device: UsbDevice? = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)
device?.apply {
if (hasUsbAudioInterfaceClass()) {
//This detached USB device has audio interface
}
}
}
}

UsbDevice 搜索带有音频专用音频接口(interface)的 USB 设备的扩展函数。

fun UsbDevice.hasUsbAudioInterfaceClass(): Boolean {
for (i in 0 until interfaceCount) {
if (getInterface(i).interfaceClass == UsbConstants.USB_CLASS_AUDIO) {
return true
}
}
return false
}

监听分离设备不是强制性的,因为您可以依赖 ACTION_AUDIO_BECOMING_NOISY

关于android - Android中的USB type-c耳机检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41583448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com