2012-05-23 6 views
9

Ich habe einige Code, der einige Benachrichtigungen erstellt, ist es wirklich einfach.Android 4: kann keine Benachrichtigung durch Wischen

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 2.1. In 4.0, alles funktioniert gut, außer die Swipe-to-entlassen Aktion funktioniert nicht. Die Benachrichtigung geht leicht zur Seite, klebt dann und springt zurück. Irgendeine Idee? Danke.

+0

Versuch FLAG_AUTO_CANCEL zu entfernen –

+0

@Copa bereits versucht – James

+0

mh ... versuchen, das erste Flag ntofication.flags zuzuordnen und nicht oder das erste Flag auf bitweise. Ändern Sie notification.flags | = DEFAULT_SOUND in notification.flags = Notification.DEFAULT_SOUND; Vielleicht hilft das –

Antwort

12

Sie können Ihre Benachrichtigung nicht wegwischen, da sie sich in einem "ONGOING" -Zustand befindet.

Zunächst wird die Lösung:

ersetzen Fahnen mit folgendem Code einstellen:

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

Standardwerte sind für den Standardwerte-Abschnitt, Flags für den Flaggen-Abschnitt.

Und jetzt der Grund, warum es fortgeführt wurde?

Wie Sie vielleicht bereits wissen, werden Flags (und Standardwerte) für Benachrichtigungen durch eine bitwise operation festgelegt. Bedeutet, dass jedes Flag einen konstanten Wert hat, der eine Potenz von 2 ist. Das Hinzufügen von diesen ergibt eine eindeutige Nummer für einen Satz von Flags, was es wirklich schnell macht zu berechnen, welche Flags tatsächlich gesetzt sind.

Notification.DEFAULT_VIBRATE und Notification.FLAG_ONGOING_EVENT haben den gleichen Wert von contant .

+0

Das war genau das, was ich wissen musste. Danke! – joshplusa

+0

Begann Shwoing mit setOngoing (false) und notification.flags | = Notification.FLAG_AUTO_CANCEL. –

0

Gerade diese Zeile einzufügen, wenn Sie die Meldung machen ...

// Will show lights and make the notification disappear when the presses it 
notification.flags == Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS; 
4

Sie setOngoing (boolean ongoing)

Set verwenden sollten, ob dies eine "laufende" Benachrichtigung ist. Laufende Benachrichtigungen können vom Benutzer nicht zurückgewiesen werden, daher muss Ihre Anwendung oder Ihr Dienst für die Stornierung sorgen. Sie werden normalerweise verwendet, um eine Hintergrundaufgabe anzuzeigen, mit der der Benutzer aktiv beschäftigt ist (z. B. Musik abzuspielen) oder die auf irgendeine Weise aussteht und daher das Gerät belegt (z. B. Dateidownload, Synchronisierungsvorgang, aktive Netzwerkverbindung). .

können Sie verwenden

.setOngoing(false); 
Verwandte Themen