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

Zebra MC9300扫描器DataWedge Intent解析GS1-128条码配置问题

解决Zebra MC9300 DataWedge解析DataMatrix条码字段问题

一、优先方案:通过DataWedge配置实现自动字段拆分(Intent方式)

你的条码属于GS1标准DataMatrix,DataWedge内置Parser可直接解析拆分AI字段,无需处理原始数据中的不可打印字符:

  1. 打开设备DataWedge应用,找到绑定到你应用的Profile(示例代码默认是DataWedgeGettingStarted)
  2. 进入Profile的Barcode Input设置,确认DATAMATRIX symbology已启用
  3. 进入Data Processing > Parser,开启Parser功能,选择GS1 DataMatrix解析器
  4. 进入Output > Intent Output,确保Intent动作、包名与应用匹配,勾选「Send parsed data as key-value pairs」
  5. 保存配置,重启扫描器或重新激活Profile

修改Intent接收代码,直接获取解析后的键值对:

private fun displayScanResult(scanIntent: Intent) {
    // 从Intent中直接获取解析好的GS1字段,键格式为"com.symbol.datawedge.data.ai.xx"
    val ai01 = scanIntent.getStringExtra("com.symbol.datawedge.data.ai.01")
    val ai17 = scanIntent.getStringExtra("com.symbol.datawedge.data.ai.17")
    val ai10 = scanIntent.getStringExtra("com.symbol.datawedge.data.ai.10")
    val ai30 = scanIntent.getStringExtra("com.symbol.datawedge.data.ai.30")
    
    val formattedResult = buildString {
        ai01?.let { append("01: $it\n") }
        ai17?.let { append("17: $it\n") }
        ai10?.let { append("10: $it\n") }
        ai30?.let { append("30: $it\n") }
    }
    
    val output = findViewById<TextView>(R.id.txtOutput)
    output.text = formattedResult + output.text
}

二、备选方案:代码处理原始扫描数据(配置无效时)

如果DataWedge Parser无法生效,先处理原始数据中的Group Separator(ASCII 29,即你看到的不可打印字符),再按GS1规则拆分字段:

private fun parseRawScanData(rawData: String): String {
    // 替换GS1分组分隔符(ASCII 29)为换行,便于正则匹配
    val cleanedData = rawData.replace(Char(29).toString(), "\n")
    // 匹配GS1 AI规则:2位AI码+对应长度的数据
    val gs1Pattern = Regex("(01)(\\d{14})|(17)(\\d{6})|(10)([^0-9]+)|(30)(\\d+)")
    val matches = gs1Pattern.findAll(cleanedData)
    
    return buildString {
        matches.forEach { match ->
            when {
                match.groupValues[1].isNotEmpty() -> append("01: ${match.groupValues[2]}\n")
                match.groupValues[3].isNotEmpty() -> append("17: ${match.groupValues[4]}\n")
                match.groupValues[5].isNotEmpty() -> append("10: ${match.groupValues[6].trim()}\n")
                match.groupValues[7].isNotEmpty() -> append("30: ${match.groupValues[8]}\n")
            }
        }
    }
}

// 更新扫描结果展示逻辑
private fun displayScanResult(scanIntent: Intent) {
    val decodedData = scanIntent.getStringExtra(resources.getString(R.string.datawedge_intent_key_data)) ?: ""
    val formattedResult = parseRawScanData(decodedData)
    val output = findViewById<TextView>(R.id.txtOutput)
    output.text = formattedResult + output.text
}

三、键盘输出模式的解决方向

若必须使用键盘输出:

  1. 进入DataWedge Profile的Output > Keystroke Output设置
  2. 找到Special Characters选项,将Group Separator (ASCII 29)映射为可打印字符(比如逗号、换行符)
  3. 扫描后在输入框获取完整内容,再用上述parseRawScanData函数解析拆分字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:20:34