2013-08-20 10 views
7

Ich füge zwei Aktionsschaltflächen zu meiner Benachrichtigung hinzu, wenn ich auf einen von ihnen klicke, führen sie die gewünschte Aktion aus, aber die Benachrichtigung verbleibt in meinem Benachrichtigungsfach. Ich weiß, dass es möglich ist, die Benachrichtigung aus der Benachrichtigungsleiste zu entfernen, wenn auf eine Aktionsschaltfläche geklickt wird. So funktioniert Google Mail. Wenn ich auf die Hauptbenachrichtigung klicke, wird die App geöffnet und die Benachrichtigung aus dem Benachrichtigungsfach entfernt.Benachrichtigung entfernen, wenn addAction aufgerufen wird?

Hier ist ein Ausschnitt aus meinem Code:

Intent completeIntent = new Intent(getApplicationContext(), MarkComplete.class); 
     completeIntent.putExtra("rowid", inrowid); 
     completeIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

PendingIntent markCompleteIntent = PendingIntent.getActivity(getApplicationContext(), inrow, completeIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

builder.setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle("Title") 
       .setContentText("text") 
       .setContentIntent(notificationReleaseIntent) 
       .setPriority(Notification.PRIORITY_HIGH) 
       .setAutoCancel(true) 
       .addAction(R.drawable.complete, "Mark Complete", markCompleteIntent); 

Bearbeiten - Wie zionpi wies darauf hin, ich notification.cancel nennen benötigt(); um die Benachrichtigung zu entfernen, nachdem auf die Schaltfläche AddAction geklickt wurde. Ich habe diese Methode einfach zu meinen Klassen hinzugefügt, auf die der PendingIntent zeigte.

public static void CancelNotification(Context ctx, int notifyId) { 
    String s = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNM = (NotificationManager) ctx.getSystemService(s); 
    mNM.cancel(notifyId); 
} 
+0

Code ist unvollständig. Benachrichtigung bleibt noch dort? – Nizam

+0

IMO Google Mail verwendet den Service, um den Verweis auf das Benachrichtigungsobjekt zu halten, und kann daher die Benachrichtigung entfernen, wenn bestimmte Bedingungen erfüllt sind. –

Antwort

4

So möchten Sie Ihre Benachrichtigung entfernen, ist die vorläufige eine Benachrichtigungs-ID zu haben.
dann Methode ähnlich wie unten aufrufen, um es zu beseitigen.

public static void CancelNotification(Context ctx, int notifyId) { 
     String s = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNM = (NotificationManager) ctx.getSystemService(s); 
     mNM.cancel(notifyId); 
    } 

Sie möchten können alternativ zu this und this Post beziehen.

+0

zionpi, Danke das hat perfekt funktioniert! – marty331

+0

Angenommen, meine AddAction öffnet den MainActivity-Intent. Wenn ich dann 'mNM.cancel (notifyId); 'anrufe, wird die Benachrichtigung beim Start von MainActivity immer abgebrochen, wenn ich meine MainActivity öffne, auch wenn ich die Benachrichtigung nicht anklicke oder überprüfe . Also wann soll ich das so aufrufen, dass es erst nach dem Klick auf den AddAction Button aufgerufen wird. @zionpi – Sp4Rx

+0

Benachrichtigungen bleiben sichtbar, bis eine der folgenden Situationen eintritt, siehe [this] (https://developer.android.com/training/notify-user/managing.html#Removing). @ Sp4Rx – zionpi

Verwandte Themen