2013-08-20 11 views
7

Aggiungo due pulsanti di azione alla mia notifica, quando faccio clic su uno di essi eseguono l'azione desiderata, tuttavia la notifica rimane nel mio cassetto delle notifiche. So che è possibile rimuovere la notifica dal cassetto delle notifiche quando si fa clic su un pulsante di azione, in questo modo funziona Gmail. Se clicco sulla notifica principale, apre l'app e rimuove la notifica dal cassetto delle notifiche.Rimuovere la notifica quando si chiama addAction?

Ecco un frammento del mio codice:

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 - Come zionpi rilevare avevo bisogno di chiamare notification.cancel(); rimuovere la notifica dopo aver fatto clic sul pulsante addAction. Ho semplicemente aggiunto questo metodo alle mie classi in cui PendingIntent stava puntando.

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

Il codice è incompleto. La notifica rimane ancora lì? – Nizam

+0

IMO Gmail utilizza il servizio per conservare il riferimento all'oggetto di notifica e, pertanto, può rimuovere la notifica quando soddisfa determinate condizioni. –

risposta

4

Quindi, per rimuovere la notifica, è necessario avere un ID di notifica preliminare.
quindi richiamare il metodo simile a quello seguente per eliminarlo.

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

Si consiglia di fare riferimento a this e this posta in alternativa.

+0

zionpi, grazie che ha funzionato perfettamente! – marty331

+0

Supponiamo che la mia addAction apra l'intento MainActivity, quindi se chiamo questo 'mNM.cancel (notifyId);' all'inizio di MainActivity cancellerà sempre la notifica quando apro MainActivity anche se non clicco o controllo la notifica . Quindi, quando dovrei chiamare questo in modo che sarà chiamato solo dopo aver fatto clic sul pulsante addAction. @zionpi – Sp4Rx

+0

Le notifiche rimangono visibili fino a quando si verifica uno dei seguenti casi, fare riferimento a [questo] (https://developer.android.com/training/notify-user/managing.html#Removing). @ Sp4Rx – zionpi

Problemi correlati