Android 5.0 Lollipop UsbDevice 缺少接口

Android 5.0 Lollipop UsbDevice missing interfaces

我编写了一个 android 实用程序,它使用 android UsbHost API 通过 USB 与一些自定义设备通信。这在 4.4 中工作正常,但在 5.0 中一些设备缺少它们的接口 (getInterfaceCount() == 0)。

我一直在带有 CM11 的 Galaxy Note 3 上使用它们,它们一直运行良好,但由于此版本的 CM 不稳定,我尝试升级到 CM12。问题出现了,我认为这可能是一个 CM 错误,所以我尝试了一个简单的程序,它在 Nexus 5 上枚举 devices/interfaces 和 google 的 5.0 版本,问题也存在。

我创建了一个简单的测试应用程序,其中包含 Button 和 TextView,并设置了 OnClickListener:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test_usb);

    Button button = (Button) findViewById(R.id.butt);
    final TextView text = (TextView) findViewById(R.id.text);
    final UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String string = "";
            if( manager == null )
                string += "no usb manager";
            else {
                for(UsbDevice device : manager.getDeviceList().values()) {
                    string += device.toString() + "\n";
                    string += String.format("  ifc: %d\n", device.getInterfaceCount());
                }
            }

            text.setText(string);
        }
    });
}

设备连接到集线器,集线器通过 OTG 电缆插入 phone。当此代码在 5.0 上为 运行 时,将列出设备,但列表中只有一个设备实际具有接口(并且它并不总是相同的设备)。但是,如果我使用 ADB shell 进入 phone,我可以看到所有设备及其接口 'cat /sys/kernel/debug/usb/devices'。

这是 android 5.0 中的错误,还是 USB api 发生了变化而我遗漏了什么?我一直无法在网上找到任何信息。

原来是5.0引入的bug。 android 错误跟踪器存在问题:

https://code.google.com/p/android/issues/detail?id=159529&q=usb%20interface&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

所以它从 5.0 开始就为人所知,但目前 google 还没有关于它的工作(甚至评论)。