在cordova插件中获取onCreateOptionsMenu

时间:2014-03-14 11:40:07

标签: android cordova

我想用cordova构建一个Android应用程序。在这个应用程序中,我们使用(本机)操作栏,并希望从cordova插件添加按钮。我有一个关于如何在我的插件中获取onCreateOptionsMenu事件的问题。我需要它,因为插件使用活动按钮接收数据(取决于每个视图)。有没有办法在我的插件中执行此操作?

/*
 * Hook in Cordova for menu plugins
 *
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    this.postMessage("onCreateOptionsMenu", menu);
    return super.onCreateOptionsMenu(menu);
}

我看到他们在他们的CordovaActivity.java中有这样的东西,但我不知道如何在我的插件中收到这个?

请帮助我,

谢谢你:)

2 个答案:

答案 0 :(得分:1)

我认为,根据我的理解,您希望为混合应用程序添加本机功能吗?因此,您需要为您的案例使用cordova.exec API。

http://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v610/06_05_Android_-_Adding_native_functionality_to_hybrid_application_with_Apache_Cordova_plugin.pdf

首先需要在config.xml中声明自定义插件

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

使用Java代码实现插件

public class CustomPlugin extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) 
            throws JSONException {

        if (action.equals("sayHello")){
            try {
                String responseText = "Hello world, " + args.getString(0);
                callbackContext.success(responseText);
            } catch (JSONException e){
                callbackContext.error("Failed to parse parameters");
            }
            return true;
        }

        return false;
    }
}

从JavaScript调用插件

function initial(){
    var name = $("#NameInput").val();
    cordova.exec(sayHelloSuccess, sayHelloFailure, "CustomPlugin", "sayHello", [name]);
}

function sayHelloSuccess(data){
    alert("OK: " + data);
}

function sayHelloFailure(data){
    alert("FAIL: " + data);
}

答案 1 :(得分:1)

您看到了CordovaPlugin.onMessage(String id, Object data)吗?

https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/CordovaPlugin.java#L140

我认为您可以在自定义插件中实现此方法并侦听"onCreateOptionsMenu"消息ID,然后操作选项菜单?

我之前没有尝试过这样的事情,但我认为这可能就是它的完成方式。