从java-android在控制器中调用javascript方法

从java-android在控制器中调用javascript方法,javascript,android,angularjs,cordova,Javascript,Android,Angularjs,Cordova,我正在创建一个混合的anrdroid应用程序,它使用cordova、ionic和angular。我试图在本机java中单独实现条形码扫描,并且我能够使用JavaScriptInterface从javascript调用java方法。但是我无法将java方法的返回值传递给javascript。有人能在这方面提供帮助吗?当您使用ionic project时,您不需要在本机java代码中实现条形码扫描仪。因为cordova已经有很多插件了。 对于条形码扫描,您最好使用ionic/cordova条形码扫描

我正在创建一个混合的anrdroid应用程序,它使用cordova、ionic和angular。我试图在本机java中单独实现条形码扫描,并且我能够使用JavaScriptInterface从javascript调用java方法。但是我无法将java方法的返回值传递给javascript。有人能在这方面提供帮助吗?

当您使用ionic project时,您不需要在本机java代码中实现条形码扫描仪。因为cordova已经有很多插件了。 对于条形码扫描,您最好使用
ionic/cordova
条形码扫描插件,这将使您的工作更轻松

但对于您当前的场景:

扫描图像时,将获得图像文件路径。将该路径设置为java活动类中的实例变量。 在您的视图中,使用setInterval计时器并调用javaInterface方法,该方法将返回文件路径。 如果文件路径getter接口返回值,则清除java实例变量和时间间隔

下面是一个示例代码:

@JavascriptInterface
        public void scanBarCode() {
            Intent intent = new Intent(
                    "com.google.zxing.client.android.SCAN");
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE,PRODUCT_MODE");
            startActivityForResult(intent, 0);
        }

 /** Read barcode from ZXing library */
        @JavascriptInterface
        public String getBarCode() {
            return (barcode!=null ? barcode : "");
        }
在onActivityResult的
中,您将返回图像url

public void onActivityResult(int requestCode, int resultCode, Intent intent) 
现在在您的JS中:

var barcodeTimer = setInterval(function () {
    var barcode = Android.getBarCode();
    if (barcode != "") {
        // set it to your $scope
        $scope.$apply();
        clearInterval(barcodeTimer);
    }
}, 2000);

如果您使用的是cordova,则需要使用插件接口。这正是它的目的。