Android USB Host Последовательная связь через USB-концентратор

У меня проблема с получением USBInterface от USBDevice, когда устройство подключено к USB-концентратору с более чем одним устройством.

Когда я подключаю устройство USB напрямую через OTG или через концентратор, который подключен через OTG, все работает нормально, но как только я подключаю дополнительное устройство к концентратору, я не могу открыть соединение.

Я извлекаю все драйверы USB-устройств и перебираю их, пока не найду устройство, с которым хочу связаться.

Следующий фрагмент кода содержит мой метод для получения USB-устройств:

String manufacturer = "MY_MANUFACTURER" // Dummy text for this snippet
int interfaceCount; // Number of USB interfaces
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
List<UsbSerialDriver> drivers UsbSerialProber.getDefaultProber().findAllDriver(manager);

for (UsbSerialDriver serialDriver : drivers) {
    // Check for my specific USB device
    if (serialDriver.getDevice().getManufacturerName().equals(manufacturer)) {
        interfaceCount = driver.getInterfaceCount();
    }
}

Когда мое устройство является единственным устройством в концентраторе, количество интерфейсов равно 2, но как только я добавляю другое устройство, счетчик становится равным 0, и система выдает ArrayIndexOutOfBoundException в getInterfaceCount, как только я пытаюсь открыть соединение.

Дополнительная информация: я использую библиотеку https://github.com/mik3y/usb-serial-for-android в качестве оболочки для связи с устройством. Это либо Arduino (для тестирования), либо чип FTDI.

2 ответа

Мы боремся с той же проблемой. Кажется, это ошибка в Android 5 (по крайней мере, для нас, вы не упомянули свою версию для Android). Вы можете найти ошибку на

https://code.google.com/p/android/issues/detail?id=159529

или же

https://www.reddit.com/r/androiddev/comments/37v2c0/usbdevice_getinterface_seems_to_be_broken_in_5x/

или же

https://code.google.com/p/android/issues/detail?id=159897

Имейте в виду, что он работает с версиями Android <5, а также с Android 6.0 снова. Таким образом, решение проблемы может быть связано с повышением или понижением версии Android.

С уважением,

Даниил

Я достиг этой проблемы без компиляции ядра. Как вы знаете, когда приложение впервые создано, работает нормально, но при подключении новых устройств после запуска приложение получает только последнее и отключает другие. Итак, я создал новое действие, которое возвращается к mainacctivity, но перед тем, как приложение переходит ко второму действию, я убил весь прогресс в mainactivity, затем переходит ко второму действию, которое немедленно возвращается к mainacctivity, и все работает как созданное в первый раз.

Основные коды активации:

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);

Bundle temp_bundle = new Bundle();
onSaveInstanceState(temp_bundle);
Intent intentRecreate = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("bundle", temp_bundle);
tartActivity(intentRecreate);
finish();

Коды второй активности:

Intent start;
start = new Intent(FreshStartActivity.this,MainActivity.class);
startActivity(start);
finish();

Спасибо: Как убить процесс?

Другие вопросы по тегам