2015-02-23 7 views
5

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.

+0

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

Antwort

3

Es stellt sich heraus, dass es sich um einen in 5.0 eingeführten Fehler handelt. Es gibt ein Problem auf Androiden Bug-Tracker:

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

So ist es etwa seit 5.0 bekannt, aber zur Zeit ist es keine Arbeit (oder auch Kommentare) gewesen von Google darüber.

+0

Dies ist in 6.0 behoben, aber ich habe noch ein 5.x-Gerät ohne diesen Fehler zu sehen. – bj0