从js调用带有Phonegap 3.0的活动方法的最佳方法
Posted
技术标签:
【中文标题】从js调用带有Phonegap 3.0的活动方法的最佳方法【英文标题】:Best way to call activity Method with Phonegap 3.0 from js 【发布时间】:2013-09-04 06:10:11 【问题描述】:我正在尝试使用 MainActivity 中的本机方法从 phonegap 中的 index.html 拨打电话。
我正在使用 phonegap 3.0 和 android 4.3 平台。我在this 帖子上尝试了second answer,但它不适用于这个版本。
我想知道解决此问题的最佳方法是什么?
【问题讨论】:
【参考方案1】:您可以创建一个自定义插件来从本机端调用任何方法。创建一个单独的 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。
【讨论】:
感谢@suprnova,您的回答很有帮助,也许它适用于以前的版本,但我注意到我使用的是最新版本的 phonegap (3.0),我对此进行了编码,但无法正常工作。我收到这个错误 exec() 调用未知插件,我在这里找到了类似的东西 ***.com/questions/17974301/… 你说得对,这不适用于PhoneGap 3.0,但我认为这是因为我在上一个答案中使用的插件映射已被弃用。但是,我已经使用 PhoneGap 3.0 映射更新了我的答案。本质上,config.xml 中的 '<feature>
。execute()
方法中调用它。我拥有callNativeMethod()
的唯一原因是您可以使用execute()
方法委托给其他方法。因此,在if-else
语句中,您可以为其他方法添加更多子句。如果您只调用一种方法,则可能值得只使用execute()
方法。【参考方案2】:
完成上述答案的所有内容后,您还需要在 res/xml/config.xml 中添加插件以使其工作
<plugin name="PluginName" value="com.namespace.PluginName"/>
</plugins>
标签之前
【讨论】:
以上是关于从js调用带有Phonegap 3.0的活动方法的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
如何从 InAppBrowser 中调用 Phonegap 插件?
使用带有 HTML5 和 jquery 的 phonegap 1.3.0 创建 android 应用程序时出现无限弹出错误?