Мое приложение хочет связать несколько push-уведомлений одним значком в строке состояния.
При щелчке по значку приложения должны получать несколько уведомлений, чтобы показать их в режиме просмотра списка.
В stackoverflow уже есть некоторые записи, которые приближаются к тому, что я хочу получить, и это дало мне лучшее представление об обработке ожидающих намерений и флагов уведомлений, но они не полностью решили мою проблему.
Первый шаг: создание уведомления:
После некоторых записей в stackoverflow я сделал следующие предположения:
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 это означало...
¿Любая помощь?
для второго шага попробуйте следующее: PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);