【问题标题】:Creating a helloWorld plugin for Android using Cordova and Eclipse使用 Cordova 和 Eclipse 为 Android 创建一个 helloWorld 插件
【发布时间】:2013-05-20 19:50:27
【问题描述】:

我已经进行了大量研究,但似乎无法找到为什么这不起作用。我所拥有的是运行 Cordova 2.7.0 的 Eclipse 中基于 Cordova 的 Android 应用程序。我想构建一个简单的插件,它只在完成时提醒用户。

我的 index.html

    <head>
    <script type="text/javascript" src="cordova-2.7.0.js"></script>
    <script>
        window.func = function(str,callback){
            alert("Outside Call Working");
            cordova.exec(callback, function(err){alert(err)},"HelloPlugin","echo", [str]);
        }
        function callPlugin(str){
            alert("JS Working");
            window.func(str,function(){
                alert("Done!");
            });
        }
    </script>
</head>
<body>
    <h2>PluginTest</h2>
    <a onclick="callPlugin('Plugin Working!')">Click me</a>
</body>

我添加插件的 config.xml 行

<plugin name="HelloPlugin" value="org.apache.cordova.plugin.HelloPlugin" />

我的实际插件 HelloPlugin.java 位于 MainActivity.java 旁边的 src/com/example/plugintest 中

package com.example.plugintest;

import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;

public class HelloPlugin extends CordovaPlugin{

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        /*if(action.equals("echo")){
            String message = args.getString(0); 
            callbackContext.success(message);
            return true;
        }*/
        callbackContext.success(action);
        return true;
    }
}

非常感谢任何帮助!

【问题讨论】:

    标签: android eclipse plugins cordova


    【解决方案1】:

    在这一行

        window.func = function(str,callback){
            alert("Outside Call Working");
            cordova.exec(callback, function(err){alert(err)},"HelloPlugin","echo", [str]);
        }
    

    这样放

    window.func = function(str,callback){
            alert("Outside Call Working");
            cordova.exec(callback, function(err){alert(err)},"org.apache.cordova.plugin.HelloPlugin","echo", [str]);
        }
    

    【讨论】:

      【解决方案2】:

      config.xml 中“HelloPlugin”的值应该指向Java 类所在的包,这样Cordova 才能找到并执行Java 代码。所以如果你改变 &lt;plugin name="HelloPlugin" value="org.apache.cordova.plugin.HelloPlugin" /&gt;&lt;plugin name="HelloPlugin" value="com.example.plugintest.HelloPlugin" /&gt; 我相信它应该工作。

      【讨论】:

      • 更新了我的配置文件,仍然没有雪茄。如果它有助于我收到的警报是“JS Working”,然后是“Outside Call Working”,然后我什么也没有得到,甚至没有错误消息。
      • 当我这样做时,我得到“JS Working”、“Outside call working”、“Done!”,这是预期的,因为你永远不会得到返回值(回调中的“Plugin Working”字符串.) 我认为由于您没有收到任何“完成”消息,因此您的配置中仍然可能有一些问题。我的两个文件都在com.example.plugintest 包中,我的配置文件中的行就是我上面的内容。您在日志中没有看到 任何内容
      • 这就是我一直在做的。我认为这与科尔多瓦没有准备好有关。我正在使用 deviceready 侦听器,但仍然无法正常工作。我会接受你的回答,因为它显然对你有用。不过我的配置和你的一样。所以我不知道为什么它会为你而不是我工作。您使用的是科尔多瓦 2.7 吗?
      • 嗯,我什至没有意识到代码没有包含在 onDeviceReady() 检查中。我猜想在我有机会点击按钮之前,Cordova 正在加载。是的,我使用的是 2.7。我正在 Nexus 7 设备上进行测试,也许这会有所作为?您是否尝试过将所有内容包装在 onDeviceReady 函数中,如下所示:document.addEventListener('deviceready', onDeviceReady, false); function onDeviceReady(){window.func = function(str,callback){ alert("Outside Call Working"); cordova.exec(callback, function(err){alert(err)},"HelloPlugin","echo", [str]); } }
      • 是的。我什至尝试在 ondeviceready 中放置一个警报,例如 'document.addEventListener("deviceready", onDeviceReady, false);函数 onDeviceReady(){ alert("cordova"); }' 这甚至都行不通。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      相关资源
      最近更新 更多