UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();UsbDevice device = deviceList.get("device_id"); // Replace "device_id" with actual device idUsbInterface serialInterface = device.getInterface(0); // Get the first interfaceUsbEndpoint endpoint = serialInterface.getEndpoint(0); // Get an input/output endpoint UsbSerialPort serialPort = new UsbSerialPort(device, serialInterface.getId(), endpoint);serialPort.open(usbManager, device)
时间: 2025-03-07 09:09:50 浏览: 73
### Android USB API 获取设备列表并根据设备ID打开USB串口连接
#### 使用 `UsbManager` 获取设备列表
为了成功获取已连接的USB设备列表,需调用 `UsbManager.getDeviceList()` 方法。此方法返回的是一个包含所有当前连接至系统的USB设备的映射表[^1]。
```java
// 初始化 UsbManager 对象
UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
// 获取设备列表
Map<String, UsbDevice> deviceList = usbManager.getDeviceList();
```
#### 请求USB权限
当尝试访问特定的USB设备前,应用程序必须先向用户请求该设备的访问权限。这一步骤对于确保应用能够合法操作硬件至关重要[^2]。
```java
for (UsbDevice device : deviceList.values()) {
String deviceId = device.getDeviceId().toString();
// 如果尚未获得授权,则发起权限申请
if (!usbManager.hasPermission(device)) {
PendingIntent pi = PendingIntent.getBroadcast(this, 0,
new Intent(ACTION_USB_PERMISSION), 0);
usbManager.requestPermission(device, pi);
}
}
```
#### 打开指定 ID 的 USB 设备
一旦获得了必要的权限,就可以利用第三方库来简化与USB设备之间的通信过程。这里推荐使用由mik3y维护的 `usb-serial-for-android` 库来进行串口通讯[^3]。
```gradle
dependencies {
implementation 'com.github.mik3y:usb-serial-for-android:3.4.1'
}
```
下面是一个简单的例子展示如何基于给定的VID/PID组合查找对应的USB设备,并建立串行端口连接:
```java
import com.hoho.android.usbserial.driver.UsbSerialDriver;
import com.hoho.android.usbserial.util.SerialInputOutputManager;
...
private void openSpecificUsbDevice(int vendorId, int productId){
HashMap<String, UsbDevice> devices = usbManager.getDeviceList();
for(UsbDevice d : devices.values()){
if(d.getVendorId() == vendorId && d.getProductId() == productId){
List<UsbSerialDriver> availableDrivers =
UsbSerialProber.getDefaultProbeTable()
.findAllDriversForDevice(context, d);
if(!availableDrivers.isEmpty()){
final UsbSerialDriver driver = availableDrivers.get(0);
try{
UsbDeviceConnection connection =
usbManager.openDevice(driver.getDevice());
if(connection != null){
SerialInputOutputManager serialIoManager =
new SerialInputOutputManager(
driver.getPorts().get(0).open(connection),
listener);
executor.submit(serialIoManager);
}
} catch(Exception e){
Log.e(TAG,"Error opening device",e);
}
}
}
}
}
```
阅读全文
相关推荐


















