You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Android 11的条码扫描设备:如何程序化转换扫描条码格式?

基于Android无障碍服务的条码格式转换方案

核心思路

借助Android无障碍服务的文本监听能力,拦截扫描后的原始条码文本,完成格式转换后替换目标输入框内容,让闭源应用直接使用转换后的字符串。

具体实现步骤

1. 搭建无障碍服务基础框架

  • 继承AccessibilityService,在AndroidManifest.xml中声明服务权限,并指定需要监听的目标闭源应用包名。
  • 配置服务的accessibility_event_types为TYPE_VIEW_TEXT_CHANGED,确保能捕获输入框的文本变更事件。

2. 识别扫描生成的目标条码

  • 在onAccessibilityEvent方法中,监听输入框的文本变化。
  • 用正则表达式^[a-zA-Z]{3}\d{3}-[a-zA-Z]{3}\d{3}$匹配原始条码格式(可根据实际字母/数字规则调整)。
  • 通过文本输入的完整性和速度区分扫描输入与手动输入:扫描通常是一次性输入13位字符(3字母+3数字+横杠+3字母+3数字),可通过长度判断快速锁定目标文本。

3. 执行条码格式转换

  • 匹配成功后,拆分原始字符串并重组为目标格式:
    String originalBarcode = "abc123-def456";
    // 拆分第一部分并添加分隔符
    String firstPart = originalBarcode.substring(0, 3) + "-" + originalBarcode.substring(3, 6);
    // 拆分第二部分并添加分隔符
    String secondPart = originalBarcode.substring(7, 10) + "-" + originalBarcode.substring(10);
    // 拼接成最终格式
    String convertedBarcode = firstPart + "-" + secondPart;
    

4. 替换输入框内容供闭源应用使用

  • 获取当前输入框对应的AccessibilityNodeInfo,执行文本替换操作:
    if (nodeInfo != null && nodeInfo.isEditable()) {
        Bundle replaceArgs = new Bundle();
        replaceArgs.putString(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, convertedBarcode);
        nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, replaceArgs);
        nodeInfo.recycle();
    }
    

关键注意事项

  • 无障碍服务需要用户手动在系统设置中启用,首次启动需引导用户完成授权流程。
  • 要限定服务仅作用于目标闭源应用的输入框,避免干扰其他应用的正常输入。
  • 测试时需覆盖不同场景的条码格式,确保正则表达式和转换逻辑的兼容性。

内容的提问来源于stack exchange,提问作者Waza_Be

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:37:05