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)?