我收到来自GCM的多条消息。当应用程序运行前景或后台时我没有问题,因为我使用广播接收器。但是当应用程序未运行时,我希望将pendingIntent中的消息排队并将其作为通知管理器通知的一部分保留。因此,当用户点击通知时,将启动mainActivity并传递所有消息。我已经发布了以下代码。
使用当前代码,我能够在活动的onCreate方法中只接收1条消息,这是最新消息。
总结要求
希望我能找到帮助!
// 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);
}
}
答案 0 :(得分:0)
由于您是接收GCM传入消息的人,并且您是提出Notification
的人,因此您需要安排将GCM消息的详细信息存储在文件或数据库中,并且当用户点击Notification
时,您可以安排显示所有这些详细信息。
答案 1 :(得分:0)
伙计们最后我使用以下逻辑来解决我的问题
接收Intents时有一个本地数组。
如果待处理的意图已经存在(FLAG_NO_CREATE) 然后 使用新消息附加数组并更新挂起的Intent 这样,EXTRA将在数组中包含旧的+新消息 其他 清除旧的消息数组,因为通知已被清除。 现在添加新的EXTRA(FLAG_UPDATE CURRENT) 端
然后通知
现在,当用户点击单个通知时,会启动新活动。
在MainActivity Oncreate中我读取了意图数据并进入循环以及当应用程序未运行时我将错过的所有消息!
如果用户长时间没有点击通知,当然不知道通知栏上会有多重!