2011-09-19 2 views
14

Sto provando a rilevare quando la mia notifica viene cancellata. La mia domanda si riferisce direttamente a questo answer che descrive ciò che suppongo di fare. Questo è come sto attuazione delle azioni:Come utilizzare Notification.deleteIntent

// usual Notification initialization here 
notification.deleteIntent = PendingIntent.getService(context, 0, new Intent(context, CleanUpIntent.class), 0); 
notificationManager.notify(123, notification) 

Questa è la classe CleanUpIntent:

class CleanUpIntent extends IntentService { 
    public CleanUpIntent() { 
     super("CleanUpIntent"); 
    } 

    @Override 
    protected void onHandleIntent(Intent arg0) { 
     // clean up code 
    } 
} 

In seguito, ho semplicemente lanciare la notifica come mi farebbe normalmente, ma quando vado a provarlo (premendo "Cancella tutte le notifiche") non accade nulla. Ho inserito una riga di codice che stampa qualcosa su LogCat all'avvio di IntentService, ma non è mai stato eseguito nulla. È questo il modo in cui suppongo di usare Notification.deleteIntent?

risposta

3

Quello che dovete fare è registrare un BroadcastReceiver (probabilmente nel vostro AndroidManifest.xml o in alternativa utilizzando registerReceiver in un Service) e quindi impostare deleteIntent essere un Intent che sarà catturato da quel ricevitore.

+0

Ti capita di sapere qual è il flag IntentFilter per la cattura quando le notifiche vengono cancellate? – Brian

+0

Non è un flag 'IntentFilter', è un' BroadcastReceiver': vedi http://code.google.com/p/islamictools/source/browse/trunk/IslamicTools/src/com/alpha/commun/MsgNotification .java? spec = svn11 & r = 11 per un esempio di come lo faresti. – Femi

+0

Non ho molta familiarità con BroadcastReceiver, ma la mia domanda riguardava il modo in cui registro il ricevitore. Non è necessario fornire a IntentFilter se si chiama Context.registerReceiver o lo si inserisce manualmente in AndroidManifest? – Brian

0

È necessario utilizzare getBroadcast methode invece getService e dovrebbe registrare il ricevitore per un'azione specifica.

38

codice di esempio che verrà chiamato ogni volta che l'utente cancella la notifica, spero che ti possa aiutare.

.... 
notificationBuilder.setDeleteIntent(getDeleteIntent()); 
.... 


protected PendingIntent getDeleteIntent() 
{ 
    Intent intent = new Intent(mContext, NotificationBroadcastReceiver.class); 
    intent.setAction("notification_cancelled"); 
    return PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
} 

NotificationBroadcastReceiver.java

@Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String action = intent.getAction(); 
     if(action.equals("notification_cancelled")) 
     { 
      // your code 
     } 
    } 

AndroidManifiest.xml

<receiver android:name=".NotificationBroadcastReceiver"> 
       <intent-filter> 
        <action android:name="notification_cancelled"/> 
       </intent-filter> 
      </receiver> 
+4

Non è assolutamente necessario controllare 'action' equallity –

+7

Un'applicazione può avere notifiche diverse generate con lo stesso ricevitore o diverse azioni desiderate a seconda del contenuto della notifica o di altre condizioni. In quei casi, si potrebbe voler definire un'azione. – MeanderingCode

+1

Tieni presente che questo codice riutilizzando PendingIntent per tutte le notifiche in questo modo. Leggi la sua descrizione sulla generazione di quelli non validi utilizzando diversi codici di richiesta o dati diversi controllati da Intent.isEqual(). – althaus

-4

un ricevitore esplicito non è necessaria. deleteIntent verrà chiamato automaticamente mentre si preme il pulsante clear.