2013-07-03 116 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