机器学习套件(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 源码与操作指导
导入 CodeScannerDemo.aia 后可以直接打包 APK 运行;用 AI 伴侣联机调试请安装 MLKit 版 AI 伴侣。源码文件已通过正式编辑器载入、后台导入和 APK 编译校验;真机识别效果请以实际设备为准。
| 功能 | 操作 | 预期结果 |
|---|---|---|
| 网址 / WiFi / 名片示例码 | 依次点三个示例按钮 | 分别显示网址、WiFi 名称密码、联系人姓名电话 |
| 从相册选图 | 选一张含条码的截图 | 显示码制、内容类型和内容;没有码时提示未找到 |
| 摄像头扫码 | 点「摄像头扫码」对准条码 | 黑色预览区显示摄像头画面,扫到后显示结果并自动停止 |
| 连续扫描与手电筒 | 勾选「连续扫描」再扫码,扫描中勾选「手电筒」 | 可连续扫多个码;闪光灯常亮 |
| 停止 | 扫描中点「停止」 | 摄像头关闭 |
案例界面与积木源码在仓库 docs/markdown/reference/components/guide/examples/CodeScannerDemo/,SHA-256:c0cccfcdfe7cc7220c59216584a2d760519e821ab30ef398bf15468729d31aa9。
扫码添加客服咨询