0

当设备插入具有多个设备的 USB 集线器时,我从 USBDevice 获取 USBInterface 时遇到问题。

当我直接通过 OTG 或通过 OTG 连接的集线器连接 USB 设备时,一切正常,但是一旦我在集线器中插入额外的设备,我就无法打开连接。

我检索所有 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,并且系统在我尝试打开连接时立即在 getInterfaceCount 上抛出 ArrayIndexOutOfBoundException。

附加信息:我使用usb-serial-for-android库作为与设备通信的包装器。它是 arduino(用于测试)或 FTDI 芯片。

4

2 回答 2

1

我们正在努力解决同样的问题。这似乎是 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 可能是一个解决方案。

问候,

丹尼尔

于 2015-11-27T08:13:26.233 回答
0

我没有编译内核就解决了这个问题。如您所知,首次创建应用程序时工作正常,但在应用程序启动后连接的新设备仅获得最后一个设备并禁用其他设备。因此,我创建了返回 mainactivity 的新活动,但是在应用程序进行第二个活动之前,我已经杀死了 mainactivity 的所有进度,然后进入第二个活动,该活动立即返回到 mainactivity,并且每件事都像第一次创建的那样工作。

主要活动代码:

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();

感谢:如何杀死一个进程?

于 2016-11-30T16:14:33.460 回答