デバイスが複数のデバイスを備えた 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 チップのいずれかです。