Я сделал аналогичный сообщение о том, как лучше всего отправлять и получать данные с USB-устройства, подключенного к Android, с помощью собственного API. Кто-то направил меня к библиотеке для последовательной связи, поэтому я пытаюсь понять, как это использовать.
Я пока использую только часть примера кода, чтобы увидеть, что что-то работает, но я застрял на попытке открыть USB-устройство. Вот подробная распечатка с USB-устройства, которое я использую. Это устройство CDC, которое должно отражать то, что ему отправлено.
Вот тот код, который у меня сейчас запущен. В приложении есть одна кнопка, которая выполняет эту функцию.
private void DoTheThing () {
String textMessage = "";
// Find all available drivers from attached devices.
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);
if (availableDrivers.isEmpty()) {
textMessage += "Could not find any avaliable drivers.\n";
m_textView.setText(textMessage);
return;
}
// Open a connection to the first available driver.
UsbSerialDriver driver = availableDrivers.get(0);
UsbDeviceConnection connection = manager.openDevice(driver.getDevice());
if (connection == null) {
// add UsbManager.requestPermission(driver.getDevice(), ..) handling here
textMessage += "Could not open device.\n";
m_textView.setText(textMessage);
return;
}
UsbSerialPort port = driver.getPorts().get(0); // Most devices have just one port (port 0)
try {
port.open(connection);
port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
} catch (IOException e) {
textMessage += e + "\n";
m_textView.setText(textMessage);
return;
}
textMessage += "I did the thing.\n";
m_textView.setText(textMessage);
}
Функция останавливается при первом возврате, когда доступный драйвер не может быть найден. Раньше у меня была аналогичная проблема, когда собственный API не мог открыть устройство. Эта библиотека не может найти доступный драйвер.
Я тестирую Pixel 3. Может ли Pixel заблокировать устройство, прежде чем я смогу запустить приложение? Я подключаю Pixel к своему рабочему столу, а затем запускаю приложение из Android Studio (у меня включена отладка по USB и включены параметры разработчика). После запуска приложения я отключаю его от рабочего стола и подключаю USB-устройство. Может ли это странным образом изменить состояние?
РЕДАКТИРОВАТЬ:
Получил работу с добавлением разрешений.
PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(INTENT_ACTION_GRANT_USB), 0);
manager.requestPermission(driver.getDevice(), usbPermissionIntent);