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

时间:2015-03-29 15:56:06

标签: android usb usb-hostcontroller

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

当我通过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芯片。

2 个答案:

答案 0 :(得分: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版本&lt; 5再次使用Android 6.0。因此升级或降级Android可能是一种解决方案。

的问候,

丹尼尔

答案 1 :(得分:0)

我在没有编译内核的情况下实现了这个问题。如您所知,应用程序首次创建时工作正常但在应用程序启动后连接新设备时只获取最后一个并禁用其他设备。所以我创建了一个返回mainactivity的新活动,但是在app进入第二个活动之前,我已经杀死了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();

感谢:How to kill a process?

相关问题