Javascript звонки с Android с помощью PhoneGap

У меня и приложение построено сPhoneGap, и я'я пытаюсь общаться сJavascript из нативного кода.

в моемDroidGap расширяющий класс:

@Override
public void onCreate(Bundle savedInstanceState) {
    Logger.log("oncreate");
    super.onCreate(savedInstanceState);
    super.init();
    super.appView.getSettings().setJavaScriptEnabled(true);
    super.appView.getSettings().setSupportZoom(true);
    super.appView.getSettings().setBuiltInZoomControls(true);
    super.appView.getSettings().setDisplayZoomControls(false);
    jsinterface = new CommunicationInterface(this, appView);
    super.appView.addJavascriptInterface(jsinterface, "communicationinterface"); 
}

интерфейс javascript:

public class CommunicationInterface {
    private WebView mAppView;
    private DroidGap mGap;

    public CommunicationInterface(DroidGap gap, WebView view)  {
        mAppView = view;
        mGap = gap;
    }

    public String getTestString() {
        return "teststring";
    }

    public void parse(Object o) {
        Logger.log(o);
    }
}

Javacript находится во внешнем файле (я создаю HTML-файл с этой строкой в:):header

Scripts.js

function sendToInterface() {
    alert("alert");
    var map = new Object();
    (...)
    window.communicationinterface.parse(map); //communication js -> android seems to work.
}

Я читал в других сообщениях, что этоМожно общаться между PhoneGap и Android, но, тем не менее, яМы не имели никакого успеха. Мне удалось создать предупреждение, но это было сloadUrl("javascript:alert('Alert');"), но я'Вы также читали, что не должнысделать, потому что этос чемsendJavascript() для (и это вызывает утечки, перезагрузки страницы и т. д.). Я'мы пытались выстрелить пару строк черезsendJavascript() метод, но безрезультатно:

sendJavascript("javascript:alert('Alert');")sendJavascript("javascript:sendToInterface();")sendJavascript("sendToInterface();")sendJavascript("window.sendToInterface();")

Как общаться с родными -> PhoneGap (или чточто не так с тем, что у меня уже есть)? Таким образом, другие посты и вопросы не имеютТ помог мне с этой конкретной проблемой.

Читать:

http://www.jumpbyte.com/2012/phonegap-native-to-javascript/PhoneGap: "сбой процессаMessage " невозможно отправить функцию javascript (Cordova 2.5.0)Связь между Android Java и PhoneGap Javascript? (хотя это другое направление, но яя пытаюсь сделать оба)http://www.intelligrape.com/blog/2013/01/31/using-sendjavscript-to-inject-javascript-into-android-phonegap-application/Phonegap - Android - вызов JavaScript из собственных причинКак вызвать функцию JavaScript из Android с помощью плагина PhoneGap

РЕДАКТИРОВАТЬ

Я написал рабочий проект:

Java часть

import org.apache.cordova.DroidGap;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.Bundle;
import android.util.Log;

public class App extends DroidGap {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.loadUrl("file:///sdcard/ds/index.html");
    System.out.println("loading from sdcard");
    Thread t = new Thread() {
      public void run() {
        try {
          for (int i = 0; i < 3; i++) {
            sleep(2000);
            sendValue("value " + i, "another vlaue " + i);
          }
        } catch (Exception e) {
          e.printStackTrace();
        }
      };
    };
    t.start();
  }

  public void sendValue(String value1, String value2) {

    System.out.println("sendvalue in app");
    JSONObject data = new JSONObject();
    try {
      data.put("value1", value1);
      data.put("value2", value2);
    } catch (JSONException e) {
      Log.e("CommTest", e.getMessage());
    }
    String js = String.format("window.plugins.appcomm.updateValues('%s');",
        data.toString());
    this.sendJavascript(js);
  }
}

import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class AppComm extends Plugin{

  private static AppComm instance;

  public AppComm () {
    instance = this;
  }

  public static AppComm getInstance() {
    return instance;
  }

  @Override
  public PluginResult execute(String action, JSONArray args, String callbackId) {
    System.out.println("in execute from appcomm");


    return null;
  }

  public void sendValue(String value1, String value2) {
    System.out.println("sendvalue in appComm");
    JSONObject data = new JSONObject();
    try {
      data.put("value1", value1);
      data.put("value2", value2);
    } catch (JSONException e) {
      Log.e("CommTest", e.getMessage());
    }
    String js = String.format(
        "window.plugins.commtest.updateValues('%s');",
        data.toString());
    this.sendJavascript(js);
  }
}

Рез / XML / plugins.xml


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    

cordova.xml



     
    
    

Index.html header


    
    
    
    
    
    
    
    
    
       
    
    var AppComm=function(){};

    AppComm.prototype.updateValues=function(a){
    var map = new Object();
    map["X1"] = "hallo";
    map["X2"] = "hi";
    cordova.exec(null, null, null);
    };

    cordova.addConstructor(function(){cordova.addPlugin("appcomm",new AppComm)});
    

Одной из проблем было то, что JavaScript был в отдельном файле (я думаю, что это была одна из проблем). Если это не такМожно спросить, как я могу правильно перезвонить Java и с какими значениями? Как реализовать метод execute и как его вызвать (I 'мне действительно плохо в JQuery)?

Ответы на вопрос(2)

Ваш ответ на вопрос