单一通知,但应在启动应用时提供多个待处理意图 - Android

时间:2013-01-25 18:49:14

标签: android notifications push-notification android-pendingintent google-cloud-messaging

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

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

总结要求

  1. 应用程序未运行。 App退出。
  2. 对于收到的每条新消息,使用pending字段设置为消息
  3. ,使用pendingIntents调用notify
  4. 通知栏中只显示一条通知消息(让我们假设“通知栏中显示”收到的消息数量3“)
  5. 现在,用户点击通知
  6. 应用程序应该能够通过访问pendingIntent
  7. 来读取所有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);
        }
    }
    

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

如果待处理的意图已经存在(FLAG_NO_CREATE) 然后   使用新消息附加数组并更新挂起的Intent   这样,EXTRA将在数组中包含旧的+新消息 其他   清除旧的消息数组,因为通知已被清除。   现在添加新的EXTRA(FLAG_UPDATE CURRENT) 端

然后通知

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

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

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