支持常见的一维码(如EAN13码)及二维码(如QR码), 通过调用设备的摄像头对条码进行扫描识别, 扫描到条码后进行解码并返回码数据内容及码类型
输入图片文件进行扫码识别, 成功扫描到条码(一维码或二维码)后通过successCallback回调返回, 失败则通过errorCallback回调返回
void plus.barcode.scan(path,successCB,errorCB,filters,autoDecodeCharset);
// 从图片中扫码识别
function scanImg() {
plus.barcode.scan( '_www/barcode.png', function(type,result) {
console.log("Scan success:("+type+")"+result);
}, function(e){
console.log("Scan failed: "+JSON.stringify(e));
} );
}
创建扫码识别控件并不会显示在页面中, 需要电泳plus.webview.Webview窗口对象的append方法将其添加到Webview窗口中才能显示. 需要设置styles参数的top/left/width/height属性指定扫码识别控件的位置及大小, 否则可能无法正确显示
id:(String)扫码识别空间的标识
可用于通过plus.barcode.getBarcodeById()方法查找已经创建的扫码识别控件对象
filters: (Array[Number])(可选)条码类型过滤器
styles:(BarcodeStyles)(可选)扫码识别控件样式
autoDecodeCharset:(Boolean)(必选)自动解码字符集
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
barcode: null, //创建扫一扫对象
result: '', //扫描结果
flash: false,
};
},
onShow() {
// 页面展示时,重新启动扫描检测
if (this.barcode) {
this.barcode.start()
}
},
onLoad() {
plus.navigator.setFullscreen(true); //全屏
let currentWebview = this.$scope.$getAppWebview();
console.error(currentWebview)
this.createBarcode(currentWebview)
},
methods: {
createBarcode(currentWebview) {
if (!this.barcode) {
this.barcode = plus.barcode.create('barcode', [plus.barcode.QR], {
top: `0px`,
left: '0px',
height: `100%`,
width: '100%',
position: 'absolute',
background: '#FFCC00',
frameColor: '#FFCC33',
scanbarColor: '#FFCC33',
});
console.log(this.barcode)
this.barcode.onmarked = this.onmarked;
this.barcode.setFlash(this.flash);
//注意扫码区域需为正方形,否则影响扫码识别率
currentWebview.append(this.barcode);
}
this.barcode.start()
},
// 扫码成功回调
onmarked(type, result) {
console.log('条码类型:' + type);
console.log('条码内容:' + result);
uni.navigateBack({
delta: 1
})
// 业务代码
// 核对扫描结果
// 判断是否是正确的格式
// 不正确则跳转到 错误页面
}
}
}
</script>
<style lang="scss">
</style>
根据指定的id(标识)查找扫码控件对象, 可跨页面进行查找
var barcode = null;
// 创建扫码控件
function createBarcode() {
if(!barcode){
barcode = plus.barcode.create('barcode', [plus.barcode.QR], {
top:'100px',
left:'0px',
width: '100%',
height: '500px',
position: 'static'
});
barcode.onmarked = function(type, result){
console.log('Success: type='+type+', result='+result);
};
plus.webview.currentWebview().append(barcode);
}
barcode.start();
}
// 查找扫码控件
function findBarcode() {
var b = plus.barcode.getBarcodeById('barcode');
if(b){
console.log('find success!');
} else {
console.log('find failed!');
}
}
可通过plus.barcode.create创建, 也可通过new plus.barcode.Barcode构造(仅在5+APP中使用)创建. 扫码识别控件将使用设备的摄像头预览扫描内容, 在控件中显示扫描基准框等用户交互元素.
cancel: 取消扫码识别
结束对摄像头捕获图片数据进行条码识别操作, 同时关闭摄像头的视频捕捉. 结束后可调用start方法重新开始识别.
close: 关闭条码识别控件
释放控件占用系统资源, 调用close方法后控件对象将不可使用.
setFlash: 操作闪光灯
void obj.setFlash(open);
设置扫码识别控件在扫码时是否开启摄像头的闪光灯, 默认值为不开启闪光灯
open: (Boolean)是否开启闪光灯
可取值true或false, true表示打开闪光灯, false表示关闭闪光灯
setStyle: 设置扫码识别控件的样式
void bc.setStyle(styles);
用于动态更新扫码识别控件的显示样式参数
styles: (BarcodeStyles)要更新的样式参数
var barcode = null;
// 创建Barcode扫码控件
function createBarcode() {
if(!barcode){
barcode = plus.barcode.create('barcode', [plus.barcode.QR], {
top:'100px',
left:'0px',
width: '100%',
height: '500px',
position: 'static'
});
plus.webview.currentWebview().append(barcode);
}
barcode.start();
}
// 更新Barcode扫码控件
function updateBarcode() {
barcode.setStyle({
top:'200px' // 调整扫码控件的位置
});
}
start: 开始扫码识别
说明:
调用设备的摄像头在控件中预览, 并获取捕获数据进行扫码识别, 当识别出条形码(二维码)数据时触发onmarked事件返回扫码结果.
参数:
optons: (BarcodeOptions)(可选)扫码识别的参数
通过此参数可设置是否获取扫码成功的条码截图等.
onmarked: 扫码识别成功事件
void bc.onmarked = function(type,code,file){
}
说明: BarcodeSuccessCallback类型
扫码识别控件成功识别到条码(二维码)数据时触发的事件, 并返回扫码结果.
onerror: 扫码识别错误事件
说明: BarcodeErrorCallback类型
扫码识别控件在扫码过成功发生错误时触发的事件, 并返回错误信息
interface plus.barcode.BarcodeStyles{
attribute String background;
attribute String frameColor;
attribute String scanbarColor;
attribute String top;
attribure String left;
attribure String width;
attribure String height;
attribure String position;
}
说明:
设置Barcode扫码控件的样式, 如扫码框、扫码条的颜色等
属性: