Phonegap,插件exec函数似乎没有被调用

时间:2014-08-27 19:24:41

标签: javascript android cordova plugins

我开始使用PhoneGap,尝试编写我的第一个Android插件。我基于文档中的Echo示例。它编译和安装,但对exec的调用似乎不起作用。任何人都可以提出什么问题? index.html,Java代码和config.xml如下所示。我得到警告消息"运行exec"但没什么。

<html>
    <head>
        <meta charset="utf-8" />
        <meta name="format-detection" content="telephone=no" />
        <!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 -->
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
        <link rel="stylesheet" type="text/css" href="css/index.css" />
        <meta name="msapplication-tap-highlight" content="no" />
        <title>PhoneGap Test App.</title>
        <script type="text/javascript">
        </script>
    </head>
    <body>
        <div class="app">
            <h1>Apache Cordova</h1>
            <div id="deviceready">
                <p class="event listening">Connecting to Device</p>
                <p class="event received">Device is Ready</p>
                <a onclick="runPlugin()" href="javascript:void(0);">Run Plugin</a><br>
            </div>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
        <script type="text/javascript">
            app.initialize();

            function runPlugin() {
                alert('running exec')
                exec(function(result){ alert('ok: '+result);}, function(err){ alert('Error: '+err);}, 'Echo', 'echo', ['fred']);
                alert('exec has run')
            }
        </script>
    </body>
</html>

<html> <head> <meta charset="utf-8" /> <meta name="format-detection" content="telephone=no" /> <!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 --> <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> <link rel="stylesheet" type="text/css" href="css/index.css" /> <meta name="msapplication-tap-highlight" content="no" /> <title>PhoneGap Test App.</title> <script type="text/javascript"> </script> </head> <body> <div class="app"> <h1>Apache Cordova</h1> <div id="deviceready"> <p class="event listening">Connecting to Device</p> <p class="event received">Device is Ready</p> <a onclick="runPlugin()" href="javascript:void(0);">Run Plugin</a><br> </div> </div> <script type="text/javascript" src="cordova.js"></script> <script type="text/javascript" src="js/index.js"></script> <script type="text/javascript"> app.initialize(); function runPlugin() { alert('running exec') exec(function(result){ alert('ok: '+result);}, function(err){ alert('Error: '+err);}, 'Echo', 'echo', ['fred']); alert('exec has run') } </script> </body> </html>

package org.apache.cordova.plugin;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * This class echoes a string called from JavaScript.
 */
public class Echo extends CordovaPlugin {

    /**
     * Executes the request and returns PluginResult.
     *
     * @param action        The action to execute.
     * @param args          JSONArry of arguments for the plugin.
     * @param callbackId    The callback id used when calling back into JavaScript.
     * @return              A PluginResult object with a status and message.
     */
    public PluginResult execute(String action, JSONArray args, String callbackId) {
        try {
            if (action.equals("echo")) {
                String echo = args.getString(0); 
                if (echo != null && echo.length() > 0) { 
                    return new PluginResult(PluginResult.Status.OK, echo);
                } else {
                    return new PluginResult(PluginResult.Status.ERROR);
                }
            } else {
                return new PluginResult(PluginResult.Status.INVALID_ACTION);
            }
        } catch (JSONException e) {
            return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
        }
    }
}

package org.apache.cordova.plugin; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.PluginResult; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /** * This class echoes a string called from JavaScript. */ public class Echo extends CordovaPlugin { /** * Executes the request and returns PluginResult. * * @param action The action to execute. * @param args JSONArry of arguments for the plugin. * @param callbackId The callback id used when calling back into JavaScript. * @return A PluginResult object with a status and message. */ public PluginResult execute(String action, JSONArray args, String callbackId) { try { if (action.equals("echo")) { String echo = args.getString(0); if (echo != null && echo.length() > 0) { return new PluginResult(PluginResult.Status.OK, echo); } else { return new PluginResult(PluginResult.Status.ERROR); } } else { return new PluginResult(PluginResult.Status.INVALID_ACTION); } } catch (JSONException e) { return new PluginResult(PluginResult.Status.JSON_EXCEPTION); } } }

0 个答案:

没有答案