☰
扫出tel:、sms:、wifi:后如何解析?QRCode4cj客户端结果解析完全指南
2026/9/26 15:00:05 网站建设 项目流程

扫出tel:、sms:、wifi:后如何解析?QRCode4cj客户端结果解析完全指南

【免费下载链接】qrcode4cj一维码/二维码扫描库。项目地址: https://gitcode.com/Cangjie-TPC/qrcode4cj

QRCode4cj 是一个解析/生成一维码、二维码的开源扫描库。扫码得到tel:、sms:、wifi:这类 URI 后如何解析?本指南带你快速上手 QRCode4cj 的客户端结果解析(ResultParser),把扫码原始文本拆成电话号码、短信内容、WiFi 密码等结构化字段。

解析流程:原始文本如何变成结构化结果?

QRCode4cj 的客户端模块位于 src/client/result/,核心入口是 result_parser.cj 中的ResultParser.parseResult()。它的工作方式非常直观:

  1. 拿到扫码得到的原始文本(自动去除 BOM 头)
  2. 按顺序尝试内置的解析器队列:WiFi → Geo → 电话 → 短信/MMS → 邮件 → URI → 纯文本……
  3. 哪个解析器"认领"成功就返回对应的结构化结果;全部不匹配则回退为TextParsedResult

也就是说,你不需要自己判断扫码内容是什么类型,框架会自动路由到正确的解析器,最终结果统一继承自 parsed_result.cj,可通过ParsedResultType区分类型。

一键解析:三步拿到结构化数据

典型用法只需三步(完整示例参考 README.md 的"功能示例"章节):

  1. 用MultiFormatReader解码得到Result
  2. 调用ResultParser.parseResult(result)获得ParsedResult
  3. 根据类型转型后读取字段,或直接用getDisplayResult()获取可读文本

tel: 电话二维码如何解析?

适用场景:名片、门店牌上的"扫码拨号"二维码。

TelResultParser 的解析规则:

  • 支持大小写前缀tel:/TEL:,会自动归一化为小写
  • ?之后的 query 部分会被剔除
  • 结果类 TelParsedResult 提供三个取数方法:
方法含义示例输入tel:+8613800138000的输出
getNumber()纯号码+8613800138000
getTelURI()完整 URItel:+8613800138000
getDisplayResult()展示文本+8613800138000

拿到getNumber()后直接交给系统拨号接口即可,这正是"扫码拨号"功能的核心一行。

sms: / mms: 短信二维码如何解析?

适用场景:预填收件人和短信内容的快捷回复码(RFC 5724 规范)。

SMSMMSResultParser 同时识别sms:和mms:前缀,支持多收件人与扩展语法:

  • 多收件人:逗号分隔,sms:10086,10010?body=Hi
  • 预填正文与主题:?body=你好&subject=咨询
  • via 中继:非标准但常见的+12125551212;via=+12124440101写法也兼容

结果类 SMSParsedResult 的关键方法:

方法说明
getNumbers()收件人号码数组
getVias()与收件人一一对应的中继号码
getBody()/getSubject()预填正文 / 主题
getSMSURI()重新拼回标准sms:URI

💡 小提醒:若短信正文本身带?且没有 body/subject 参数,解析器会保守地把?当作正文内容而非 query 分隔符,避免误拆。

WIFI: 二维码如何解析出 SSID 和密码?

适用场景:餐厅、酒店门口的"扫码连 WiFi"二维码——本指南中最实用的场景。

WifiResultParser 严格按WIFI:前缀匹配(大写),字段以;分隔、反斜杠可转义。各字段含义:

字段含义结果类方法
S:SSID 名称getSsid()
P:密码getPassword()
T:加密方式(WPA/WEP/nopass)getNetworkEncryption()
H:隐藏网络isHidden()
I:/A:/E:/PH2:企业认证(EAP/PEAP 等)getIdentity()等

示例:WIFI:T:WPA;S:MyHome;P:88886666;;

解析后ssid=MyHome、password=88886666、加密类型WPA。⚠️ 注意两点:

  • SSID 为空的 WIFI: 串会被拒绝(返回不匹配,回退到文本结果)
  • 未指定T:时默认按nopass处理;H:字段在旧数据里可能表示二阶段认证方式,解析器会自动兼容判断

不止 tel/sms/wifi:其他常见类型速查

同一个parseResult()入口还支持更多格式,全部位于 src/client/result/ 目录:

  • geo:经纬度 → geo_parsed_result.cj
  • mailto:邮件地址 → email_address_parsed_result.cj
  • http(s):网页链接 → uri_parsed_result.cj
  • 商品条码 / ISBN / VIN 码 / 名片(VCard)等 → parsed_result_rype.cj 中定义了完整类型枚举

总结

用一句话概括:解码得到Result后,把原始文本扔给ResultParser.parseResult(),QRCode4cj 就会自动帮你识别tel:、sms:、WIFI:等 URI 并输出结构化字段,剩下的只是调用 getter 而已。想深入细节,可对照 result_parser.cj 中的解析器调度顺序与字段匹配工具方法matchPrefixedField()。

【免费下载链接】qrcode4cj一维码/二维码扫描库。项目地址: https://gitcode.com/Cangjie-TPC/qrcode4cj

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询