npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@cordova-ohos/cordova-plugin-qrscanner

v3.0.1

Published

Cordova qrscanner Plugin

Readme

cordova-plugin-qrscanner 高效条码扫描插件

一款专为 Cordova/PhoneGap 混合移动应用打造的条码与二维码扫描插件,基于原生平台扫描能力开发,支持多码制识别、实时预览、闪光灯控制及本地图片解析等核心功能。具备识别速度快、准确率高、兼容性强、轻量化等特点,可广泛应用于商品溯源、移动支付、资产管理、票务验证等场景。

功能特性

  • 多码制全面支持:覆盖常见一维码(如 EAN-13、UPC-A、Code 128)和二维码(如 QR Code、Data Matrix、Aztec),支持自定义启用/禁用特定码制

  • 原生扫描引擎:基于 HamonyOS 原生扫描能力开发,识别速度≤300ms,准确率≥98%(清晰条码场景)

  • 实时预览与对焦:支持高清实时预览(最高 1080P),支持自动对焦、手动点击对焦及连续对焦模式,适配不同距离扫描需求

  • 辅助扫描功能:集成闪光灯控制(明暗环境自适应)、扫描框引导(提高识别效率)、震动/声音反馈(扫描成功提示)

  • 本地图片解析:支持从相册选择图片或传入图片路径,解析图片中的条码信息,适配多种图片格式(JPG、PNG、GIF 等)

  • 权限智能管理:自动检测并请求相机、相册权限,提供权限申请结果回调,支持权限拒绝后的引导处理

  • 离线全功能支持:所有扫描与解析功能均本地完成,无需依赖网络,满足无网环境使用需求

  • 连续扫码能力:可实现连续扫码,连续处理业务

  • 自定义扫码音效:扫码通知到js后,系统默认不播放音效,js侧实现播放音效

安装方法

确保已创建 Cordova/PhoneGap 项目(若未创建,执行 hcordova create barcodeApp com.example.barcodeapp BarcodeAppphonegap create barcodeApp 创建),进入项目根目录后选择以下方式安装:

1. 基础版安装

适用于大多数场景,直接从 npm 仓库安装稳定版:

# 安装hcordova
npm install -g hcordova

# 安装最新稳定版扫描插件
hcordova plugin add cordova-plugin-qrscanner

# 安装指定版本(示例:1.0.0 版本)
hcordova plugin add [email protected] --platform ohos

2. 从 GitCode 安装开发版

适用于需要体验最新功能的开发者,从 GitHub 仓库直接安装:


# 安装开发版插件
hcordova plugin add https://gitcode.com/OpenHarmony-Cordova/cordova-plugin-qrscanner.git --platform ohos

卸载方法

进入项目根目录,执行以下命令卸载插件,卸载后建议重新构建项目以清理残留文件:


# 卸载扫描插件
hcordova plugin remove cordova-plugin-qrscanner

# 指定HarmonyOS卸载
hcordova plugin remove cordova-plugin-qrscanner --platform ohos

核心概念

1. 插件命名空间

插件通过全局对象 QRScanner 暴露所有 API 方法,所有操作均需通过该命名空间调用,避免与其他插件冲突。

2. 扫描模式

插件支持两种核心扫描模式,可根据业务场景选择:

  • 实时扫描模式:打开相机实时预览并识别条码,适用于直接扫描实体条码的场景(如商品扫码、票务验证),支持连续扫描和单次扫描

  • 图片解析模式:解析本地图片文件中的条码信息,适用于扫描已保存的条码图片场景(如相册中的电子票、截图中的条码)

3. 对焦模式

为适配不同扫描距离和场景,插件支持三种对焦模式:

  • 自动对焦:相机根据画面清晰度自动调整对焦,适用于扫描距离不固定的场景(默认模式)

  • 手动对焦:通过点击预览界面指定对焦区域,适用于条码较小或位于画面特定位置的场景

  • 连续对焦:相机持续保持对焦状态,适用于连续扫描多个条码的场景(如批量扫码入库)

HarmonyOS权限配置

在主工程的module.json5中添加相机权限

{
    "name": "ohos.permission.CAMERA",
    "reason": "$string:cameraInfo",
    "usedScene": {
        "abilities": [
        "EntryAbility"
        ],
        "when": "always"
    }
}

API 参考

插件所有 API 均为异步执行,通过回调函数处理执行结果,支持 Promise 风格调用(部分方法)。

1. 状态参数

|属性名称(Name)|描述(Description)| |---|---| |authorized|布尔值,仅当用户允许应用访问相机(在对话框中点击“允许”)时为 true | |denied|布尔值,若用户永久拒绝应用访问相机| |restricted|布尔值,若用户因家长控制、组织安全配置文件或类似原因无法授予权限,则为 true。| |prepared|布尔值,若 QRScanner 已准备好捕获视频并将其渲染到视图中,则为 true。| |showing|布尔值,当预览层可见时为 true(且在除“浏览器”外的所有平台上,原生 WebView 背景为透明)。| |scanning|布尔值,若 QRScanner 正在主动扫描二维码,则为 true。| |previewing|布尔值,若 QRScanner 正在显示设备相机的实时预览,则为 true。预览暂停时设为 false。| |lightEnabled|布尔值,若闪光灯已开启,则为 true。| |canOpenSettings|布尔值,仅当用户的操作系统支持 HarmonyOS 永远为 false。| |canEnableLight|布尔值,仅当用户设备当前使用的相机(currentCamera)方向上可开启闪光灯时为 true。| |canChangeCamera|布尔值,仅当当前设备“应”具备前置摄像头时为 true。HarmonyOS永远为false| |currentCamera|表示当前使用相机索引的数字。0 为后置摄像头,1 为前置摄像头。HarmonyOS 永远为1|

