Android通过模拟按键之Instrumentation向JS输入框赋值

725 阅读2分钟

前言

最近有个需求 串口实现扫码枪功能 现在android 通过串口工具拿到结果后 如何把值快速给到web端呢 如果通过接口 我们如何感知 用户扫了码呢 或者说JS如何拿到串口返回的值

实现效果图

scan

实现思路

直接给JS传数据是行不通 因为没有办法感知用户什么时候扫码了 那怎么办?我和同事一起找资料 他找到了一个关键词Instrumentation 我们就模拟用户点了输入框 获取焦点后 键盘的输入这个事件! 关键词模拟键盘输入事件

按照这个Instrumentation关键词 我们找资料 可以查到有关KeyDownUp的方法

如下图 2 通过这个方法一个一个测试 最后得出 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"))
}

按照这个编译 我们就可以看到如 最上面的效果图展示的效果了 扫一次就拼出键盘上的内容 这里只有数字和字母 不包括特殊字符 如果有需求可以自己定义 3

总结

学习永不止步 写博客用来记录自己的学习经历 加深记忆力 Instrumentation这个类 我也是第一次了解 没想到可以这么用 真的学习到了! 加油~