【问题标题】:QuickBlox chat messages listenerQuickBlox 聊天消息监听器
【发布时间】:2015-04-03 13:32:56
【问题描述】:

我使用 2.1.1 Android SDK 并希望通知用户有关应用程序收到的新传入消息。

这就是问题所在。我想在用户启动应用程序时通知他,因此我想在“用户登录”阶段添加监听器,如 sn-p 所示:

        QBAuth.createSession(user, new QBEntityCallbackImpl<QBSession>() {
        @Override
        public void onSuccess(QBSession session, Bundle args) {
            // login to Chat
            chatService.login(user, new QBEntityCallbackImpl() {
                @Override
                public void onSuccess() {
                    HERE I WOULD LIKE A CODE TO START LISTEN FOR ALL INCOMING MESSAGES

根据http://sdk.quickblox.com/android/com/quickblox/chat/listeners/QBMessageListenerImpl.html 听众需要聊天 QBChat 来启动。但我想收听所有消息,而不仅仅是在特定聊天中。

长话短说,如何实现一个消息监听器来捕获所有发送给登录用户的消息?

【问题讨论】:

  • 如果您找到解决方案,请分享代码。

标签: java android quickblox


【解决方案1】:

@纳文库马尔

在我的开始活动中,我启动侦听器以捕获 XMPP 连接。

    private void XMPPConnectionListener() {
    XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() {

        @Override
        public void connectionCreated(XMPPConnection connection) {
            GlobalVar.XMPPConn = connection;
            ChatHelper.idleMessageListener(StartActivity.this);

        }
    });

}

然后我使用 GlobalVar.XMPPConn 捕获数据包并解析它们:

    public static void idleMessageListener(final Activity activity) {
    PacketListener myListener = new PacketListener() {
        public void processPacket(final Packet packet) {
            final Integer userID = Integer.parseInt(returnIDFromPacket(packet.getFrom()));
            final String body = returnBodyFromPacket(packet.toString());
            if (!GlobalVar.currentOpponent.equals(userID) && !body.isEmpty()) {
                activity.runOnUiThread(new Runnable() {
                    public void run() {
                        QBUsers.getUser(userID, new QBEntityCallbackImpl<QBUser>() {
                            @Override
                            public void onSuccess(final QBUser user, Bundle args) {
                                sendNotification(activity, user, body);
                            }

                            @Override
                            public void onError(List<String> errors) {
                                Log.d(TAG, errors.toString());
                            }
                        });
                    }
                });

            }
        }
    };
    PacketFilter filter = new MessageTypeFilter(Message.Type.chat);

    if (GlobalVar.XMPPConn != null) {
        GlobalVar.XMPPConn.addPacketListener(myListener, filter);
    }
}

所以逻辑是捕获由 QuickBlox 触发的连接,然后将数据包侦听器附加到它。

【讨论】:

  • 你能解释一下代码吗?因为不明白GlobalVar是什么意思,怎么调用XMPPConnectionListener等,请多解释代码。
猜你喜欢
  • 1970-01-01
  • 2014-07-26
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多