{"_id":"@cordova-ohos/cordova-plugin-qrscanner","_rev":"3-92a5431d4736a1ef0d799e21e25631e6","name":"@cordova-ohos/cordova-plugin-qrscanner","dist-tags":{"latest":"3.0.2"},"versions":{"3.0.1":{"name":"@cordova-ohos/cordova-plugin-qrscanner","version":"3.0.1","keywords":["cordova","qrscanner","ecosystem:cordova","cordova-openharmony"],"author":{"name":"Huawei Device, Inc. Ltd. and","email":"马弓手"},"license":"Apache-2.0","_id":"@cordova-ohos/cordova-plugin-qrscanner@3.0.1","maintainers":[{"name":"luqi_tan","email":"295099422@qq.com"},{"name":"wanpengsz","email":"wanpengsz@163.com"},{"name":"xkh111","email":"xukaihui11@163.com"}],"bugs":{"url":"https://gitcode.com/OpenHarmony-Cordova/cordova-plugin-qrscanner/issues"},"dist":{"shasum":"210135d065ac81029514cb753455ee8d05fd36dc","tarball":"https://registry.npmjs.org/@cordova-ohos/cordova-plugin-qrscanner/-/cordova-plugin-qrscanner-3.0.1.tgz","fileCount":10,"integrity":"sha512-gQEJ3MSOpYEf5xC52dDJf9k1N1NfZN6ub+V7lB2LGBtI099c8G5+pq//+1/fbDgTUMjVbTcgcJ4q9/e357piHg==","signatures":[{"sig":"MEUCIFPuTm25X7fP5UVV3lVYQX0EMmTU86h1ydnVm0iJnAdXAiEA1fXKLfcMEzVywCDGxrSOAO8kwirrIFea9q5T12LK0/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78612},"cordova":{"id":"cordova-plugin-qrscanner","platforms":["ohos"]},"engines":{"cordovaDependencies":{"3.0.1":{"hcordova":">=1.0.0","@cordova-ohos/ohos":">=2.0.0"}}},"gitHead":"128b7d6536c7c6b3bdce048458e017e8a38c4262","_npmUser":{"name":"luqi_tan","email":"295099422@qq.com"},"repository":{"url":"gitcode:OpenHarmony-Cordova/cordova-plugin-qrscanner","type":"git"},"_npmVersion":"10.5.1","description":"Cordova qrscanner Plugin","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-qrscanner_3.0.1_1774227632063_0.8611349738815344","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@cordova-ohos/cordova-plugin-qrscanner","version":"3.0.2","description":"Cordova QRScanner Plugin","cordova":{"id":"cordova-plugin-qrscanner","platforms":["ohos"]},"repository":{"type":"git","url":"gitcode:CPF-Cordova/cordova-plugin-qrscanner"},"bugs":{"url":"https://gitcode.com/CPF-Cordova/cordova-plugin-qrscanner/issues"},"keywords":["cordova","qrscanner","ecosystem:cordova","cordova-openharmony"],"engines":{"cordovaDependencies":{"3.0.2":{"@cordova-ohos/ohos":">=2.0.0","hcordova":">=1.0.0"}}},"author":{"name":"Huawei Device, Inc. Ltd. and","email":"马弓手"},"license":"Apache-2.0","_id":"@cordova-ohos/cordova-plugin-qrscanner@3.0.2","gitHead":"c6d5928a4c967b18e96264794e0fe51e882b9d16","_nodeVersion":"22.0.0","_npmVersion":"10.5.1","dist":{"integrity":"sha512-lvx2npQtwXQEKaAse+6Zcob5S5gU+SXKUfkORxsBzs2etyd1oFgLLSEFb6dP7ccyaIaCCtaFXrjsaNksmVIVFA==","shasum":"18970dd9b7347265be8818e2cb4a85588f77a485","tarball":"https://registry.npmjs.org/@cordova-ohos/cordova-plugin-qrscanner/-/cordova-plugin-qrscanner-3.0.2.tgz","fileCount":11,"unpackedSize":112083,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDTCvEsCZWdtJWnplm5IzYA6HfCsNxMcXnW8qD6+gz7kwIhAOXrk2zZhdMs2zfTs1Z9OH0f+24HDuBC1uHaq855u90E"}]},"_npmUser":{"name":"luqi_tan","email":"295099422@qq.com"},"directories":{},"maintainers":[{"name":"luqi_tan","email":"295099422@qq.com"},{"name":"wanpengsz","email":"wanpengsz@163.com"},{"name":"xkh111","email":"xukaihui11@163.com"},{"name":"hcordova","email":"chenlihuiabc@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cordova-plugin-qrscanner_3.0.2_1785156210783_0.2431595008943257"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-23T01:00:31.959Z","modified":"2026-07-27T12:43:31.153Z","3.0.1":"2026-03-23T01:00:32.207Z","3.0.2":"2026-07-27T12:43:30.934Z"},"bugs":{"url":"https://gitcode.com/CPF-Cordova/cordova-plugin-qrscanner/issues"},"author":{"name":"Huawei Device, Inc. Ltd. and","email":"马弓手"},"license":"Apache-2.0","keywords":["cordova","qrscanner","ecosystem:cordova","cordova-openharmony"],"repository":{"type":"git","url":"gitcode:CPF-Cordova/cordova-plugin-qrscanner"},"description":"Cordova QRScanner Plugin","maintainers":[{"name":"luqi_tan","email":"295099422@qq.com"},{"name":"wanpengsz","email":"wanpengsz@163.com"},{"name":"xkh111","email":"xukaihui11@163.com"},{"name":"hcordova","email":"chenlihuiabc@163.com"}],"readme":"# <center>cordova-plugin-qrscanner</center>\r\n\r\n[![zh-CN](https://img.shields.io/badge/lang-中文-blue.svg)](README.md)\r\n[![en](https://img.shields.io/badge/lang-English-blue.svg)](README.en.md)\r\n\r\n本项目基于 [cordova-plugin-qrscanner@3.0.1](https://www.npmjs.com/package/cordova-plugin-qrscanner/v/3.0.1) 开发，本文档重点阐述其在 OpenHarmony（OHOS）系统中的具体应用。\r\n\r\n- [cordova-plugin-qrscanner](#cordova-plugin-qrscanner)\r\n  - [简介](#简介)\r\n  - [功能特性](#功能特性)\r\n  - [支持平台](#支持平台)\r\n  - [下载安装](#下载安装)\r\n    - [1. 基础版安装（推荐）](#1-基础版安装推荐)\r\n    - [2. 从 GitCode 仓库安装开发版](#2-从-gitcode-仓库安装开发版)\r\n    - [离线安装（本地包）](#离线安装本地包)\r\n    - [安装后验证](#安装后验证)\r\n    - [卸载](#卸载)\r\n  - [约束与限制](#约束与限制)\r\n    - [兼容性](#兼容性)\r\n  - [核心概念](#核心概念)\r\n    - [1. 插件命名空间](#1-插件命名空间)\r\n    - [2. 扫描模式](#2-扫描模式)\r\n    - [3. 对焦模式](#3-对焦模式)\r\n  - [OpenHarmony 权限配置](#openharmony-权限配置)\r\n  - [使用示例](#使用示例)\r\n    - [1. 完整扫码流程（含音效、连续扫码）](#1-完整扫码流程含音效连续扫码)\r\n    - [2. 单独功能调用示例](#2-单独功能调用示例)\r\n  - [使用说明](#使用说明)\r\n    - [核心说明](#核心说明)\r\n    - [API 及参数说明](#api-及参数说明)\r\n      - [1. 状态参数](#1-状态参数)\r\n      - [2. 核心 API 说明](#2-核心-api-说明)\r\n        - [2.1 准备扫码](#21-准备扫码)\r\n        - [2.2 显示摄像头](#22-显示摄像头)\r\n        - [2.3 获取当前状态](#23-获取当前状态)\r\n        - [2.4 设置窗口位置](#24-设置窗口位置)\r\n        - [2.5 开始扫码](#25-开始扫码)\r\n        - [2.6 重新扫描](#26-重新扫描)\r\n        - [2.7 暂停扫码](#27-暂停扫码)\r\n        - [2.8 释放相机](#28-释放相机)\r\n        - [2.9 打开闪光灯](#29-打开闪光灯)\r\n        - [2.10 关闭闪光灯](#210-关闭闪光灯)\r\n  - [目录结构](#目录结构)\r\n  - [贡献代码](#贡献代码)\r\n  - [许可证](#许可证)\r\n  - [官方资源](#官方资源)\r\n\r\n\r\n## 简介\r\n\r\ncordova-plugin-qrscanner 是一款专为 Cordova/PhoneGap 混合移动应用打造的条码与二维码扫描插件，基于原生平台扫描能力开发，支持多码制识别、实时预览、闪光灯控制及相册图片解析等核心功能。具备识别速度快、准确率高、兼容性强、轻量化等特点，可广泛应用于商品溯源、移动支付、资产管理、票务验证等场景。\r\n\r\n## 功能特性\r\n\r\n- **多码制全面支持**：覆盖常见一维码（如 EAN-13、UPC-A、Code 128）和二维码（如 QR Code、Data Matrix、Aztec），支持自定义启用/禁用特定码制\r\n\r\n- **原生扫描引擎**：基于 OHOS 原生扫描能力开发，识别速度 ≤300ms，准确率 ≥98%（清晰条码场景）\r\n\r\n- **实时预览与对焦**：支持高清实时预览（最高 1080P），支持自动对焦、手动点击对焦及连续对焦模式，适配不同距离扫描需求\r\n\r\n- **辅助扫描功能**：集成闪光灯控制（明暗环境自适应）、扫描框引导（提高识别效率）、震动/声音反馈（扫描成功提示）\r\n\r\n- **相册图片解析**：支持从相册选择图片或传入图片路径，解析图片中的条码信息，适配多种图片格式（JPG、PNG、GIF 等）\r\n\r\n- **权限智能管理**：自动检测并请求相机、相册权限，提供权限申请结果回调，支持权限拒绝后的引导处理\r\n\r\n- **离线全功能支持**：所有扫描与解析功能均本地完成，无需依赖网络，满足无网环境使用需求\r\n\r\n- **连续扫码能力**：可实现连续扫码，连续处理业务\r\n\r\n- **自定义扫码音效**：扫码通知到 JS 后，系统默认不播放音效，JS 侧实现播放音效\r\n\r\n## 支持平台\r\n\r\n- **Android**：API 19 及以上（Android 4.4+）\r\n\r\n- **iOS**：10.0 及以上\r\n\r\n- **OHOS**：5.0+\r\n\r\n## 下载安装\r\n\r\n确保已创建 Cordova/PhoneGap 项目（若未创建，执行 `hcordova create barcodeApp com.example.barcodeapp BarcodeApp` 或 `phonegap create barcodeApp` 创建），进入项目根目录后通过 hcordova CLI 安装插件，支持从 npm 仓库或 GitCode 仓库获取。\r\n\r\n### 1. 基础版安装（推荐）\r\n\r\n适用于大多数场景，直接从 npm 仓库安装稳定版：\r\n\r\n```bash\r\n# 安装 hcordova 命令化工具\r\nnpm install -g hcordova\r\n\r\n# 安装最新稳定版扫描插件\r\nhcordova plugin add cordova-plugin-qrscanner\r\n\r\n# 安装指定版本（示例：1.0.0 版本）\r\nhcordova plugin add cordova-plugin-qrscanner@1.0.0 --platform ohos\r\n```\r\n\r\n### 2. 从 GitCode 仓库安装开发版\r\n\r\n适用于需要体验最新功能的开发者，从 GitHub 仓库直接安装：\r\n\r\n```bash\r\n# 安装开发版插件（仅 OHOS 平台）\r\nhcordova plugin add https://gitcode.com/CPF-Cordova/cordova-plugin-qrscanner.git --platform ohos\r\n\r\n# 指定标签/分支安装\r\nhcordova plugin add https://gitcode.com/CPF-Cordova/cordova-plugin-qrscanner.git@develop --platform ohos\r\n```\r\n\r\n### 离线安装（本地包）\r\n\r\n适用于无网络环境，先下载插件包到本地，再执行离线安装：\r\n\r\n```bash\r\n# 下载插件包到本地（示例路径：../Downloads/cordova-plugin-qrscanner）\r\n# 执行离线安装\r\nhcordova plugin add ../Downloads/cordova-plugin-qrscanner  --platform ohos\r\n```\r\n\r\n### 安装后验证\r\n\r\n安装完成后，可通过以下命令验证插件是否成功添加到项目中：\r\n\r\n```bash\r\n# 查看已安装的插件列表，若包含本插件 ID 则表示插件已成功安装\r\nhcordova plugin list\r\n```\r\n\r\n### 卸载\r\n\r\n进入项目根目录，执行以下命令卸载插件，卸载后建议重新构建项目以清理残留文件：\r\n\r\n```bash\r\n# 全平台卸载\r\nhcordova plugin remove cordova-plugin-qrscanner \r\n\r\n# 指定 OHOS 平台卸载\r\nhcordova plugin remove cordova-plugin-qrscanner --platform ohos\r\n```\r\n\r\n## 约束与限制\r\n\r\n- 依赖插件：无强制依赖，可直接集成到 Cordova 项目中使用\r\n\r\n- 权限说明：插件直接调用原生相机，需配置相机权限，获取用户同意授权后可以调起扫码功能\r\n\r\n- 自定义限制：扫码声效音频、自定义屏幕，需额外编写适配多平台的原生代码\r\n\r\n### 兼容性\r\n\r\n支持：\r\n\r\n| 项目 | 版本/信息 |\r\n|-----|--------|\r\n| SDK | API12+ |\r\n| IDE | DevEco Studio: 5.0+ |\r\n| ROM | 5.1+ |\r\n| Emulator | OpenHarmony 6.0+ |\r\n\r\n在以下版本中已测试通过：\r\n\r\n| 项目 | 版本/信息 |\r\n|-----|--------|\r\n| @cordova-ohos/ohos | 14.0.1-ohos-14.0.1 |\r\n| SDK | 5.0.0(12) |\r\n| IDE | DevEco Studio: 6.0.13.200 |\r\n| ROM | 5.1.0.120 SP3 |\r\n| Emulator | OpenHarmony 6.0.1(21) |\r\n\r\n## 核心概念\r\n\r\n### 1. 插件命名空间\r\n\r\n插件通过全局对象 `QRScanner` 暴露所有 API 方法，所有操作均需通过该命名空间调用。\r\n\r\n### 2. 扫描模式\r\n\r\n插件支持两种核心扫描模式，可根据业务场景选择：\r\n\r\n- **实时扫描模式**：打开相机实时预览并识别条码，适用于直接扫描实体条码的场景（如商品扫码、票务验证），支持连续扫描和单次扫描\r\n\r\n- **图片解析模式**：解析相册图片文件中的条码信息，适用于扫描已保存的条码图片场景（如相册中的电子票、截图中的条码）\r\n\r\n### 3. 对焦模式\r\n\r\n为适配不同扫描距离和场景，插件支持三种对焦模式：\r\n\r\n- **自动对焦**：相机根据画面清晰度自动调整对焦，适用于扫描距离不固定的场景（默认模式）\r\n\r\n- **手动对焦**：通过点击预览界面指定对焦区域，适用于条码较小或位于画面特定位置的场景\r\n\r\n- **连续对焦**：相机持续保持对焦状态，适用于连续扫描多个条码的场景（如批量扫码入库）\r\n\r\n## OpenHarmony 权限配置\r\n\r\n在主工程的 module.json5 中添加相机权限：\r\n\r\n```json\r\n{\r\n    \"name\": \"ohos.permission.CAMERA\",\r\n    \"reason\": \"$string:cameraInfo\",\r\n    \"usedScene\": {\r\n        \"abilities\": [\r\n        \"EntryAbility\"\r\n        ],\r\n        \"when\": \"always\"\r\n    }\r\n}\r\n```\r\n\r\n## 使用示例\r\n\r\n插件通过全局对象 `QRScanner` 调用所有方法，所有 API 均为异步执行，以下为各核心功能的纯代码使用示例，可直接复制到项目中使用（API 及参数详情见「使用说明」章节）。\r\n\r\n### 1. 完整扫码流程（含音效、连续扫码）\r\n\r\n```javascript\r\n// 扫码后自动播放音效\r\nvar myAudio = new Audio();\r\nmyAudio.preload = true;\r\nmyAudio.controls = true;\r\n\r\nfunction playAudio() {\r\n    myAudio.src = \"../default.mp3\";\r\n    myAudio.loop = false;\r\n    myAudio.defaultPlaybackRate=1;\r\n    myAudio.play();\r\n}\r\n\r\n// 设置全屏\r\nfunction QRScannerSetRect() {\r\n    QRScanner.setWindowRect(function(result){\r\n        console.log(\"result:\"+result);\r\n    }, {x:0,y:0,height:'100%',width:'100%'});\r\n}\r\n\r\nfunction QRScannerShow() {\r\n    QRScanner.setWindowRect(function(status){\r\n        console.log(\"result:\"+status);\r\n        QRScanner.show(function(status){\r\n            document.getElementById(\"barcode\").innerHTML = JSON.stringify(status);\r\n            QRScanner.getStatus(function(status){\r\n                document.getElementById(\"barcode\").innerHTML = JSON.stringify(status);\r\n                QRScanner.prepare(function(error, status){\r\n                    document.getElementById(\"barcode\").innerHTML = JSON.stringify(status);\r\n                    if(error) {\r\n                        document.getElementById(\"barcode\").innerHTML = error;\r\n                    }\r\n                    if(status.authorized) {\r\n                        QRScanner.scan(function(error, result){\r\n                            document.getElementById(\"barcode\").innerHTML = result;\r\n                            if(error) {\r\n                                document.getElementById(\"barcode\").innerHTML = error;\r\n                            } else {\r\n                                playAudio();\r\n                                document.getElementById(\"barcode\").innerHTML = result;\r\n                                // 扫码结束重新扫码\r\n                                setTimeout(function(){\r\n                                    QRScanner.resumePreview(function(status){\r\n                                        console.log(status);\r\n                                    })\r\n                                }, 1000);\r\n                            }\r\n                        })\r\n                    }\r\n                });\r\n            });\r\n        });\r\n    },{x:0,y:0,height:'70%',width:'100%'});\r\n}\r\n\r\n// 打开和关闭闪光灯\r\nvar isLight = 0;\r\nfunction QRScannerOpenLight() {\r\n    if(isLight == 0) {\r\n        QRScanner.enableLight(function(err, status){\r\n            err && console.error(err);\r\n            console.log(status);\r\n            isLight = 1;\r\n        });\r\n    } else {\r\n        QRScanner.disableLight(function(err, status){\r\n            err && console.error(err);\r\n            console.log(status);\r\n            isLight = 0;\r\n        });\r\n    }\r\n\r\n}\r\n\r\n// 关闭摄像头\r\nfunction QRScannerClose() {\r\n    QRScanner.destroy(function(status){\r\n        console.log(status);\r\n    });\r\n/* 和 destroy 实现相同功能\r\n    QRScanner.hide(function(status){\r\n        console.log(status);\r\n    });\r\n*/\r\n}\r\n```\r\n\r\n### 2. 单独功能调用示例\r\n\r\n```javascript\r\n// 1. 准备扫码（OpenHarmony 兼容，可直接调用 show，无需提前准备）\r\nvar done = function(err, status){\r\n  if(err){\r\n    console.error(err._message);\r\n  } else {\r\n    console.log('QRScanner is initialized. Status:');\r\n    console.log(status);\r\n  }\r\n};\r\nQRScanner.prepare(done);\r\n\r\n// 2. 显示摄像头\r\nQRScanner.show(function(status){\r\n  console.log(status);\r\n});\r\n\r\n// 3. 获取当前状态\r\nQRScanner.getStatus(function(status){\r\n  console.log(status);\r\n});\r\n\r\n// 4. 设置窗口位置\r\nQRScanner.setWindowRect(function(result){\r\n    console.log(\"result:\"+result);\r\n},{x:0,y:0,height:'100%',width:'100%'});\r\n\r\n// 5. 开始扫码\r\nQRScanner.scan(function(error, result){\r\n    if(error) {\r\n        console.log(error);\r\n    } else {\r\n        // 扫码结束重新扫码，实现连续扫码\r\n        console.log(result); // 获取扫码结果，处理业务，然后重新开始扫描\r\n        setTimeout(function(){\r\n            QRScanner.resumePreview(function(status){\r\n                console.log(status);\r\n            })\r\n        }, 1000);\r\n    }\r\n})\r\n\r\n// 6. 重新扫描\r\nQRScanner.resumePreview(function(status){\r\n    console.log(status);\r\n})\r\n\r\n// 7. 暂停扫码（cancelScan 和 pausePreview 实现相同效果）\r\nQRScanner.cancelScan(function(status){\r\n  console.log(status);\r\n})\r\nQRScanner.pausePreview(function(status){\r\n  console.log(status);\r\n})\r\n\r\n// 8. 释放相机（hide 和 destroy 实现相同效果）\r\nQRScanner.hide(function(status){\r\n    console.log(status);\r\n});\r\nQRScanner.destroy(function(status){\r\n    console.log(status);\r\n});\r\n\r\n// 9. 打开闪光灯\r\nQRScanner.enableLight(function(err, status){\r\n    err && console.error(err);\r\n    console.log(status);\r\n});\r\n\r\n// 10. 关闭闪光灯\r\nQRScanner.disableLight(function(err, status){\r\n    err && console.error(err);\r\n    console.log(status);\r\n});\r\n```\r\n\r\n## 使用说明\r\n\r\n### 核心说明\r\n1. 插件调用：所有 API 均通过全局对象 `QRScanner` 调用，无需额外引入，直接调用对应方法即可。\r\n2. 权限说明：OHOS 平台下，需在主工程 module.json5 中配置相机权限，插件会自动检测并请求权限，提供权限申请结果回调；无相机权限时，扫描功能无法正常使用。\r\n3. 方法说明：各 API 均为异步执行，通过回调函数处理执行结果，部分方法支持 Promise 风格调用；OpenHarmony 无需预先准备扫码，可直接调用 show 函数，同时兼容 prepare 准备函数。\r\n4. 功能说明：扫码全屏模式下，原生已实现闪光灯控制、相机释放功能，JS 侧可无需重复调用；自定义扫码音效需在 JS 侧实现，系统默认不播放音效。\r\n5. 对焦与预览：支持自动、手动、连续三种对焦模式，默认使用自动对焦；实时预览最高支持 1080P，可通过设置窗口位置调整预览区域大小。\r\n6. 错误处理：API 调用失败时，可通过回调函数的 error 参数获取错误信息，便于问题排查；权限拒绝时，需引导用户手动开启相机权限。\r\n7. 兼容性说明：确保项目中 Cordova 版本、DevEco Studio 版本及 OHOS SDK 版本符合兼容性要求，避免因版本不兼容导致功能异常。\r\n\r\n### API 及参数说明\r\n\r\n#### 1. 状态参数\r\n\r\n| 属性名称（Name） | 描述（Description） |\r\n|---|---|\r\n| authorized | 布尔值，仅当用户允许应用访问相机（在对话框中点击“允许”）时为 true |\r\n| denied | 布尔值，若用户永久拒绝应用访问相机 |\r\n| restricted | 布尔值，若用户因家长控制、组织安全配置文件或类似原因无法授予权限，则为 true |\r\n| prepared | 布尔值，若 QRScanner 已准备好捕获视频并将其渲染到视图中，则为 true |\r\n| showing | 布尔值，当预览层可见时为 true（且在除“浏览器”外的所有平台上，原生 WebView 背景为透明） |\r\n| scanning | 布尔值，若 QRScanner 正在主动扫描二维码，则为 true |\r\n| previewing | 布尔值，若 QRScanner 正在显示设备相机的实时预览，则为 true。预览暂停时设为 false |\r\n| lightEnabled | 布尔值，若闪光灯已开启，则为 true |\r\n| canOpenSettings | 布尔值，仅当用户的操作系统支持 OpenHarmony 为 false |\r\n| canEnableLight | 布尔值，仅当用户设备当前使用的相机（`currentCamera`）方向上可开启闪光灯时为 true |\r\n| canChangeCamera | 布尔值，仅当当前设备“应”具备前置摄像头时为 true。OpenHarmony 为 false |\r\n| currentCamera | 表示当前使用相机索引的数字。0 为后置摄像头，1 为前置摄像头。OpenHarmony 为 1 |\r\n#### 2. 核心 API 说明\r\n\r\n##### 2.1 准备扫码\r\n\r\nAPI：QRScanner.prepare(done)\r\n\r\n说明：OpenHarmony 不需要预先准备扫码，可以直接调用 show 函数，但是 OHOS 兼容准备扫码函数\r\n\r\n参数：done - 回调函数，接收 err（错误信息）和 status（当前状态）两个参数\r\n\r\n##### 2.2 显示摄像头\r\n\r\nAPI：QRScanner.show(function(status))\r\n\r\n参数：回调函数，接收 status（当前状态）参数\r\n\r\n##### 2.3 获取当前状态\r\n\r\nAPI：QRScanner.getStatus(function(status))\r\n\r\n参数：回调函数，接收 status（当前状态）参数，包含状态参数中所有属性\r\n\r\n##### 2.4 设置窗口位置\r\n\r\nAPI：QRScanner.setWindowRect(function(result), options)\r\n\r\n参数：\r\n\r\n- 回调函数：接收 result（设置结果）参数\r\n\r\n- options：窗口位置配置对象，包含 x（横向偏移）、y（纵向偏移）、height（高度）、width（宽度）\r\n\r\n##### 2.5 开始扫码\r\n\r\nAPI：QRScanner.scan(function(error, result))\r\n\r\n参数：回调函数，接收 error（错误信息）和 result（扫码结果）两个参数\r\n\r\n##### 2.6 重新扫描\r\n\r\nAPI：QRScanner.resumePreview(function(status))\r\n\r\n参数：回调函数，接收 status（当前状态）参数，用于暂停扫码后重新开始扫描\r\n\r\n##### 2.7 暂停扫码\r\n\r\nAPI：QRScanner.cancelScan(function(status)) / QRScanner.pausePreview(function(status))\r\n\r\n说明：两个方法实现相同效果，暂停扫码后，调用 resumePreview 可以继续扫码\r\n\r\n参数：回调函数，接收 status（当前状态）参数\r\n\r\n##### 2.8 释放相机\r\n\r\nAPI：QRScanner.hide(function(status)) / QRScanner.destroy(function(status))\r\n\r\n说明：两个方法实现相同效果，JS 可以不调用；扫码全屏模式下，原生功能也实现了释放相机功能，直接点击左上角按钮关闭相机即可\r\n\r\n参数：回调函数，接收 status（当前状态）参数\r\n\r\n##### 2.9 打开闪光灯\r\n\r\nAPI：QRScanner.enableLight(function(err, status))\r\n\r\n说明：扫码全屏模式下，原生功能也实现了闪光灯功能，JS 可以不调用\r\n\r\n参数：回调函数，接收 err（错误信息）和 status（当前状态）两个参数\r\n\r\n##### 2.10 关闭闪光灯\r\n\r\nAPI：QRScanner.disableLight(function(err, status))\r\n\r\n说明：扫码全屏模式下，原生功能也实现了闪光灯功能，JS 可以不调用\r\n\r\n参数：回调函数，接收 err（错误信息）和 status（当前状态）两个参数\r\n\r\n## 目录结构\r\n\r\n```\r\ncordova-plugin-qrscanner            # [根目录] 二维码扫描插件项目根目录\r\n├── src                            # [源码目录] 存放原生平台代码\r\n│   └── main                       # [主目录] 主代码目录\r\n│       ├── cpp                    # [C++ 目录] C++ 原生代码目录\r\n│       │   └── BarcodeScanner     # [C++ 模块] 条码扫描 C++ 模块文件夹\r\n│       │       ├── QRScanner.cpp  # [C++ 实现] C++ 源文件，实现扫描底层逻辑\r\n│       │       └── QRScanner.h    # [C++ 声明] C++ 头文件，定义扫描接口\r\n│       └── ets                    # [ArkTS 目录] ArkTS/ETS 代码目录\r\n│           └── components         # [组件目录] 存放 UI 或逻辑组件\r\n│               └── BarcodeScan    # [TS 模块] 条码扫描相关逻辑文件夹\r\n│                   ├── BarcodeScan.ets # [ETS 文件] 可能是扫描界面的 UI 组件实现\r\n│                   └── QRScanAction.ets # [ETS 文件] 处理扫描动作和逻辑的 ArkTS 实现\r\n├── www                            # [前端目录] 存放供 Web 端调用的 JS 接口文件\r\n│   └── www.min.js                 # [JS 文件] 压缩后的 JS 接口文件，供 Web 端调用\r\n├── .gitignore                     # [配置文件] Git 版本控制忽略文件配置\r\n├── LICENSE                        # [许可证] 项目开源许可证\r\n├── OAT.xml                        # [配置文件] 门禁配置文件\r\n├── package.json                   # [配置文件] npm 包管理配置文件\r\n├── plugin.xml                     # [配置文件] Cordova 插件核心配置文件\r\n└── README.md                      # [文档] 项目说明文档\r\n```\r\n\r\n## 贡献代码\r\n\r\n使用过程中发现任何问题都可以提 [Issue](https://gitcode.com/CPF-Cordova/cordova-plugin-qrscanner/issues) ，当然也非常欢迎发 [PR](https://gitcode.com/CPF-Cordova/cordova-plugin-qrscanner/pulls) 共建。\r\n\r\n## 许可证\r\n\r\n本插件基于 **Apache License 2.0** 开源，详见 [LICENSE](LICENSE) 文件。\r\n\r\n## 官方资源\r\n\r\n- **Android 和 iOS**：[cordova-plugin-qrscanner 官方指南](https://www.npmjs.com/package/cordova-plugin-qrscanner)\r\n\r\n- **GitCode 仓库**：[CPF-Cordova/cordova-plugin-qrscanner](https://gitcode.com/CPF-Cordova/cordova-plugin-qrscanner)\r\n","readmeFilename":"README.md"}