尝试从Java源代码调用JavaScript函数

时间:2013-12-10 14:32:05

标签: java javascript cordova

我正在开发一个Android应用程序,通过使用Zxing Barcode reader Plugin读取条形码。

在插件中有一个名为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);
        }
    );
}

请告诉我如何实现这一目标。

2 个答案:

答案 0 :(得分:1)

假设:

您需要做的就是从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作为依赖。

答案 1 :(得分:0)

您可以使用CordovaWebView中定义的sendJavascript函数在Android上从本机端调用Javascript代码。

在你的情况下,你会做这样的事情。考虑到您要调用以下函数:

function scanSuccessCallback(result) { //do something }

在插件的原生端:

this.webView.sendJavascript("scanSuccessCallback('the result');");