2. 准备扫码

HarmonyOS不需要预先准备扫码,可以直接调用show函数,但是鸿蒙兼容准备扫码函数

var done = function(err, status){
  if(err){
    console.error(err._message);
  } else {
    console.log('QRScanner is initialized. Status:');
    console.log(status);
  }
};
 
QRScanner.prepare(done);

3. 显示摄像头

QRScanner.show(function(status){
  console.log(status);
});

4. 获取当前状态

QRScanner.getStatus(function(status){
  console.log(status);
});

5. 设置窗口位置

QRScanner.setWindowRect(function(result){
    console.log("result:"+result);
},{x:0,y:0,height:'100%',width:'100%'});

6. 开始扫码

QRScanner.scan(function(error, result){
    if(error) {
        console.log(error);
    } else {
        //扫码结束重新扫码,实现连续扫码
        console.log(result); //获取扫码结果,处理业务,然后重新开始扫描
        setTimeout(function(){
            QRScanner.resumePreview(function(status){
                console.log(status);
            })
        }, 1000);
    }
})

6. 重新扫描

QRScanner.resumePreview(function(status){
    console.log(status);
})

7. 暂停扫码

//cancelScan和pausePreview实现相同效果
//暂停扫码后,调用resumePreview可以继续扫码
QRScanner.cancelScan(function(status){
  console.log(status);
})

QRScanner.pausePreview(function(status){
  console.log(status);
})

8. 释放相机

//hide和destroy实现相同效果,js可以不调用
//扫码全屏模式下,原生功能也实现了释放相机功能,直接点击左上角按钮关闭相机即可
QRScanner.hide(function(status){
    console.log(status);
});

QRScanner.destroy(function(status){
    console.log(status);
});

9. 打开闪光灯

//扫码全屏模式下,原生功能也实现了闪光灯功能,js可以不调用
QRScanner.enableLight(function(err, status){
    err && console.error(err);
    console.log(status);
});

10. 关闭闪光灯

//扫码全屏模式下,原生功能也实现了闪光灯功能,js可以不调用
QRScanner.disableLight(function(err, status){
    err && console.error(err);
    console.log(status);
});

使用示例


//扫码后自动播放音效
var myAudio = new Audio();
myAudio.preload = true;
myAudio.controls = true;

function playAudio() {
    myAudio.src = "../default.mp3";
    myAudio.loop = false;
    myAudio.defaultPlaybackRate=1;
    myAudio.play();
}

//设置全屏
function QRScannerSetRect() {
    QRScanner.setWindowRect(function(result){
        console.log("result:"+result);
    }, {x:0,y:0,height:'100%',width:'100%'});
}

function QRScannerShow() {
    QRScanner.setWindowRect(function(status){
        console.log("result:"+status);
        QRScanner.show(function(status){
            document.getElementById("barcode").innerHTML = JSON.stringify(status);
            QRScanner.getStatus(function(status){
                document.getElementById("barcode").innerHTML = JSON.stringify(status);
                QRScanner.prepare(function(error, status){
                    document.getElementById("barcode").innerHTML = JSON.stringify(status);
                    if(error) {
                        document.getElementById("barcode").innerHTML = error;
                    }
                    if(status.authorized) {
                        QRScanner.scan(function(error, result){
                            document.getElementById("barcode").innerHTML = result;
                            if(error) {
                                document.getElementById("barcode").innerHTML = error;
                            } else {
                                playAudio();
                                document.getElementById("barcode").innerHTML = result;
                                //扫码结束重新扫码
                                setTimeout(function(){
                                    QRScanner.resumePreview(function(status){
                                        console.log(status);
                                    })
                                }, 1000);
                            }
                        })
                    }
                });
            });
        });
    },{x:0,y:0,height:'70%',width:'100%'});
}

//打开和关闭闪光灯
var isLight = 0;
function QRScannerOpenLight() {
    if(isLight == 0) {
        QRScanner.enableLight(function(err, status){
            err && console.error(err);
            console.log(status);
            isLight = 1;
        });
    } else {
        QRScanner.disableLight(function(err, status){
            err && console.error(err);
            console.log(status);
            isLight = 0;
        });
    }

}

//关闭摄像头
function QRScannerClose() {
    QRScanner.destroy(function(status){
        console.log(status);
    });
/*和destroy实现相同功能
    QRScanner.hide(function(status){
        console.log(status);
    });
*/
}

许可证

本插件基于 Apache License 开源,详见 LICENSE 文件。

参考资源