步骤如下:
1、查找设备
2、权限判断,没有权限时请求权限
3、连接通信
代码如下:
private void initUsbSerial() {
// 1.查找设备
usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
drivers = UsbSerialProber.getDefaultProber().findAllDrivers(usbManager);
if (drivers.size() <= 0) {
Toast.makeText(this, "无串口设备", Toast.LENGTH_SHORT).show();
return;
}
UsbDevice device = drivers.get(0).getDevice();
//权限判断
if (usbManager.hasPermission(device)) {
permissionAllow(device);
} else {
Log.e("TAG", "没有权限");
//请求权限
UsbPermissionActionReceiver mUsbPermissionActionReceiver = new UsbPermissionActionReceiver();
Intent intent = new Intent(ACTION_USB_PERMISSION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
IntentFilter intentFilter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbPermissionActionReceiver, intentFilter);
usbManager.requestPermission(device, pendingIntent);
}
}
private void permissionAllow(UsbDevice device) {
List<UsbSerialPort> result = new ArrayList<>();
for (final UsbSerialDriver driver : drivers) {
final List<UsbSerialPort> ports = driver.getPorts();
result.addAll(ports);
}
UsbDeviceConnection usbDeviceConnection = usbManager.openDevice(device);
try {
serialPort = result.get(0);
serialPort.open(usbDeviceConnection);
//int baudRate, int dataBits, int stopBits, int parity
serialPort.setParameters(38400, 8, 1, 2);
} catch (IOException e) {
e.printStackTrace();
}
UsbInterface anInterface = device.getInterface(0);
if (anInterface == null) {
Toast.makeText(this, "初始化失败", Toast.LENGTH_SHORT).show();
return;
}
// 判断端口号
for (int i = 0; i < anInterface.getEndpointCount(); i++) {
UsbEndpoint endpoint = anInterface.getEndpoint(i);
if (endpoint.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
if (endpoint.getDirection() == UsbConstants.USB_DIR_IN) {
// 输入端口
usbEndpointIn = endpoint;
} else if (endpoint.getDirection() == UsbConstants.USB_DIR_OUT) {
// 输出端口
usbEndpointOut = endpoint;
}
}
}
}
private class UsbPermissionActionReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
// user choose YES for your previously popup window asking for grant perssion for this usb device
if (null != usbDevice) {
permissionAllow(usbDevice);
}
} else {
//user choose NO for your previously popup window asking for grant perssion for this usb device
Toast.makeText(context, String.valueOf("Permission denied for device" + usbDevice), Toast.LENGTH_LONG).show();
}
}
}
}
}
接收的卡号:
D/USB: 第1RFID:E00401503C9F7291
第2RFID:E00401503C9F1D25
第3RFID:E00401503C9F2968
第4RFID:E00401503C9F1DEE
第5RFID:E00401503C9EA30D
第6RFID:E00401503C9F7D8D
第7RFID:E00401503C9F86AD
D/USB: 第1RFID:E00401503C9F8598
第2RFID:E00401503C9F081E
第3RFID:E00401503C9F72AE
第4RFID:E00401503C9F13EE
D/USB: 第1RFID:E00401503C9F71BA
D/USB: 第2RFID:E00401503C9EA2AE
D/USB: 第1RFID:E00401503C9F1D25
第2RFID:E00401503C9F1DEE
第3RFID:E00401503C9EA30D
第4RFID:E00401503C9EE35D
D/USB: 第5RFID:E00401503C9F86AD
第6RFID:E00401503C9EA44C
第7RFID:E00401503C9F1D8C
第8RFID:E00401503C9EA54B
D/USB: 第9RFID:E00401503C9F196B
第10RFID:E00401503C9F24CB
第11RFID:E00401503C9EA9BA
第12RFID:E00401503C9EAF37
D/USB: 第13RFID:E00401503C9F86F7
第14RFID:E00401503C9E9E93
第15RFID:E00401503C9F11A3
D/USB: 第16RFID:E00401503C9F0902
第17RFID:E00401503C9FC012
D/USB: 第1RFID:E0040150633735F1
D/USB: 第2RFID:E00401503C9F8598
第3RFID:E00401503C9F761A
第4RFID:E00401503C9F081E
D/USB: 第5RFID:E00401503C9F13EE
D/USB: 第1RFID:E00401503C9F71BA
D/USB: 第1RFID:E00401503C9F7291
第2RFID:E00401503C9F1D25
第3RFID:E00401503C9F2968
D/USB: 第1RFID:E00401503C9F72AE
第2RFID:E00401503C9EA30D
第3RFID:E00401503C9EE35D
第4RFID:E00401503C9F86AD
D/USB: 第5RFID:E00401503C9EA44C
第6RFID:E00401503C9F1D8C
第7RFID:E00401503C9EA54B
第8RFID:E00401503C9F729B
第9RFID:E00401503C9F24CB
D/USB: 第10RFID:E00401503C9EA9BA
第11RFID:E00401503C9EAF37
第12RFID:E00401503C9F86F7
D/USB: 第13RFID:E00401503C9E9E93
第14RFID:E00401503C9F11A3
第15RFID:E00401503C9F0902
第16RFID:E00401503C9E9D22
D/USB: 第17RFID:E00401503C9F17C2
第18RFID:E004015063373600
第19RFID:E00401503C9E4F10
D/USB: 第1RFID:E0040150633735F1
第2RFID:E00401503C9F8598
第3RFID:E00401503C9F13EE
D/USB: 第4RFID:E00401503C9F1BCF
D/USB: 第1RFID:E00401503C9F71BA
第2RFID:E00401503C9EA2AE
D/USB: 第1RFID:E00401503C9F1D25
D/USB: 第2RFID:E00401503C9F2968
D/USB: 第1RFID:E00401503C9F1BCF
第2RFID:E00401503C9F081E
第3RFID:E00401503C9F72AE
D/USB: 第4RFID:E00401503C9F1DEE
第5RFID:E00401503C9EA30D
第6RFID:E00401503C9EE35D
第7RFID:E00401503C9F86AD
D/USB: 第8RFID:E00401503C9EA44C
第9RFID:E00401503C9F1D8C
第10RFID:E00401503C9EA54B
第11RFID:E00401503C9F196B
D/USB: 第12RFID:E00401503C9F24CB
第13RFID:E00401503C9EA9BA
第14RFID:E00401503C9EAF37
第15RFID:E00401503C9F86F7
D/USB: 第16RFID:E00401503C9E9E93
第17RFID:E00401503C9F11A3
第18RFID:E00401503C9F0902
第19RFID:E00401503C9FC012
D/USB: 第1RFID:E0040150633735F1
第2RFID:E00401503C9F8598
D/USB: 第1RFID:E00401503C9EA2AE
D/USB: 第1RFID:E00401503C9EAF37
第2RFID:E00401503C9F2968
D/USB: 第3RFID:E00401503C9EA30D
第4RFID:E00401503C9F1BCF
第5RFID:E00401503C9F081E
第6RFID:E00401503C9F72AE
D/USB: 第7RFID:E00401503C9F1DEE
第8RFID:E00401503C9F140C
第9RFID:E00401503C9EA44C
第10RFID:E00401503C9EA54B
D/USB: 第11RFID:E00401503C9F729B
第12RFID:E00401503C9F24CB
第13RFID:E00401503C9F061A
第14RFID:E00401506336E2CA
第15RFID:E00401503C9E9E93
D/USB: 第16RFID:E00401503C9F11A3
第17RFID:E00401503C9F0902
第18RFID:E00401503C9FC012
第19RFID:E00401503C9F17C2
第20RFID:E00401503C9E4F10
D/USB: 第1RFID:E00401503C9F86F7
第2RFID:E00401503C9F8598
第3RFID:E00401503C9F7D8D
D/USB: 第4RFID:E00401503C9F13EE
D/USB: 第1RFID:E00401503C9F25A7
第2RFID:E00401503C9F86AD
第3RFID:E00401503C9EA2AE
D/USB: 第1RFID:E00401503C9EE35D