前言
最近有个需求 串口实现扫码枪功能 现在android 通过串口工具拿到结果后 如何把值快速给到web端呢 如果通过接口 我们如何感知 用户扫了码呢 或者说JS如何拿到串口返回的值
实现效果图
实现思路
直接给JS传数据是行不通 因为没有办法感知用户什么时候扫码了
那怎么办?我和同事一起找资料 他找到了一个关键词Instrumentation
我们就模拟用户点了输入框 获取焦点后 键盘的输入这个事件!
关键词模拟键盘输入事件
按照这个Instrumentation关键词 我们找资料 可以查到有关KeyDownUp的方法
如下图
通过这个方法一个一个测试 最后得出
sendKeyDownUpSync
这个方法可以 ==每次模拟键盘点击一次输入结果==
问题
sendKeyDownUpSync这个方法每次只能模拟键盘发送一次点击事件 比如输入了字母A或者数字1
那么我们用for循环把串口返回的字符串长度 一个一个模拟出来不就行了?
ok,有思路后 我们就开始执行
//拿到实例
val inst = Instrumentation()
//循环操作串口返回的字符串
for (s in string) {
inst.sendKeyDownUpSync(KeyEvent.keyCodeFromString(s.toString()))
}
然后运行 拿到的结果不是我们想要的 这样没有任何输出 为什么没有任何输出呢?
我们点进去这个sendKeyDownUpSync方法的说明看下 一看便知
仔细看红色解释
OK ,我们改下条件 把串口返回的字母或者数字 前面拼接一个KEYCODE_
val inst = Instrumentation()
for (s in scanResult) {
inst.sendKeyDownUpSync(KeyEvent.keyCodeFromString("KEYCODE_$s"))
}
按照这个编译 我们就可以看到如 最上面的效果图展示的效果了
扫一次就拼出键盘上的内容 这里只有数字和字母 不包括特殊字符 如果有需求可以自己定义
总结
学习永不止步 写博客用来记录自己的学习经历 加深记忆力
Instrumentation这个类 我也是第一次了解 没想到可以这么用 真的学习到了!
加油~