Android GCM несколько push-уведомлений с одним значком в строке состояния

1

Мое приложение хочет связать несколько push-уведомлений одним значком в строке состояния.

При щелчке по значку приложения должны получать несколько уведомлений, чтобы показать их в режиме просмотра списка.

В stackoverflow уже есть некоторые записи, которые приближаются к тому, что я хочу получить, и это дало мне лучшее представление об обработке ожидающих намерений и флагов уведомлений, но они не полностью решили мою проблему.

Первый шаг: создание уведомления:

После некоторых записей в stackoverflow я сделал следующие предположения:

  • Один идентификатор уведомления (notifyID) для получения только одного значка в строке состояния
  • Уникальный параметр requestId в ожидающем намерения различать различные запросы уведомлений в пределах одного идентификатора уведомления
  • 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");       }
         }
         }
   }
   }

Вторая проблема: я получаю только последнее отправленное уведомление. Кажется, что дифференциация ожидающих намерений с запросом не сделала этого трюка. Также я думал, что различные ожидающие намерения, связанные с одним значком уведомления, будут обрабатываться onNewIntent... Возможное решение, о котором я думал, заключается в том, чтобы сохранить входящие уведомления от GCM в хранилище и заставить их нажимать значок строки состояния, но наверняка это не может быть так, как Google это означало...

¿Любая помощь?

  • 2
    Вы решили свои проблемы? Если да, то как? Я пытаюсь сделать что-то очень похожее.
Теги:
push-notification
android-pendingintent

1 ответ

1

для второго шага попробуйте следующее: PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню