2015-03-19 233 views
2

我使用2.1.1 Android SDK並希望通知用戶有關由應用程序收到的新傳入消息。QuickBlox聊天消息監聽器

這是問題。我想通知用戶,他推出的應用程序,因此,我想在「用戶登錄」的階段添加監聽器,因爲它的片斷真實所示:

 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啓動。但我想傾聽所有的消息,不僅在特定的聊天中。

長話短說,如何實現一個消息偵聽器來捕獲所有發送給登錄用戶的消息?

+0

如果您找到解決方案,請分享此代碼。 – 2015-04-02 04:47:37

回答

2

@Naveen庫馬爾

在我開始活動我啓動監聽趕上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解僱的連接,然後附加一個數據包監聽到它。

+2

你能解釋一下代碼嗎?因爲我不明白GlobalVar是什麼意思,或者你怎麼稱呼XMPPConnectionListener等,請詳細解釋代碼。 – 2015-07-29 06:40:15