Слушател на чат съобщения QuickBlox

Използвам 2.1.1 Android SDK и искам да уведомя потребителя за нови входящи съобщения, получени от приложението.

Тук е въпросът. Бих искал да уведомя потребителя, когато стартира приложението, поради което бих искал да добавя слушател на етапа на „влизане на потребителя“, както е показано във фрагмента:

        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, за да започне. Но бих искал да слушам всички съобщения, не само в конкретен чат.

Накратко, как да внедрите слушател на съобщения, който да улавя всички съобщения, адресирани до влязъл потребител?


person NBayaman    schedule 19.03.2015    source източник
comment
моля, споделете кода, ако намерите решението.   -  person Naveen Kumar    schedule 02.04.2015


Отговори (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, и след това да се прикачи слушател на пакети към нея.

person NBayaman    schedule 03.04.2015
comment
бихте ли обяснили малко повече кода? Тъй като не разбирам какво означава GlobalVar или как извиквате XMPPConnectionListener и т.н., моля, обяснете повече за кода. - person Kamalakannan J; 29.07.2015