2013-08-20 9 views
7

Dodaję dwa przyciski akcji do mojego powiadomienia, po kliknięciu jednego z nich wykonują żądaną akcję, ale powiadomienie pozostaje w mojej szufladzie powiadomień. Wiem, że można usunąć powiadomienie z szuflady powiadomień po kliknięciu przycisku akcji, ponieważ tak funkcjonuje Gmail. Jeśli kliknę główne powiadomienie, otworzy się aplikacja i usunie powiadomienie z szuflady powiadomień.Usunąć powiadomienie, gdy wywołano funkcję addAction?

Oto fragment mojego kodu:

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); 

Edit - Jak zionpi wskazał, że muszę zadzwonić notification.cancel(); aby usunąć powiadomienie po kliknięciu przycisku AddAction. Po prostu dodałem tę metodę do moich zajęć, na które wskazywał PendingIntent.

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

Kod jest niekompletny. Powiadomienie nadal tam jest? – Nizam

+0

Witryna IMO Gmail używa usługi do przechowywania odwołania do obiektu powiadomienia, dzięki czemu może usunąć powiadomienie po dopasowaniu określonego warunku. –

Odpowiedz

4

Aby usunąć swoje powiadomienie, wstępnym zadaniem będzie podanie identyfikatora powiadomienia.
następnie wywołaj metodę podobną do poniższej, aby ją wyeliminować.

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

Możesz odnieść się do this i this postu alternatywnie.

+0

zionpi, dziękuję, że działało idealnie! – marty331

+0

Załóżmy, że moja addAction otwiera intencję MainActivity, a następnie, jeśli wezwę to 'mNM.cancel (notifyId);' na początku MainActivity to zawsze anuluje powiadomienie kiedy otwieram swoją MainActivity nawet jeśli nie kliknę lub sprawdzę powiadomienia . Więc kiedy powinienem to tak nazwać, aby był on wywoływany tylko po kliknięciu przycisku addAction. @ zionpi – Sp4Rx

+0

Powiadomienia pozostają widoczne do momentu wystąpienia jednego z poniższych zdarzeń, zapoznaj się z [tym] (https://developer.android.com/training/notify-user/managing.html#Removing). @ Sp4Rx – zionpi