我编写了一个 android 实用程序,它使用 android UsbHost API 通过 USB 与一些自定义设备通信。这在 4.4 中工作正常,但在 5.0 中一些设备缺少它们的接口(interface) (getInterfaceCount() == 0)。
我一直在配备 CM11 的 Galaxy Note 3 上使用它们,它们一直运行良好,但由于此版本的 CM 不稳定,我尝试升级到 CM12。问题出现了,我认为这可能是一个 CM 错误,所以我尝试了一个简单的程序,该程序在带有谷歌 5.0 版本的 Nexus 5 上枚举设备/接口(interface),问题也存在。
我创建了一个简单的测试应用程序,其中包含 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 上运行时,会列出设备,但列表中只有一个设备实际具有接口(interface)(并且它并不总是相同的设备)。但是,如果我使用 ADB 进入手机,我可以使用“cat/sys/kernel/debug/usb/devices”看到所有设备及其接口(interface)。
这是 android 5.0 中的错误,还是 usb api 已更改而我遗漏了什么?我无法在网上找到任何信息。
最佳答案
原来是5.0引入的bug。 androids 错误跟踪器存在问题:
所以它从 5.0 开始就为人所知,但目前谷歌还没有关于它的工作(甚至评论)。
关于Android 5.0 Lollipop UsbDevice 缺少接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681052/