安卓USB主机通过USB集线器进行串行通信



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

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

我检索所有的usb设备驱动程序,并通过它们进行迭代,直到找到我想要通信的设备。

以下代码Snippet包含我检索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。

附加信息:我使用android库的usb串行接口作为与设备通信的包装器。它要么是arduino(用于测试),要么是FTDI芯片。

我们也面临着同样的问题。这似乎是安卓5中的一个错误(至少对我们来说,你没有提到你的安卓版本)。你可以在找到错误

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。因此,升级或降级安卓系统可能是一个解决方案。

问候,

Daniel

我在没有编译内核的情况下就解决了这个问题。正如您所知,当应用程序第一次创建时工作正常,但当应用程序启动后连接新设备时,只能获得最后一个设备并禁用其他设备。所以我创建了一个新的活动,它会返回到mainactivity,但在应用程序进入第二个活动之前,我已经扼杀了mainactivity的所有进度,然后进入第二次活动,它立即返回到mainctivity,每件事都像第一次创建一样工作。

主要活动代码:

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

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

最新更新