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
本文介绍了如何在Android中使用AccessibilityService来捕获和处理USB扫码枪的数据,特别是针对USB HID-KBW类型的设备。通过创建自定义的ScanService,并在manifest中注册,可以拦截并处理键盘事件,避免输入法冲突。同时提供了过滤非扫码枪设备的方法和事件解析的示例。
最低0.47元/天 解锁文章
1458

被折叠的 条评论
为什么被折叠?



