Android上的Cordova条形码扫描仪 - 取消扫描并返回应用程序

时间:2015-07-28 11:21:54

标签: android cordova barcode-scanner

我们有一款适用于Android设备的Cordova应用,它使用条形码扫描程序插件。应用程序本身在设备就绪时覆盖默认的Android后退按钮:

document.addEventListener("backbutton", onBackKeyDown, false);

问题是当用户通过按后退按钮取消扫描时,相机关闭,应用程序显示webview,然后启动"后退按钮" event(即调用onBackKeyDown函数)。好像在webview本身上按下后退按钮而不是扫描活动。 我们尝试了一些替代方案,例如 - 在开始扫描之前,删除事件监听器:

function startScan() {

    document.removeEventListener("backbutton", onBackKeyDown, false);   
    cordova.plugins.barcodeScanner.scan(    
....

但它没有帮助。 我们不能在插件本身上覆盖它,因为它不是一个活动。这意味着我们必须在JavaScript上进行。

大多数人都赞赏任何解决方案。

4 个答案:

答案 0 :(得分:0)

你还在吗?我自己的后退按钮有问题... 我也使用条码扫描器插件进行phonegap,并为后退按钮设置事件监听器。

我最终做的是添加一个标志,我在每次扫描时设置为true,然后每当调用onBackKeyDown函数时 - 如果为true,则重置为false,而不执行其余的函数...

var in_barcode_scan = false;
function onBackKeyDown() {
    if (in_barcode_scan) {
        in_barcode_scan = false;
    } else {
        //do whatever you need when a legit back button is triggered.
    }
}
function startScan() {
    in_barcode_scan = true;
    cordova.plugins.barcodeScanner.scan(.....
}

我现在自己有其他问题(取消条形码扫描程序会杀死其他一些事件听众),但这应该可以帮到你......

Jospeh。

答案 1 :(得分:0)

这对我有用,我添加了一个消息,只有通过验证字段的警报取消了扫描仪" result.text]"像这样:

function fileViewSuccess(result) {
console.log("We got a barcode Result: " + result.text);
if(result.cancelled == true){
alert("Was cancelled");
}else{
///do something...
}
}

答案 2 :(得分:0)

如果仍然有人面对此问题(使用android 9和条形码扫描仪) 我设法通过在接收到取消时注册“后退按钮”事件监听器来传递它,并在一秒钟后释放事件监听器。 我的“后退按钮”处理程序什么也不做,只是返回false,因此导航不会发生。 该侦听器仅在android上运行,这对于解决此问题很有帮助。

因此,当从条形码插件获取“取消”时,只需调用以下“ blockBack”功能即可。

function blockBack(){

// stop back button (for 1 s)
// used by barcode camera (when canceling and returnin back)
// was sending the back event to the router, and left the screen

document.addEventListener("backbutton", onBackKeyDown, false);

setTimeout(function(){
  document.removeEventListener("backbutton", onBackKeyDown, false)
}, 1000)

function onBackKeyDown() {
   // swallow the back button - do nothing
   return false;
}

}

答案 3 :(得分:0)

通常是基于观察者的离子作品中的后退按钮。暂时删除它们然后重新分配将阻止页面转到上一页。这对我有用。只需按照下面的代码。 (这是有角度的。只需检查与该块等效的 javascript)

var observers=this.platform.backButton.observers;
this.platform.backButton.observers=[]; //empty array
this.barcode.scan(“Scanning”).then((data)=>{
setTimeout(()=>{this.platform.backButton.observers=observers},500); // important to provide some time to close barcode
});