[英]Phonegap jabber plugin for android
對於jabber支持,我使用庫Smack。 Android端口asmack。
我有SmackAPI類,該類實現MessageListener接口,並包含用於連接,登錄和發送消息的方法。 同時,此類包含方法:
@Override
public void processMessage(Chat chat, Message message) {
String from = message.getFrom();
String body = message.getBody();
System.out.println(String.format("Received message '%1$s' from %2$s", body, from));
this.recievedMessage = message;
}
它通過MessageListener接口提供。 此方法處理的所有新郵件。
我寫了jabber插件來連接,登錄並從phonegap發送消息。
我的問題:如何在javascript中收聽新消息?
我做的。 我不知道這是正確的方法,但是有效!
Cordova插件類:
public class SmackJabber extends CordovaPlugin {
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
this.cbContext = callbackContext;
switch (action) {
case LISTEN_MESSAGE:
res = new PluginResult(PluginResult.Status.NO_RESULT);
res.setKeepCallback(true);
cordova.getThreadPool().execute(new Runnable() {
@Override
public void run() {
String callbackId = cbContext.getCallbackId();
while (true) {
String msg = getMsg();
if (msg != null) {
res = new PluginResult(PluginResult.Status.OK, msg);
res.setKeepCallback(true);
CallbackContext cb = new CallbackContext(callbackId, webView);
cb.sendPluginResult(res);
}
}
}
});
cbContext.sendPluginResult(res);
break;
和簡單的JavaScript。 只需調用插件方法:
window.plugins.smackJabber.listenMessage(function(result) {
alert(result)
}, function(error) {
alert(error)
}
);
說明:我將插件方法稱為“ listenMessage”(通過動作“ LISTEN_MESSAGE”調用“ execute”方法)。 在那里,我從可運行的Cordova線程池啟動線程,在可運行的線程中,我得到了檢查消息的遞歸函數。 但是在開始運行之前,我必須采取調用方法execute的方法的callbackId。 另外,要從方法中退出,我將創建狀態為“ NO_RESULT”的新PluginResult並將其選項“ keepCallback”設置為true-這意味着該方法將在javascript中調用,以等待我的另一個回調結果。 收到消息后,我將基於callbackid和我的webview創建新的callbackcontext,將setKeepCallback設置為true以獲得對pluginresult的進一步可能的響應,將pluginresult的狀態為“ OK”的消息發送到callbackcontext。 就這樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.