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();
Спасибо: Как убить процесс?