2013-07-03 114 views
1

我在GoogleCloudMessaging(GCM)的幫助下構建一個聊天應用程序。我可以發送和接收消息。我的問題是,當我同時接收來自多個設備的消息時,所有這些消息都會附加到我的廣播接收器類中的相同列表視圖中。我如何根據發件人分開郵件並將當前聊天消息追加到列表視圖中。並根據發件人單獨通知其他郵件,並且當我點擊通知時,它應該根據發件人打開相同的郵件列表視圖。android GCM從多個設備接收消息

任何人都可以給我一個這樣做的有效方法。如果您有任何示例代碼來處理這種情況,請發佈代碼。

我當前的代碼:

public class Serious extends BroadcastReceiver { 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     String action=intent.getAction(); 
     if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) 
     { 
      String registrationID=intent.getStringExtra("registration_id"); 
      // Log.i("uo",registrationID); 
      String error=intent.getStringExtra("error"); 
      String unregisterd=intent.getStringExtra("unregistered"); 

     } 
     else if(action.equals("com.google.android.c2dm.intent.RECEIVE")) 
     { 
      String data1=intent.getStringExtra("data1"); 
      String data2=intent.getStringExtra("data2"); 
      addNewMessage(new Message(data2, false)); 

      /* PendingIntent contentIntent = PendingIntent.getActivity(context, 0, 
         new Intent(context, MainActivity.class), 0); 

       NotificationCompat.Builder mBuilder = 
         new NotificationCompat.Builder(context) 
       .setSmallIcon(R.drawable.ic_launcher) 
         .setContentTitle("My Notification") 
         .setDefaults(Notification.DEFAULT_SOUND) 
         .setAutoCancel(true) 
         .setContentText(data1+data2); 
       mBuilder.setContentIntent(contentIntent); 


       NotificationManager mNotificationManager = 
        (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
       mNotificationManager.notify(1, mBuilder.build());*/ 



     } 

    } 
    void addNewMessage(Message m) 
     { 
      MainActivity.messages.add(m); 
      MainActivity.adapter.notifyDataSetChanged(); 
      //MainActivity.getListView().setSelection(MainActivity.messages.size()-1); 
     } 
} 

回答

0

你應該在你的GCM訊息傳遞含有發件人ID的參數。然後,當您處理到達的消息時,使用該發件人ID來決定添加該消息的位置。爲了顯示多個通知,傳遞不同的int值來通知。目前你總是通過1,所以一個新的通知覆蓋舊的通知。

+0

我需要在移動數據庫上存儲消息來維護堆棧,或者是否有gcm中的任何api來通過傳遞registrationid –

+0

來檢索消息,並且如果我從不同的registrationid的不同消息可以顯示通知如果可以的話,請提供樣本代碼。如果有任何完整的聊天應用程序與多個用戶發佈該項目或鏈接給我,這樣我就可以一次處理來自多個註冊ID(朋友)的數據。請提供一些關於此主題的幫助 –

+0

@madanV您必須將消息存儲在移動數據庫中,或在應用啓動時從服務器加載它們。 GCM中沒有檢索舊消息的API(它們在交付後不存儲在GCM服務器中)。 – Eran