如何从cordova 3.x调用本机函数

时间:2014-07-11 13:56:58

标签: android cordova webview cordova-3 cordova-2.0.0

如何通过cordova / phonegap webview调用本机功能,例如展示广告。

编辑:好的我非常喜欢它而且我会为所有不知道如何做的人写一些步骤(只是为了节省你一生中的2天:D)

A)如果您只有cordova / phonegap,并希望从js打电话,请执行以下操作:

1)将以下代码替换为现有的DroidGap活动。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.init(); // Calling this is necessary to make this work
    appView.addJavascriptInterface(this, "MainActivity");

    /* "this" points the to the object of the current activity. "MainActivity" is used to refer "this" object in JavaScript as in Step 3. */

    super.loadUrl("file:///android_asset/www/index.html");
}

2)在当前(this)活动中添加自定义函数,如下所示。

@JavascriptInterface
public void customFunctionCalled() {
    Log.e("Custom Function Called", "Custom Function Called");
}

3)现在从HTML / JavaScript代码中调用此函数,如下所示。

 window.MainActivity.customFunctionCalled();

B.1)如果你在webview中实现了cordova / phonegap并希望从js调用,请执行以下操作: (并希望调用正常功能)

1)将其添加到主java文件中:

JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");

2)声明类JavaScriptInterface:

public class JavaScriptInterface {
    private Activity activity;

    public JavaScriptInterface(Activity activiy) {
        this.activity = activiy;
    }

    @JavascriptInterface
    public void showLog(){
        Log.v("blah", "blah blah");
    }

}

3)用`window.JSInterface.showLog();

从js中调用它

B.2)如果您在网络视图中实现了cordova / phonegap并希望从js调用(并希望调用UI功能,如吐司),请执行以下操作:

1)将其添加到主java文件中:

JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");

2)声明类JavaScriptInterface:

public class JavaScriptInterface {
    private Activity activity;

    public JavaScriptInterface(Activity activiy) {
        this.activity = activiy;
    }

    @JavascriptInterface
    public void myFunction()
    {
        activity.runOnUiThread(new Runnable() {
            public void run() {
                //Code that interact with UI
                showToast();
            }
        });

    }

}

3)在下面添加toast功能:

public void showToast(){
    Toast.makeText(getApplicationContext(), "this is my Toast message!!! =)",
               Toast.LENGTH_LONG).show();
}

4)用`window.JSInterface.myFunction();

调用它

如果您需要一个使用UI的函数,您需要将函数包装到activity.runOnUiThread中,以便可以从js调用它。

*如果你想从java调用jquery方法,请执行以下操作:

爪哇:

cordova_webview.loadUrl("javascript:window.functionn()");

使用Javascript:

window.function = punish;

度过美好的一天!

1 个答案:

答案 0 :(得分:0)

在.java文件中

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    super.init(); // Calling this is necessary to make this work

    appView.addJavascriptInterface(this, "MainActivity");

    super.loadUrl(Config.getStartUrl());

}

在javascript中

window.MainActivity.customFunctionCalled();

这仅适用于TargetSDK< 17。需要设置androidManifest.xml targetSDK< 17.对于TargetSDK> = 17,我猜您需要创建一些自定义插件。我现在使用此过程降低目标SDK。