2010-08-13 6 views
28

Ich habe viele Beispiele zum Erstellen von Benachrichtigungsnachrichten gelesen. Was ich erreichen wollte, ist, weil die Benachrichtigung von einem Widget ausgeführt wird, möchte ich die Benachrichtigungsabsicht, wenn geklickt wird, um es selbst zu löschen, wenn der Benutzer darauf klickt. Ich habe keine Aktivität zu zurückzukehren. Die Benachrichtigung für meine Zwecke wird einfach nur mitteilen, sonst nichts. Also, was wäre der Code einer Absicht, die sich nur löschen/löschen. Der folgende Code ist eine Aktivität, die über eine Schaltfläche gestartet wird (Schaltflächencode nicht enthalten). Die Benachrichtigung wird von einem Hintergrunddienst ausgelöst.Android Benachrichtigungsabsicht, um es selbst zu löschen

CharSequence title = "Hello"; 
CharSequence message = "Hello, Android!"; 
final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
final Notification notification = new Notification(R.drawable.icon,"A New Message!",System.currentTimeMillis()); 

notification.defaults=Notification.FLAG_ONLY_ALERT_ONCE+Notification.FLAG_AUTO_CANCEL; 
Intent notificationIntent = new Intent(this, AndroidNotifications.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0); 

notification.setLatestEventInfo(AndroidNotifications.this, title,message, pendingIntent); 
notificationManager.notify(NOTIFICATION_ID, notification); 

Dank

Antwort

1

Die einzige Art, wie ich dies zu tun, Ihr Notification ‚s Intent Punkt sehen kann, ist auf einen Service Hintergrund zu haben. Wenn dieser Dienst gestartet wird, wird die angegebene Notification mit NotificationManager.cancel(int id) gelöscht. Die Service würde sich dann selbst stoppen. Es ist nicht schön und würde nicht einfach zu implementieren sein, aber ich kann keine andere Möglichkeit finden, es zu tun.

+0

Wenn Sie möchten, dass der Code die Benachrichtigung abbricht, verwenden Sie die 'NOTIFICATION_ID' bei Abbruch. – Pentium10

+0

Ja, ich würde das von einer Schaltfläche aus aufrufen, aber ich möchte das aus dem Code aufrufen, wenn der Benutzer die Benachrichtigung auswählt. – John

+0

Works-for-Me-Lösung, jedoch ein bisschen chaotisch (zusätzlicher Dienst geschrieben werden). Aber im Dienst habe ich Zugriff auf Aufrufabsicht, in der die Benachrichtigungs-ID als Argument angegeben werden kann. –

73

Check out FLAG_AUTO_CANCEL

Bit wird bitweise-ored in das Flag-Feld, die eingestellt werden soll, wenn die Benachrichtigung abgebrochen werden soll, wenn sie vom Benutzer angeklickt wird.

EDIT:

notification.flags |= Notification.FLAG_AUTO_CANCEL; 
+0

Mein Code verwendet bereits FLAG_AUTO_CANCEL, aber die Benachrichtigung verschwindet nicht beim Klicken. – John

+17

Ihr Code verwendet falsch (setzt in defaults Feld), Sie müssen bitweise - oder in das Flags Feld wie folgt: 'notification.flags | = Notification.FLAG_AUTO_CANCEL;' – Pentium10

+2

Danke notification.flags | = Notification.FLAG_AUTO_CANCEL; Hat funktioniert. – John

19

die Flaggen in notification.flags statt notification.defaults Set.

Beispiel:

notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL; 
1
/** 
     Post a notification to be shown in the status bar. 
     Obs.: You must save this values somewhere or even pass it as an extra through Intent to use it later 
*/ 
notificationManager.notify(NOTIFICATION_ID, notification); 

/** 
     Cancel a previously shown notification given the notification id you've saved before 
*/ 
notificationmanager.cancel(NOTIFICATION_ID); 
+0

Abbrechen der Benachrichtigung direkt nach 'notify()' bewirkt, dass die Benachrichtigung überhaupt nicht angezeigt wird. – Aryo

10

Wenn Sie NotificationCompat.Builder (ein Teil von android.support.v4) verwenden dann einfach seine Aufgabe Methode nennen setAutoCancel

NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
builder.setAutoCancel(true); 

Einige Leute berichteten, dass setAutoCancel() nicht tat arbeiten für sie, so können Sie auch so versuchen

builder.build().flags |= Notification.FLAG_AUTO_CANCEL; 
+0

danke für das ans :) – Nevaeh

1

setContentIntent verwenden sollte Ihr Problem lösen:

.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); 

Zum Beispiel:

NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.notification_icon) 
     .setContentTitle("title") 
     .setAutoCancel(true) 
     .setContentText("content") 
     .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); 
NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
notificationManager.notify(0, mBuilder.build()); 

Oft möchten Sie vielleicht den Benutzer auf relevante Inhalte lenken und so könnte ersetzen 'neue Intent()' mit etwas anderem.

Verwandte Themen