【问题标题】:Android USB Host Serial communication via USB hubAndroid USB 主机通过 USB 集线器进行串行通信
【发布时间】:2015-03-29 15:56:06
【问题描述】:

当设备插入具有多个设备的 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 芯片。

【问题讨论】:

  • 你多久运行一次上面的代码?您必须不时重新运行代码以检查新设备。

标签: android usb usb-hostcontroller


【解决方案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 版本

问候,

丹尼尔

【讨论】:

  • 你好,我的android 5.1.1也有同样的问题,你找到解决办法了吗,谢谢。
  • 我们从设备制造商那里得到了一个错误修复,它为我们解决了问题。我不知道另一种解决方案。对不起。
  • 您的答案是否适用于 android 5 或者应该是 4,谢谢。
  • 应该是4或6
  • 谢谢 Danial,我会尽量让它与我的 Galaxy Note 4 一起工作,它是 android 6
【解决方案2】:

我没有编译内核就解决了这个问题。如您所知,首次创建应用程序时工作正常,但在应用程序启动后连接的新设备仅获得最后一个设备并禁用其他设备。因此,我创建了返回 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();

感谢:How to kill a process?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多