Zebra MC9300扫描器DataWedge Intent解析GS1-128条码配置问题
解决Zebra MC9300 DataWedge解析DataMatrix条码字段问题
一、优先方案:通过DataWedge配置实现自动字段拆分(Intent方式)
你的条码属于GS1标准DataMatrix,DataWedge内置Parser可直接解析拆分AI字段,无需处理原始数据中的不可打印字符:
- 打开设备DataWedge应用,找到绑定到你应用的Profile(示例代码默认是
DataWedgeGettingStarted) - 进入Profile的Barcode Input设置,确认
DATAMATRIXsymbology已启用 - 进入Data Processing > Parser,开启Parser功能,选择
GS1 DataMatrix解析器 - 进入Output > Intent Output,确保Intent动作、包名与应用匹配,勾选「Send parsed data as key-value pairs」
- 保存配置,重启扫描器或重新激活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 }
三、键盘输出模式的解决方向
若必须使用键盘输出:
- 进入DataWedge Profile的Output > Keystroke Output设置
- 找到Special Characters选项,将
Group Separator (ASCII 29)映射为可打印字符(比如逗号、换行符) - 扫描后在输入框获取完整内容,再用上述
parseRawScanData函数解析拆分字段
内容的提问来源于stack exchange,提问作者Scott Salyer
相关产品推荐
相关产品推荐

