/ / Abgebrochene Benachrichtigung wird erneut zugestellt, wenn eine andere Benachrichtigung berührt wird. Android - Java, Android, Benachrichtigungen, Android-Benachrichtigungen, Benachrichtigungsmanager

Abgebrochen Benachrichtigung wird erneut gesendet, wenn eine andere Benachrichtigung berührt wird. Android - Java, Android, Benachrichtigungen, Android-Benachrichtigungen, Benachrichtigungsmanager

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). Benachrichtigungstablett

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.