Android GCM多次推送通知,状态栏中有一个图标

时间:2013-07-08 08:18:37

标签: android push-notification android-pendingintent

我的应用想要在状态栏中的一个图标中捆绑多个推送通知。

单击图标时,应用程序应收到多个通知,以便在列表视图模式下显示它们。

stackoverflow中已经有一些条目接近我想要获得的内容,它确实让我在处理挂起的意图和通知标志方面有了更好的洞察力,但它们并没有完全解决我的问题。

第一步:创建通知:

在stackoverflow中的一些条目之后,我做了以下假设:

  • 一个通知ID(notifyID),只能获取状态栏中的一个图标
  • 待处理意图中的唯一requestId参数,用于区分同一通知ID中的各种通知请求
  • 通知意图中使用的FLAG_ACTIVITY_NEW_TASK和待处理意图中使用的FLAG_UPDATE_CURRENT

     Notification notification;
     int icon = R.drawable.ic_launcher;
     int smallIcon = R.drawable.ic_launcher;
     int notifyID = 1;
     long when = System.currentTimeMillis();
     int requestID = (int) System.currentTimeMillis();
    
     NotificationManager notificationManager = (NotificationManager)
     context.getSystemService(Context.NOTIFICATION_SERVICE);   
    
     Intent notificationIntent = new Intent(context, NewActivity.class);
    
     notificationIntent.putExtra("new_message", message);
    
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
     PendingIntent contentIntent = PendingIntent.getActivity(context, requestID,    
       notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
     int numMessages = 1;
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
     mBuilder.setNumber(numMessages)
        .setSmallIcon(smallIcon)
        .setAutoCancel(true)
        .setContentTitle("You have " +numMessages+ " new messages.")
        .setContentText(message)
        .setWhen(when)
        .setContentIntent(contentIntent)
            .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
    
     notificationManager.notify(notifyID, mBuilder.build());
    

我看到它的方式,每次GCM发送通知时,我的应用都会生成一个通知,发送给通知管理器,同时考虑先前的假设。

第一个问题:如果我想通知用户剩余的通知数量,我如何跟踪之前发送的通知数量?我是否必须将其存储在存储介质中?

第二步:点击包含多个通知的状态栏中的通知图标:

   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    showNotifications();
   }

   public void onResume() {
    showNotifications();
    super.onResume();
   }


   public void showNotifications() {

   if (getIntent().getExtras() != null) {
    if (getIntent().getExtras().getString("new_message") != null) {
    String newMessage = getIntent().getExtras().getString("new_message");
    if (!newMessage.equals("")) {
           handleMessage(newMessage);
       getIntent().removeExtra("new_message);
    }
    }
   }
   }

   public void onNewIntent(Intent intent) {
   Bundle extras = intent.getExtras();
   if (extras != null) {
         if (intent.getExtras().getString("new_message") != null) {
         String newMessage = intent.getExtras().getString("new_message");
         if (!newMessage.equals("")) {
           intent.removeExtra("new_message");       }
         }
         }
   }
   }

第二个问题:我只收到最后发送的通知。似乎是将待处理的意图与requestId区分开来并没有办法解决问题。另外我认为与一个通知图标相关的不同待处理意图将由onNewIntent处理... 我正在考虑的一个可能的解决方案是将来自GCM的传入通知保存在存储中并让他们点击状态栏图标,但是这肯定不是谷歌的意思......

¿任何帮助?

1 个答案:

答案 0 :(得分:1)

第二步尝试:PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);