Ich schrieb ein Android-Dienstprogramm, das mit ein paar benutzerdefinierten Gerät über USB mit der Android-UsbHost-API spricht. Dies funktioniert in 4.4 gut, aber in 5.0 fehlt einigen Geräten die Schnittstelle (getInterfaceCount() == 0).Android 5.0 Lollipop UsbDevice fehlende Schnittstellen
Ich habe sie auf einem Galaxy Note 3 mit CM11 verwendet und sie haben gut funktioniert, aber da diese Version von CM instabil ist, habe ich versucht, auf CM12 zu aktualisieren. Das Problem tauchte auf, und ich dachte, es könnte ein CM-Bug sein, also habe ich ein einfaches Programm ausprobiert, das Geräte/Interfaces auf einem Nexus 5 mit google 5.0 auflistet und das Problem existiert auch dort.
I erstellt einen einfachen Test app mit einer Taste und mit einem Textview OnClickListener eingerichtet als:
@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);
}
});
}
Die Geräte in eine Nabe eingehakt werden, die in das Telefon mit einem OTG Kabel eingesteckt ist. Wenn dieser Code unter 5.0 ausgeführt wird, werden die Geräte aufgelistet, aber nur ein Gerät in der Liste hat Schnittstellen (und es ist nicht immer dasselbe Gerät). Wenn ich jedoch mit ADB in das Telefon schalte, kann ich alle Geräte und ihre Schnittstellen mit 'cat/sys/kernel/debug/usb/devices' sehen.
Ist das ein Fehler in Android 5.0, oder hat die USB-API geändert und mir fehlt etwas? Ich konnte online keine Informationen finden.
Ich habe ein ähnliches Problem. In meinem Fall, wenn ich das Telefon mit meinem Gerät started, das ich bereits angeschlossen habe, bekomme ich eine Absicht mit einem UsbDevice ohne Schnittstellen. Wenn ich das Gerät abziehe und umstecke, erhalte ich ein USB-Gerät mit den richtigen Schnittstellen. Ich werde dich wissen lassen, wenn ich etwas finde. Mit Blick auf die UsbDevice-Quelle auf grepcode hat sich die Art und Weise, wie die Schnittstellen abgerufen werden, in Lolleypop geändert (siehe http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1 /android/hardware/usb/UsbDevice.java#UsbDevice.getInterfaceList%28%29) – Jim