175 Stimmen

Wie man eine Benachrichtigung ausblendet, nachdem die Aktion angeklickt wurde

Seit API-Level 16 (Jelly Bean) besteht die Möglichkeit, Aktionen zu einer Benachrichtigung hinzuzufügen mit

builder.addAction(iconId, title, intent);

Aber wenn ich eine Aktion zu einer Benachrichtigung hinzufüge und die Aktion gedrückt wird, wird die Benachrichtigung nicht verworfen. Wenn auf die Benachrichtigung selbst geklickt wird, kann sie verworfen werden mit

notification.flags = Notification.FLAG_AUTO_CANCEL;

oder

builder.setAutoCancel(true);

Aber offensichtlich hat dies nichts mit den Aktionen zu tun, die mit der Benachrichtigung verknüpft sind.

Irgendwelche Hinweise? Oder ist dies noch nicht Teil der API? Ich habe nichts gefunden.

9voto

Houssin Boulla Punkte 2192

Sie müssen den folgenden Code ausführen, nachdem Ihr Intent ausgelöst wurde, um die Benachrichtigung zu entfernen.

NotificationManagerCompat.from(this).cancel(null, notificationId);

NB: notificationId ist die gleiche ID, die zur Ausführung Ihrer Benachrichtigung übermittelt wurde.

7voto

CommonsWare Punkte 950864

Sie können immer cancel() die Benachrichtigung von alles, was durch die Aktion aufgerufen wird (z. B. in onCreate() der Aktivität, die mit dem von Ihnen bereitgestellten PendingIntent von addAction() verbunden ist).

5voto

Hanisha Punkte 811

Nur diese Zeile einfügen :

 builder.setAutoCancel(true);

Und der vollständige Code ist :

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
    builder.setSmallIcon(android.R.drawable.ic_dialog_alert);
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.co.in/"));
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
    builder.setContentIntent(pendingIntent);
    builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.misti_ic));
    builder.setContentTitle("Benachrichtigungstitel");
    builder.setContentText("Ihr Benachrichtigungsinhalt hier.");
    builder.setSubText("Tippen Sie hier, um die Website anzuzeigen.");
    Toast.makeText(getApplicationContext(), "Die Benachrichtigung wurde erstellt!!", Toast.LENGTH_LONG).show();

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    builder.setAutoCancel(true);
    // Wird die Benachrichtigung in der Benachrichtigungsleiste angezeigt
    notificationManager.notify(1, builder.build());

1voto

Amit Punkte 23

Nur zur Zusammenfassung:

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);

Intent intent = new Intent(context, MyNotificationReceiver.class);
intent.putExtra("Notification_ID", 2022);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
            context,
            0,
            intent,
            ...);

Notification notification = new NotificationCompat.Builder(...)
...    
.addAction(0, "Button", pendingIntent)
.build();

notificationManager.notify(2022, notification);

und zum Beenden der Benachrichtigung hast du zwei Möglichkeiten:

Ansatz 1: (in MyNotificationReceiver)

NotificationManager manager = (NotificationManager)
            context.getSystemService(NOTIFICATION_SERVICE);
    manager.cancel(intent.getIntExtra("Notification_ID", -1));

Ansatz 2: (in MyNotificationReceiver)

NotificationManagerCompat manager = NotificationManagerCompat.from(context);
manager.cancel(intent.getIntExtra("Notification_ID", -1));

und schließlich im Manifest:

-3voto

rudakovsky Punkte 182

Builder.setAutoCancel(true);

Auch auf Android 9 getestet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X