繁体   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