2013-02-22 2 views
18

Ich versuche, eine Benachrichtigung anzuzeigen, die gelöscht werden muss, wenn der Benutzer darauf klickt. Ich verwende NotificationCompat Klasse, um meine Benachrichtigung zu erstellen, und ich rufe setAutoCancel(true) auf meiner builder. Dies ist das Stück Code:Benachrichtigung setAutoCancel (true) funktioniert nicht

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

Die Benachrichtigung wird korrekt hinzugefügt, aber wenn ich darauf klicke passiert nichts! Wo liege ich falsch?

+0

Die Benachrichtigung bleibt einfach dort? Was passiert, wenn Sie es wischen, um es zu entlassen? Welche Geräte- und API-Version verwenden Sie? –

+0

Ich laufe auf Galaxy Nexsus, API 4.2.2. Die Benachrichtigung verschwindet, wenn ich sie wische, aber wenn ich einfach tippe, passiert nichts. – TheModularMind

Antwort

41

setContentIntent verwenden sollte Ihr Problem lösen:

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

In Ihrem 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önnten ‚neue Intent replace() mit etwas anderem.

Ich habe eine demo zu Github hochgeladen.

+2

Warum wurde diese Antwort abgelehnt? Es tut was die Frage fragt! Danke, es hat für mich funktioniert. –

+0

Danke. Der Benutzer kann die Benachrichtigung dennoch löschen, indem er sie durchwischt. – gatopeich

+0

Ich habe herausgefunden, dass dies funktioniert, aber es kann zu einem bestimmten unerwarteten Ergebnis führen: Ich öffne den contentIntent auch separat von der Benachrichtigung. Dadurch kann der Ton der Benachrichtigung automatisch gelöscht werden (bei Moto G3 ist dies nicht der Fall, bei Google Pixel ist dies nicht der Fall). – jobbert

17

Ich weiß, eine Antwort wurde bereits akzeptiert, aber ich hatte das gleiche Problem mit einer anderen Lösung, so werde ich es hier teilen.

Für mich habe ich das gleiche NotificationCompat.Builder Objekt verwendet, um eine Benachrichtigung zu erstellen, die setOngoing(true) aufgerufen. Dies war für eine Upload-Fortschrittsbenachrichtigung, die während der Arbeit nicht entfernt werden sollte.

Wie auch immer, nachdem die Aufgabe abgeschlossen war, rief ich setAutoCancel(true), aber die Benachrichtigung war immer noch nicht wischen. Was ich auch tun musste, war setOngoing(false).

Es scheint jetzt ziemlich offensichtlich, aber es könnte jemand anderen irgendwann in der Zukunft retten.

+0

Bitte, wenn Sie die Lösung für Ihr Problem gefunden haben - schreiben Sie den richtigen Weg, um es zu lösen –

+0

Danke, ich erfahre das gleiche Problem, Sie haben meinen Tag gerettet! – SalutonMondo

+0

thnks budd hhhhhjhjh :) – Shikhar