簡體   English   中英

適用於Android的Phonegap Jabber插件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM