如何从连接到 Android 的 USB 设备打开/获取可用的驱动程序?
How to open / get available drivers from a USB device connected to Android?
我为串行通信做了一个类似的 about how I can best send data to and receive data from a USB device connected to Android using the native API. Someone turned me toward a library,所以我想了解如何使用它。
到目前为止,我只使用了一些示例代码,只是为了看看是否能正常工作,但我一直在尝试打开 USB 设备。这是我正在使用的 USB 设备的详细信息 print out。这是一个 CDC 设备,应该回显发送给它的内容。
这是我现在 运行ning 的代码。该应用程序有一个按钮可以执行此功能。
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);
}
函数在第一个 return 处停止,其中找不到可用的驱动程序。
我之前遇到过类似的问题,本地 API 无法打开设备。该库无法找到可用的驱动程序。
我正在 Pixel 3 上进行测试。在我可以 运行 我的应用程序之前,Pixel 是否可以自行锁定设备?我将 Pixel 插入我的桌面,然后从 Android Studio 'run app'(我打开了 USB 调试并启用了开发选项)。应用程序 运行ning 后,我将其从桌面上拔下并插入我的 USB 设备。这会以一种奇怪的方式改变状态吗?
编辑:
已添加权限。
PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(INTENT_ACTION_GRANT_USB), 0);
manager.requestPermission(driver.getDevice(), usbPermissionIntent);
对于 CDC 设备,您通常必须为 VID:PID 提供 customProber 或使用硬编码驱动程序。您很可能 运行 遇到的下一个问题是缺少权限处理。
我为串行通信做了一个类似的
到目前为止,我只使用了一些示例代码,只是为了看看是否能正常工作,但我一直在尝试打开 USB 设备。这是我正在使用的 USB 设备的详细信息 print out。这是一个 CDC 设备,应该回显发送给它的内容。
这是我现在 运行ning 的代码。该应用程序有一个按钮可以执行此功能。
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);
}
函数在第一个 return 处停止,其中找不到可用的驱动程序。 我之前遇到过类似的问题,本地 API 无法打开设备。该库无法找到可用的驱动程序。
我正在 Pixel 3 上进行测试。在我可以 运行 我的应用程序之前,Pixel 是否可以自行锁定设备?我将 Pixel 插入我的桌面,然后从 Android Studio 'run app'(我打开了 USB 调试并启用了开发选项)。应用程序 运行ning 后,我将其从桌面上拔下并插入我的 USB 设备。这会以一种奇怪的方式改变状态吗?
编辑:
已添加权限。
PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(INTENT_ACTION_GRANT_USB), 0);
manager.requestPermission(driver.getDevice(), usbPermissionIntent);
对于 CDC 设备,您通常必须为 VID:PID 提供 customProber 或使用硬编码驱动程序。您很可能 运行 遇到的下一个问题是缺少权限处理。