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

标签 android headset

抱歉提问。这是我第一次来这里。我在网上做了一些搜索,但没有结果。真的需要帮助来澄清这个问题。 我有两个关于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/

相关文章:

Android : java. dalvik.system.BaseDexClassLoader.findClass 中的 lang.ClassNotFoundException

android - 是否可以从其他设备访问 AIDL 服务?

java - 如何用java代码突出显示Android中的按钮?

android - 使用 Glide 库从缓存加载不同的图像

android - 在Android中将手机麦克风路由到Sco蓝牙耳机

android - 将 android.net.rtp 用于 VoIP

android - 在 Android 库 Java 中使用用户定义的方法

android - 连接到android中的蓝牙耳机

android - 如何将耳机中的音频静音但让它以编程方式在扬声器上播放?

android - 如何检测耳机功能