Android中的USB转串口通信

步骤如下:

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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

试行

祝您生活愉快!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值