2013-05-20 2 views
4

Я провел немало исследований и не могу найти, почему это не работает. У меня есть приложение для Android на базе Кордовы в Eclipse под управлением Cordova 2.7.0. Я хочу создать простой плагин, который просто предупреждает пользователя о его завершении.Создание плагина helloWorld для Android с использованием Кордовы и Eclipse

Мой 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" /> 

и мой фактический Plugin HelloPlugin.java, который находится в SRC/COM/например/plugintest право рядом с MainActivity.java

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; 
    } 
} 

Любая помощь очень ценится!

ответ

3

Значение «HelloPlugin» в вашем файле config.xml должно указывать на пакет, в котором класс Java, так что Кордова может найти и выполнить код Java. Поэтому, если вы меняете <plugin name="HelloPlugin" value="org.apache.cordova.plugin.HelloPlugin" /> до <plugin name="HelloPlugin" value="com.example.plugintest.HelloPlugin" /> Я считаю, что это должно сработать.

+0

Обновленный мой конфигурационный файл и все еще не сигарой. Если это помогает оповещениям, которые я получаю, это «JS Working», а затем «Outside Call Working», а затем я ничего не получаю, даже сообщение об ошибке. –

+0

Когда я это делаю, я получаю «JS Working», «Outside call working», «Done!», Что ожидается, потому что вы никогда не получите возвращаемое значение (строка «Plugin Working» в вашем обратном вызове.) Считаю, что вы ничего не получаете от сообщения «Готово», у вас все еще может быть что-то испорченное в вашем конфиге. У меня были оба моих файла в 'com.example.plugintest', package, а строка в моем файле конфигурации была тем, что у меня было выше. Вы не видите _anything_ в журналах? – MBillau

+0

То, что я делал. Я думаю, что это связано с тем, что кордова не готова. Я играю с слушателем deviceready, но до сих пор не получаю этого, чтобы работать. Я принимаю ваш ответ, поскольку он, очевидно, работает на вас. Моя конфигурация такая же, как ваша. Поэтому я не знаю, почему это сработает для вас, а не для меня. Вы используете cordova 2.7? –

4

В этой строке

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]); 
    }