6

我正在尝试使用 MainActivity 中的本机方法从 phonegap 中的 index.html 拨打电话。

我正在使用 phonegap 3.0 和 android 4.3 平台。我在这篇文章中尝试了第二个答案,但它不适用于这个版本。

我想知道解决这个问题的最佳方法是什么?

4

2 回答 2

11

您可以创建一个自定义插件来从本机端调用任何方法。创建一个单独的 JavaScript 文件,例如 customplugin.js,并将其放入其中:

var CustomPlugin = {};

CustomPlugin.callNativeMethod = function() {
    cordova.exec(null, null, "CustomPlugin", "callNativeMethod", []);
};

现在在本机 Java 端,创建一个新类并将其命名为 CustomPlugin.java,然后添加:

package com.yourpackage;

import org.apache.cordova.CordovaWebView;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaInterface;
import org.apache.cordova.api.CordovaPlugin;

import com.yourpackage.MainActivity;

public class CustomPlugin extends CordovaPlugin
{
    private static final String TAG   = "CustomPlugin";

    private CallbackContext callbackContext = null;
    private MainActivity activity = null;

    /** 
     * Override the plugin initialise method and set the Activity as an 
     * instance variable.
     */
    @Override
    public void initialize(CordovaInterface cordova, CordovaWebView webView) 
    {
        super.initialize(cordova, webView);

        // Set the Activity.
        this.activity = (MainActivity) cordova.getActivity();
    }

    /**
     * Here you can delegate any JavaScript methods. The "action" argument will contain the
     * name of the delegated method and the "args" will contain any arguments passed from the
     * JavaScript method.
     */
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException 
    {
        this.callbackContext = callbackContext;

        Log.d(TAG, callbackContext.getCallbackId() + ": " + action);

        if (action.equals("callNativeMethod")) 
        {
            this.callNativeMethod();
        }
        else
        {
            return false;
        }

        return true;
    }

    private void callNativeMethod()
    {
        // Here we simply call the method from the Activity.
        this.activity.callActivityMethod();
    }
}

确保通过添加以下行来映射 config.xml 文件中的插件:

...
<feature name="CustomPlugin">
    <param name="android-package" value="com.yourpackage.CustomPlugin" />
</feature>
...

现在从你的 index.html 调用插件,你可以简单地调用你的 JavaScript 方法:

CustomPlugin.callNativeMethod();

使用此方法将允许您方便地设置许多自定义方法。有关更多信息,请查看此处的 PhoneGap 插件开发指南。

于 2013-09-04T09:18:25.413 回答
2

完成上述答案的所有内容后,您还需要在 res/xml/config.xml 中添加插件以使其工作

<plugin name="PluginName" value="com.namespace.PluginName"/>

</plugins>标签前

于 2014-05-01T19:51:40.900 回答