【发布时间】:2019-12-03 13:42:25
【问题描述】:
我做了一个类似的post,关于如何最好地向使用本机 API 连接到 Android 的 USB 设备发送数据和从 USB 设备接收数据。有人将我转向library 进行串行通信,所以我试图了解如何使用它。
到目前为止,我只使用了一些示例代码来查看某些功能,但我一直在尝试打开 USB 设备。这是我正在使用的 USB 设备的详细 print out。它是一个 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);
【问题讨论】:
标签: android serial-port usb cdc