Android 5.0棒棒糖UsbDevice缺少接口

Android 5.0棒棒糖UsbDevice缺少接口,android,usb,android-5.0-lollipop,Android,Usb,Android 5.0 Lollipop,我编写了一个android实用程序,它使用android UsbHost API通过USB与一些定制设备进行通信。这在4.4中运行良好,但在5.0中,一些设备缺少接口(getInterfaceCount()==0) 我在Galaxy Note 3和CM11上使用了它们,它们工作得很好,但由于这个版本的CM不稳定,我尝试升级到CM12。问题出现了,我认为这可能是一个CM错误,所以我尝试了一个简单的程序,用google的5.0版本枚举Nexus5上的设备/接口,问题也存在 我创建了一个简单的测试应用

我编写了一个android实用程序,它使用android UsbHost API通过USB与一些定制设备进行通信。这在4.4中运行良好,但在5.0中,一些设备缺少接口(getInterfaceCount()==0)

我在Galaxy Note 3和CM11上使用了它们,它们工作得很好,但由于这个版本的CM不稳定,我尝试升级到CM12。问题出现了,我认为这可能是一个CM错误,所以我尝试了一个简单的程序,用google的5.0版本枚举Nexus5上的设备/接口,问题也存在

我创建了一个简单的测试应用程序,带有按钮和文本视图,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电缆插入手机。当此代码在5.0上运行时,会列出设备,但列表中只有一个设备实际具有接口(并且并不总是同一个设备)。但是,如果我使用ADB打开手机,我可以看到所有设备及其与“cat/sys/kernel/debug/usb/devices”的接口


这是安卓5.0中的一个bug,还是usb api发生了变化而我遗漏了什么?我一直无法在网上找到任何信息。

原来这是5.0中引入的一个bug。androids bug tracker上有一个问题:


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

我也有类似的问题。在我的情况下,如果我启动手机时已经插入了我的设备,我会得到一个没有接口的USB设备的意图。如果我拔下并重新插入设备,我会得到一个具有正确接口的USB设备。如果我发现什么,我会告诉你的。查看grepcode上的UsbDevice源代码,在Lolleypop中检索接口的方式已经改变(请参阅),这在6.0+中得到了修复,但我还没有看到没有此错误的5.x设备。