python读取usb扫码枪数据_USB

本文介绍了如何在Android中使用AccessibilityService来捕获和处理USB扫码枪的数据,特别是针对USB HID-KBW类型的设备。通过创建自定义的ScanService,并在manifest中注册,可以拦截并处理键盘事件,避免输入法冲突。同时提供了过滤非扫码枪设备的方法和事件解析的示例。
摘要由CSDN通过智能技术生成

Android使用AccessibilityService实现USB扫码枪数据抓取

android单屏机,通过扫码枪扫描二维码的场景非常多,扫码枪的种类也有蓝牙、USB、串口等等

目前USB的扫码枪主流的就是以下两种

1、USB HID-KBW:扫码器会将扫描出来的内容转化为键盘事件,就是Android中KeyEvent里面对应的常量(KeyEvent.KEYCODE_*)。

2、USB虚拟串口:可使用连接到UsbDevice进行通信,读取数据。(设备要支持串口)

支持Android热插拔USB扫描枪会在有EditText时,扫描枪扫描内容自动输入到编辑框了,但是有很多输入法兼容的问题,比如搜狗输入法识别到HID设备时会隐藏无法弹出,如果输入法切换成中文时会输入中文等等。

通过串口的方式直接获取原始数据,不再跟输入法产生冲突,可惜设备是USB HID的,通过大量的尝试(包括USB虚拟串口)都不支持(对串口不了解的同学可以先看看这篇文章)

扫码枪是基于键盘输入的,尝试从获取焦点的Activity中的dispatchKeyEvent(KeyEvent event)进行拦截,可惜只能解决掉中文的问题,事件还是先走到输入法才能回到Activity。于是强大的AccessibilityService就上场了,使用AccessibilityService可以优先获取到键盘事件。

使用强大的AccessibilityService(Google为了让Android系统更实用,为用户提供了无障碍辅助服务),但需要到系统设置->无障碍->服务开启当前服务。对AccessibilityService不了解的同学看看

废话不多说看实现步骤

1、先创建扫码Service直接继承Acce

Python中,获取USB扫码数据通常需要使用USB库如`pyudev`或者`pyserial`。这里简述一下基本步骤: 1. **安装依赖**: 首先,你需要安装相关的库。如果是通过串口连接的扫码(常见的做法),可以使用`pySerial`库,如果通过UDEV规则识别设备,则可以使用`pyudev`。你可以通过pip安装它们: ```bash pip install pyserial pyudev ``` 2. **检测并打开端口**: 对于`pySerial`,假设扫码连接到COM1端口: ```python import serial ser = serial.Serial('COM1', baudrate=9600) # 根据实际情况调整baudrate ``` 或者对于`pyudev`,找到匹配的USB设备: ```python from pyudev import Context, Monitor, MonitorFilter ctx = Context() monitor = Monitor.from_netlink(ctx) monitor.filter_by(subsystem='input') device = next(monitor.poll()) ``` 3. **读取数据**: 扫码数据通常是按特定格式发送的,比如ASCII字符。你可以设置一个循环来持续监听数据输入,并解析接收到的内容: ```python def read_data(ser): while True: data = ser.read_all() # 如果是串口 # 或者 data = device.subsystem.decode(device.read()) # 如果是UDEV if data: decoded_data = data.decode("utf-8") # 解码数据 print(decoded_data) read_data(ser) ``` 4. **关闭连接**: 当不再需要扫描时,记得关闭串口或释放设备资源: ```python ser.close() # 如果使用的是Serial ``` 注意:不同品牌的扫码可能有不同的通信协议,上述代码是一个通用示例,实际操作可能需要根据扫码的具体文档进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值