Вопрос: Удаленные интерфейсы для Android 5.0 Lollipop UsbDevice


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

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

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


5


источник


Ответы:


Оказывается, это ошибка, введенная в 5.0. Есть проблема с отслеживателем ошибок в androids:

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

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


3