做ionic项目,使用BarcodeScanner插件扫二维码遇到的奇葩问题:在Android机上运行时,经常偶尔抽风,会调用两次扫码,然后取消扫码,但是在ios上运行时还比较正常
$scope.scanQrCode = function() {
$cordovaBarcodeScanner
.scan()
.then(function(barcodeData) {
if ( barcodeData.cancelled ){
alert("二维码扫码取消");
}else{
var tradeQrCode = barcodeData.text;
if ( (/\d{16};\d{4}/g).test(tradeQrCode) ){
alert("扫码成功"+tradeQrCode.split(";")[0]);
}else{
$ionicPopup.alert({
title:"失败",
template:"二维码信息有误:"+tradeQrCode+",请重新扫描。",
okText: '确定', // String (默认: 'OK')。OK按钮的文字。
okType: 'item-customer-bg-darkred', // String (默认: 'button-positive')。OK按钮的类型。
});
}
}
}, function(error) {
$ionicPopup.alert({
title:"失败",
template:"扫描二维码不成功。",
okText: '确定', // String (默认: 'OK')。OK按钮的文字。
okType: 'item-customer-bg-darkred' // String (默认: 'button-positive')。OK按钮的类型。
});
});
于是我用笨办法,在扫码结束后立即alert一些信息,这样就正常了
......
.then(function(barcodeData) {
alert("扫码完毕");
if ( barcodeData.cancelled ){
......
$scope.scanQrCode = function() {
$cordovaBarcodeScanner
.scan()
.then(function(barcodeData) {
$timeout(funcion(){
if ( barcodeData.cancelled ){
alert("二维码扫码取消");
}else{
var tradeQrCode = barcodeData.text;
if ( (/\d{16};\d{4}/g).test(tradeQrCode) ){
alert("扫码成功"+tradeQrCode.split(";")[0]);
}else{
$ionicPopup.alert({
title:"失败",
template:"二维码信息有误:"+tradeQrCode+",请重新扫描。",
okText: '确定', // String (默认: 'OK')。OK按钮的文字。
okType: 'item-customer-bg-darkred', // String (默认: 'button-positive')。OK按钮的类型。
});
}
}
}, 500);
}, function(error) {
$ionicPopup.alert({
title:"失败",
template:"扫描二维码不成功。",
okText: '确定', // String (默认: 'OK')。OK按钮的文字。
okType: 'item-customer-bg-darkred' // String (默认: 'button-positive')。OK按钮的类型。
});
});