条码识别(CodeScanner)使用指导:识别图片里的码,或打开摄像头扫码

« 返回

机器学习套件(ML Kit)组件在在线版和教育版中提供,离线版(含机房版)不包含。

它能做什么

条码识别能认二维码(QR、Data Matrix、PDF417、Aztec)和常见一维码(EAN-13/8、UPC-A/E、Code-39/93/128、ITF、Codabar)。既可以识别一张图片里的码,也可以把摄像头画面放进界面上的一个布局里实时扫描。识别结果先触发通用的「扫描到条码」,再按内容类型触发专用事件:网址、WiFi、名片、邮件、电话、短信、位置、日程、驾照,直接拿到拆好的字段。

准备工作

  • 摄像头扫码:先把「预览容器」设成一个有明确宽高的布局(例如宽度充满、高度 260 像素),摄像头画面会显示在里面;首次使用会申请相机权限。
  • 只扫需要的码制:「码制」填 qr、ean13 等(逗号分隔),比 all 识别更快。
  • 联机调试:安卓上用 AI 伴侣调试需要安装 MLKit 版 AI 伴侣(应用宝,包名 cn.fun123.appinventor);普通版伴侣不含识别引擎,调用时会触发「屏幕.出现错误时」(错误码 4722)。直接打包 APK 安装测试不受影响。
  • 安装包体积:只有用到本组件的 App 才会打包它的识别引擎与模型,体积以编译结果为准。
  • 鸿蒙:完整支持:识别图片用系统 ScanKit;「摄像头扫码」打开系统扫码界面(自带取景和手电筒,「预览容器」「手电筒」只保存取值);内容类型按通行格式解析后触发同样的专用事件。

案例一:识别图片里的二维码

工程自带网址、WiFi、名片三张示例二维码。识别结果先在「扫描到条码」里显示通用信息,再在专用事件里显示拆好的字段:

when 按钮_网址码.Click() {
  图像_预览.Picture = "qr_url.png"
  条码识别1.RecognizeFromFile("qr_url.png")
}
when 条码识别1.GotBarcode(原始内容, 格式, 内容类型, 显示内容, 详情JSON) {
  标签_状态.Text = join("识别到 ", 格式, ",内容类型 ", 内容类型)
  标签_结果.Text = 显示内容
}
when 条码识别1.GotWifi(WiFi名称, 密码, 加密方式) {
  标签_详情.Text = join("WiFi 名称:", WiFi名称, "\n密码:", 密码, "\n加密方式:", 加密方式)
}
when 条码识别1.NoBarcodeFound(操作) {
  标签_状态.Text = "这张图里没有找到条码"
}

案例二:摄像头实时扫码与连续扫描

点「摄像头扫码」时指定预览布局,并按复选框决定是否连续扫描;连续扫描时同一个码 1.5 秒内不会重复触发。手电筒只在扫描进行中有效:

when 按钮_扫码.Click() {
  条码识别1.PreviewContainer = 垂直布局_预览
  条码识别1.ContinuousScan = 复选框_连续.Checked
  条码识别1.StartScan()
}
when 按钮_停止.Click() {
  条码识别1.StopScan()
}
when 复选框_手电.Changed() {
  条码识别1.Torch = 复选框_手电.Checked
}
when 条码识别1.GotContact(名称, 电话, 邮箱, 单位, 标题, 地址, 网址) {
  标签_详情.Text = join("姓名:", 名称, "\n电话:", 电话, "\n邮箱:", 邮箱)
}

结果数据说明

「格式」如 QR_CODE、EAN_13;「内容类型」如 URL、WIFI、CONTACT、EMAIL、PHONE、SMS、GEO、CALENDAR_EVENT、DRIVER_LICENSE、ISBN、PRODUCT、TEXT。「详情JSON」包含原始内容、格式、类型、坐标以及该类型的全部字段。

常见问题

现象 原因与处理
点了扫码看不到画面 没设「预览容器」,或那个布局没有明确的高度
同一个码被重复触发 这是连续扫描;只扫一次就关掉「连续扫描」,扫到后自动停止
一维码扫不出来 把码放平、离近一点;或把「码制」限定为实际类型

完整 .aia 源码与操作指导

下载 .aia 源码

导入 CodeScannerDemo.aia 后可以直接打包 APK 运行;用 AI 伴侣联机调试请安装 MLKit 版 AI 伴侣。源码文件已通过正式编辑器载入、后台导入和 APK 编译校验;真机识别效果请以实际设备为准。

功能 操作 预期结果
网址 / WiFi / 名片示例码 依次点三个示例按钮 分别显示网址、WiFi 名称密码、联系人姓名电话
从相册选图 选一张含条码的截图 显示码制、内容类型和内容;没有码时提示未找到
摄像头扫码 点「摄像头扫码」对准条码 黑色预览区显示摄像头画面,扫到后显示结果并自动停止
连续扫描与手电筒 勾选「连续扫描」再扫码,扫描中勾选「手电筒」 可连续扫多个码;闪光灯常亮
停止 扫描中点「停止」 摄像头关闭

案例界面与积木源码在仓库 docs/markdown/reference/components/guide/examples/CodeScannerDemo/,SHA-256:c0cccfcdfe7cc7220c59216584a2d760519e821ab30ef398bf15468729d31aa9。

文档反馈