10 Stimmen

Android 4: Benachrichtigung kann nicht durch Wischen abgelehnt werden

Ich habe einige Codes, die Benachrichtigungen erstellen, es ist wirklich grundlegend.

int icon = R.drawable.notification;
CharSequence tickerText = "Text";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);

Context context = getApplicationContext();
CharSequence contentTitle = "Text";
CharSequence contentText = "Text";
Intent notificationIntent = new Intent(this, RequestActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.flags |= Notification.DEFAULT_SOUND;
notification.flags |= Notification.DEFAULT_VIBRATE;
notification.flags |= Notification.DEFAULT_LIGHTS;
notification.flags |= Notification.FLAG_AUTO_CANCEL;

mNotificationManager.notify(notificationID, notification);

Es funktioniert alles gut in Version 2.1. In Version 4.0 funktioniert alles gut, außer der Aktion zum Wischen zum Löschen, was nicht funktioniert. Die Benachrichtigung geht leicht zur Seite, bleibt dann hängen und springt zurück. Irgendwelche Ideen? Danke.

14voto

AndacAydin Punkte 1416

Du kannst deine Benachrichtigung nicht weg wischen, weil sie sich im "LAUFENDEN"-Zustand befindet.

Zuerst die Lösung:

Ersetze das Setzen von Flags durch folgenden Code:

notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_LIGHTS;
notification.flags |= Notification.FLAG_AUTO_CANCEL;

Defaults sind für den Defaults-Bereich, Flags für den Flags-Bereich.

Und jetzt der Grund, warum sie laufend war?

Wie du vielleicht schon weißt, werden Flags (und Defaults) für Benachrichtigungen durch eine bitweise Operation gesetzt. Das bedeutet, dass jedes Flag einen konstanten Wert hat, der eine Potenz von 2 ist. Durch das Hinzufügen ergibt sich eine eindeutige Zahl für eine Gruppe von Flags, was es sehr schnell macht zu berechnen, welche Flags tatsächlich gesetzt sind.

Notification.DEFAULT_VIBRATE und Notification.FLAG_ONGOING_EVENT haben den gleichen konstanten Wert von 2.

7voto

IntelliJ Amiya Punkte 72793

Sie sollten setOngoing (boolean ongoing) verwenden

Legen Sie fest, ob es sich um eine "laufende" Benachrichtigung handelt. Laufende Benachrichtigungen können vom Benutzer nicht abgelehnt werden. Daher muss Ihre Anwendung oder Ihr Dienst darauf achten, sie zu stornieren. Sie werden typischerweise verwendet, um eine Hintergundaufgabe anzuzeigen, mit der der Benutzer aktiv beschäftigt ist (z.B. Musik abspielen) oder die auf irgendeine Weise aussteht und daher das Gerät beansprucht (z.B. ein Dateidownload, Synchronisierungsvorgang, aktive Netzwerkverbindung).

Sie können verwenden

.setOngoing(false);

1voto

Salmaan Punkte 3658

Nur diese Zeile einfügen, wenn Sie die Benachrichtigung erstellen...

// Zeigt Lichter an und lässt die Benachrichtigung verschwinden, wenn der Benutzer darauf drückt
notification.flags == Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;

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