#android #usb #communication
Вопрос:
У меня есть приложение на Android, которое использует USB-связь с внешним устройством. Хотя обычно приложение работает нормально, на некоторых телефонах это не так (например, Xiaomi Mi A1). Подключенное устройство видно, я могу получить видео и PID, но не могу общаться. Проблема в том, что это устройство отображается как устройство CDC, и телефоны, с которыми оно не взаимодействует, не возвращают интерфейс CDC (Класс устройств связи). Например, на пикселе 4:
private @Nullable UsbInterface[] getInterfaceList() {
if (mInterfaces == null) {
int configurationCount = mConfigurations.length;
int interfaceCount = 0;
for (int i = 0; i < configurationCount; i ) {
UsbConfiguration configuration = mConfigurations[i];
interfaceCount = configuration.getInterfaceCount();
}
mInterfaces = new UsbInterface[interfaceCount];
int offset = 0;
for (int i = 0; i < configurationCount; i ) {
UsbConfiguration configuration = mConfigurations[i];
interfaceCount = configuration.getInterfaceCount();
for (int j = 0; j < interfaceCount; j ) {
mInterfaces[offset ] = configuration.getInterface(j);
}
}
}
возвращает 2 интерфейса:
int USB_CLASS_COMM = 2;
int USB_CLASS_CDC_DATA = 0x0a;
но на Xiaomi Mi A1 он возвращает только
int USB_CLASS_COMM = 2;
а без USB_CLASS_CDC_DATA приложение не сможет подключиться к устройству.
Хотя кажется, что это не зависит от версии Android, кажется, что это зависит от телефона.
Мой вопрос в том, виноват ли в этом телефон — у него просто нет этого интерфейса? Или он действительно есть, но каким-то образом он должен быть включен?