Ich habe ein Problem, bei dem ich unabhängig davon, welche Benachrichtigung der Benutzer berührt, immer dieselbe Benachrichtigung erhalte, obwohl sie storniert wurde.
Die erste Benachrichtigung, die ein Benutzer berührt, ist die einzigeBenachrichtigung, die bis zum Neustart des Geräts immer zugestellt wird (dann wird die erste berührte Benachrichtigung zur neuen Benachrichtigung von Hotel California).
So konstruiere ich die Benachrichtigungen:
final Bundle extras = new Bundle();
final int notificationId = Integer.parseInt(payload.getObjectId());
extras.putInt(NOTIFICATION_ID, notificationId);
final Intent intent = new Intent(context,
PushNotificationLauncherActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtras(extras);
final NotificationCompat.Builder builder = new NotificationCompat.Builder(
context);
builder.setContentTitle(context.getString(R.string.app_name));
builder.setContentText(payload.getText());
builder.setSmallIcon(R.drawable.icon_launcher);
builder.setAutoCancel(true);
final PendingIntent pIntent = PendingIntent.getActivity(context, 0,
intent, 0, extras);
builder.setContentIntent(pIntent);
final Notification notification;
if (Build.VERSION.SDK_INT < 16) {
notification = builder.getNotification();
} else {
notification = builder.build();
}
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(notificationId, notification);
Dann habe ich das in meinem PushNotificationLauncherActivity
:
final Bundle extras = getIntent().getExtras();
final int notificationId = extras
.getInt(SocialcastGoogleCloudMessageReceiver.NOTIFICATION_ID);
final NotificationManager notificationManager = (NotificationManager) this
.getSystemService(NOTIFICATION_SERVICE);
// please go away
notificationManager.cancel(notificationId);
Log.d(PushNotificationLauncherActivity.class.getSimpleName(),
"Touched notification ID: " + String.valueOf(notificationId));
Egal welche Benachrichtigung ich berühre, im Log Touched notification ID: 1234
wird immer angezeigt, auch wenn die Benachrichtigung, auf die ich tippe, eine ID von hat 56789
.
Ich bezweifle sehr, dass es ein Problem mit meinem Testgerät ist, aber falls es hilft; Ich verwende ein 2013 Nexus 7 mit KitKat 4.4.4 mit der Dalvik-Laufzeit (nicht ART) Build KTU84P.
Antworten:
2 für die Antwort № 1Übergeben Sie Ihre notificationId
als die request code
Hier:
final PendingIntent pIntent = PendingIntent.getActivity(context, 0,
intent, 0, extras);
Ändere dies zu:
final PendingIntent pIntent = PendingIntent.getActivity(context, notificationId,
intent, 0, extras);
Beim Vergleich zweier Intent
Instanzen, die enthalten sind Bundles
werden nicht verglichen. Aus der Sicht von Android sind die beiden Absichten also gleich.
Interessanterweise ist die reqCode
(zweites Argument in PendingIntent.getActivity(...)
) ist verglichen. Und das sollte dein rendern Intents
einzigartig.