1

我从 GCM 收到多条消息。当应用程序在前台或后台运行时,我没有问题,因为我使用广播接收器。但是,当应用程序未运行时,我希望将消息排队在 pendingIntent 中,并将其作为通知管理器通知的一部分。这样当用户点击通知时,mainActivity 就会启动并传递所有消息。我已经发布了下面的代码。

使用当前代码,我只能在活动的 onCreate 方法中接收 1 条消息,即最新消息。

总结一下需求

  1. 应用程序未运行。应用程序退出。
  2. 在将 Extra Field 设置为消息的每条收到的新消息上调用带有 pendingIntents 的通知
  3. 通知栏中只有一条通知消息(让我们假设在通知栏中看到“收到的消息数 3”)
  4. 现在用户点击通知
  5. 应用程序应该能够通过访问 pendingIntent 来读取所有 3 条消息

希望我能找到帮助!

// build intent
final Intent notificationIntent = new Intent(context,
        MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
        | Intent.FLAG_ACTIVITY_SINGLE_TOP);

notificationIntent.putExtra(CommonUtilities.EXTRA_MESSAGE, message);

notificationIntent.setAction("DUMMY");
// pending intent creation
int requestID = (int) System.currentTimeMillis();
// set intent so it does not start a new activity
final PendingIntent intent = PendingIntent.getActivity(context, requestID ,
        notificationIntent, 0);




// create notification using intent
final String title = context.getString(R.string.app_name);
Notification notification = new  NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(formattedMessage)
.setSmallIcon(icon)
.setDefaults(Notification.FLAG_AUTO_CANCEL|Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)                   

.setContentIntent(intent).build();


final NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, notification);



//Now in mainActivity:OnCreate 
//Receive

Bundle extras = getIntent().getExtras();
if (extras != null) {


    String inp = extras.getString(CommonUtilities.EXTRA_MESSAGE);

    if (inp != null ) {
        doSomething(inp);
    }
}
4

2 回答 2

0

伙计们最后我使用以下逻辑来解决我的问题

接收 Intent 时有一个本地数组。

如果挂起的 Intent 已经存在 ( FLAG_NO_CREATE ),则将新消息附加到数组并更新挂起的 Intent 这样,EXTRA 将在数组中包含旧 + 新消息 else 清除旧消息数组,因为通知已被清除。现在用 (FLAG_UPDATE CURRENT) End 添加新的 EXTRA

然后通知

现在,当用户单击单个通知时,将启动一个新活动。

在 MainActivity Oncreate 中,我读取了意图数据并进入一个循环,以及在应用程序未运行时我会错过的所有消息!

当然不知道如果用户长时间不点击通知,通知栏会有多沉重!

于 2013-01-26T07:05:40.447 回答
0

由于您是接收 GCM 传入消息的人,并且您是提出 的人Notification,因此您可以安排将 GCM 消息的详细信息存储在文件或数据库中,并由您安排显示当用户点击Notification.

于 2013-01-25T20:57:23.820 回答