Android 5.0 Lollipop UsbDevice缺少接口

时间:2015-02-23 18:45:09

标签: android usb android-5.0-lollipop

我写了一个Android实用程序,使用android UsbHost API与USB上的一些自定义设备对话。这在4.4中运行良好,但在5.0中,一些设备缺少它们的接口(getInterfaceCount()== 0)。

我已经在使用CM11的Galaxy Note 3上使用它们并且它们一直工作正常,但由于此版本的CM不稳定,我尝试升级到CM12。问题出现了,我认为这可能是一个CM错误,所以我尝试了一个简单的程序,在谷歌的5.0版本中枚举Nexus 5上的设备/接口,那里也存在问题。

我使用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电缆插入电话。当此代码在5.0上运行时,会列出设备,但列表中只有一个设备实际上具有接口(并且它并不总是相同的设备)。但是,如果我使用ADB进入手机,我可以使用' cat / sys / kernel / debug / usb / devices'来查看所有设备及其接口。

这是android 5.0中的一个错误,还是更改了usb api而我错过了什么?我还没能在网上找到任何信息。

1 个答案:

答案 0 :(得分:3)

原来这是5.0中引入的错误。在机器人bug追踪器上存在一个问题:

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

所以自5.0以来就已经知道,但目前谷歌没有关于它的工作(甚至是评论)。