Android如何监听USB插拔

全网独一无二的USB、USB转串口二合一通信SDK

USB通信使用系统api,USB转串口通信使用第三方库usb-serial-for-android,串口通信使用Google官方库android-serialport-api。

一、USB通信

1.1 查找USB设备(2选1)

1.1.1 获取已连接USB设备

UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();

1.1.2 监听USB设备插拔
https://blog.csdn.net/u011630465/article/details/86525857?spm=1001.2014.3001.5501

1.2 USB设备授权

usb设备必须授权成功才能进行通信,否则会报设备没有权限错误。

// 判断usb设备是否有权限
manager.hasPermission(mUsbDevice)// 为usb设备申请权限
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_DEVICE_PERMISSION), 0);
manager.requestPermission(mUsbDevice, pendingIntent)

1.3 打开USB设备

UsbDeviceConnection mConnection= manager.openDevice(mUsbDevice);

1.4 找到通信接口和节点

一般只有一个UsbInterface(也可能存在多个),每个UsbInterface下又有多个UsbEndpoint,找到对应的读写数据节点。

UsbInterface dataIface = mDevice.getInterface(0);
for (int i = 0; i < dataIface.getEndpointCount(); i++) {UsbEndpoint endpoint = dataIface.getEndpoint(i);if (endpoint.getDirection() == UsbConstants.USB_DIR_IN) {mReadEndpoint = endpoint;}if (endpoint.getDirection() == UsbConstants.USB_DIR_OUT) {mWriteEndpoint = endpoint;}
}

1.5 开始通信

1.5.1 写数据

mConnection.bulkTransfer(mWriteEndpoint, bytes, bytes.length, timeout);

1.5.2 读数据

mConnection.bulkTransfer(mReadEndpoint, bytes, bytes.length, timeout);

二、USB转串口通信

USB转串口通信使用第三方库https://github.com/mik3y/usb-serial-for-android,底层实际也是使用系统USB通信api,在系统api的基础上增加串口驱动封装。

1.1-1.3(与USB通信流程一致)

1.4 检查驱动

驱动类型由串口芯片决定,驱动本质也只是调用系统usb写数据api完成一系列初始化操作。

UsbSerialDriver driver = UsbSerialProber.getDefaultProber().probeDevice(usbDevice);

1.5 打开串口,设置相关参数

UsbSerialPort mUsbSerialPort = driver.getPorts().get(mPort);
mUsbSerialPort.open(mConnection);
mUsbSerialPort.setParameters(mBaudRate, mDataBits, mStopBits, mParity);

1.6 开始通信

1.6.1 写数据

mUsbSerialPort.write(bytes, TIMEOUT);

1.6.2 读数据

mUsbSerialPort.read(bytes, TIMEOUT);

三、串口通信

串口通信使用google官方sdk:https://github.com/cepr/android-serialport-api

SerialPort mSerialPort = new SerialPort(new File("/dev/ttyUSB0"), 9600, 0);
// 读
InputStream inputStream = mSerialPort.getInputStream();
inputStream.read(buffer);
// 写
OutputStream outputStream = mSerialPort.getOutputStream();
out.write(bytes);

USB、USB转串口、串口通信的区别与实现相关推荐

  1. python实现485通讯_Python编程实现USB转RS485串口通信

    ---作者疆,未经允许,严禁转载,违权必究--- ---欢迎指正,需要源码和文件可站内私信联系--- -----------点击此处链接至博客园原文----------- 功能说明:Python编程实 ...

  2. Android:usb转232串口通信

    准备工作 首先得adb进入盒子root模式,将/dev/ttys1这个文件改为777,使得所有用户可操作 adb root adb remount adb shell 进入设备的root模式,执行 c ...

  3. 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,共同探讨软件知识经验,关注就有海量学习资料免费领哦: 目录 0背景 1.手机USB接口通信特点 1.1 使用方便 1.2 通用性强 1.3 ...

  4. 嵌入式作业(七):基于Ardunio的STM32串口通信

    嵌入式作业(七) 0 作业要求 1 Ardunio 完成STM32的串口通信 (1)安装Ardunio IDE (2)stm32串口通信 2 基于串口通信的标准库与hal库的区别 (1)hal库 (2 ...

  5. 2021-05-06PLC选型和串口通信

    200Smart和1500.1200区别? S7200smart(国内)和S7 1200(国外),两者定位都是小型的PLC,大型为1500 Smart 是为了一些简单的很小的设备,为了降低成本准备.2 ...

  6. C#串口通信实战开发:获取条码枪扫描枪读码器把枪的扫码结果

    扫描枪分类 市面上的条形码扫描枪按照接口类型,一般可以分为三种: PS/2接口.这个接口一般老式的条码枪才会有,现在的条码枪基本上都没有这个接口了,因为现在的电脑上,基本上也不会有这个老式接口了.这个 ...

  7. Raspberry 4B 串口通信

    串口通信 组件 操作步骤 查看树莓派4B的硬件串口与mini串口默认映射关系 修改串口映射关系 禁用串口的控制台功能 测试串口通信 使用python实现串口的发送和接收 使用C++实现串口的发送和接收 ...

  8. 电脑与树莓派与stm32f4串口通信

    电脑与树莓派与stm32串口通信 stm32设置 树莓派代码 stm32设置 // 核心代码,不能运行 void M1_PID(float top); void upmada(void); typed ...

  9. 51单片机C语言波特率十六进制,理解51单片机串口通信的波特率与USB转串口通信...

    RS232 在我们电脑上,一般都会有一个9针的串行接口,这个串行接口叫做RS232接口,它和UART通信有关联,但是由于现在笔记本电脑不带9针串口,所以和单片机通信越来越趋于使用USB虚拟串口. 九针 ...

最新文章

  1. Java并发工具类(闭锁CountDownLatch)
  2. 推荐JQuery学习简介
  3. URAL 1014 Product of Digits
  4. 干货:产品经理怎么做才能在需求评审中少挨打?
  5. css文件如何设置scss,Webpack - 如何将scss编译成单独的css文件?
  6. 【转】SQL 语句执行顺序
  7. win10 如何锁定计算机,Win10 1909 专业版怎么锁定计算机屏幕
  8. IOS开发学习笔记024-UIButton和UIImageView的区别
  9. 计算机模拟试题3,计算机一级考试MSoffice全真模拟试题3
  10. 容器的进程与namespace、rootfs
  11. 手机MODEM 开发(28)--- VoLTE介绍
  12. android系统知识(8.0)---Android O 启动优化
  13. 正则表达式限制文本框内容
  14. 信号与线性系统管致中第六版pdf_第五讲 信号流图
  15. java 进制转换十进制
  16. 品牌该如何做好软文营销?软文营销怎么规避风险?
  17. 基于matlab的MIMO信道容量仿真
  18. 后端码农谈前端(CSS篇)第二课:CSS的5个来源
  19. 《谷歌大数据经典论文读后感》
  20. ubuntu18.04安装Nvidia显卡驱动后黑屏及网络、蓝牙驱动消失的解决方案

热门文章

  1. VS+Qt无法打开源文件QWidget
  2. spring注解驱动开发-7 Spring声明式事务
  3. 去修苹果手机的时候,当心遇到 “李鬼” 维修点!
  4. 【git-02】用git管理vue项目
  5. 建筑防火在民用住宅建筑设计中的应用
  6. SystemUI 悬浮通知
  7. 最大熵(max entropy)模型原理小结
  8. val3_learning
  9. PDF根据关键词进行分页合并分割打印
  10. 目标检测常用损失函数-类别损失+位置损失