2015-02-23 3 views
5

Я написал утилиту для Android, которая разговаривает с несколькими пользовательскими устройствами через USB, используя API android UsbHost. Это отлично работает в 4.4, но в 5.0 некоторые из устройств не имеют своих интерфейсов (getInterfaceCount() == 0).Android 5.0 Lollipop UsbDevice Отсутствующие интерфейсы

Я использовал их на Galaxy Note 3 с CM11, и они отлично работали, но поскольку эта версия CM нестабильна, я попытался перейти на CM12. Проблема возникла, и я подумал, что это может быть ошибка CM, поэтому я попробовал простую программу, которая перечисляет устройства/интерфейсы на Nexus 5 с выпуском версии 5.0, и проблема там тоже существует.

Я создал простой тест приложение с кнопкой и 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, и я что-то упустил? Я не смог найти какую-либо информацию в Интернете.

+0

У меня такая же проблема. В моем случае, если я загружу телефон с подключенным устройством, я получаю намерение с помощью UsbDevice без интерфейсов. Если я отсоединяю и заменяю устройство, я получаю UsbDevice с правильными интерфейсами. Я дам вам знать, если я найду что-нибудь. Глядя на источник UsbDevice на grepcode, способ получения интерфейсов изменился в Lolleypop (см. 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

ответ

3

Оказывается, это ошибка, введенная в 5.0. Там будет вопрос о андроиды багтрекер:

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

Так что было известно о том, так 5.0, но в настоящее время не было никакой работы (или даже комментарии) от Google об этом.

+0

Это исправлено в 6.0+, но я еще не видел 5.x-устройства без этой ошибки. – bj0

Смежные вопросы