我正在尝试使用MainActivity中的本机方法通过phonegap中的index.html拨打电话。
我正在使用phonegap 3.0和android 4.3平台。我在second answer帖子上尝试了this,但它不适用于此版本。
我想知道解决这个问题的最佳方法是什么?
答案 0 :(得分: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插件开发指南here。
答案 1 :(得分:2)
完成上述答案中的所有内容后,您还需要在res / xml / config.xml中添加插件以使其正常工作
<plugin name="PluginName" value="com.namespace.PluginName"/>
在</plugins>
代码