我正在开发一个Android应用程序,以使用Zxing条码阅读器插件读取条码。

在插件中,有一个名为window.plugins.barcodeScanner的对象,我们使用该对象对条形码进行编码/解码。

我不想使用HTML来调用事物,而是希望从Java调用下面的Javascript函数[单击图像-将调用下面的函数]。

function scanCode(){
    window.plugins.barcodeScanner.scan(
        function(result){
            alert("Scanned Code: " + result.text
              + ". Format: " + result.format
              + ". Cancelled: " + result.cancelled);
        },
        function(error){
            alert("Scan failed: " + error);
        }
    );
}


请让我知道如何实现这一目标。

最佳答案

假设:


您已经从https://github.com/wildabeast/BarcodeScanner/tree/master/src/android设置了LibararyProject。
您的活动不是在扩展CordovaActivity,而是在扩展Activity。
您的主要目标实际上只是使用扫描仪。您只是想找到一种简单/快速的方法,并认为PG插件可以解决问题。


您所需要做的就是从https://github.com/wildabeast/BarcodeScanner/blob/master/src/android/com/phonegap/plugins/barcodescanner/BarcodeScanner.java中取出scan和onActivityResult方法以及一些帮助程序字符串,并将其放入活动中。您需要用自己的活动替换对cordova的引用。

最终结果可能如下所示:

public static final int REQUEST_CODE = 0x0ba7c0de;
private static final String SCAN_INTENT = "com.google.zxing.client.android.SCAN";

public void scan() {
    Intent intentScan = new Intent(SCAN_INTENT);
    intentScan.addCategory(Intent.CATEGORY_DEFAULT);
    this.startActivityForResult(intentScan, REQUEST_CODE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            String barcode = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            //Do whatever you need with the barcode here
        } else if (resultCode == Activity.RESULT_CANCELED) {
            // handle a canceled scan
        } else {
            // throw an error or something
        }
    }
}


如果这对您有用,那么您甚至不需要cordova作为依赖。

关于java - 尝试从Java源代码调用JavaScript函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20497172/

10-11 15:07