2011-09-19 14 views
14

Estoy tratando de detectar cuándo se borra mi notificación. Mi pregunta se refiere directamente a este answer que describe lo que se supone que debo hacer. Así es como estoy poniendo en práctica las acciones:Cómo utilizar Notification.deleteIntent

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

Esta es la clase CleanUpIntent:

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

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

Después, Simplemente basta con abrir la notificación como lo haría normalmente, pero cuando voy a probarlo (presionando "Borrar todas las notificaciones") no pasa nada. Inserté una línea de código que imprime algo en LogCat cuando se inicia IntentService, pero nunca se ejecutó nada. ¿Es así como se supone que debo usar Notification.deleteIntent?

Respuesta

3

Lo que hay que hacer es registrar una BroadcastReceiver (probablemente en su AndroidManifest.xml o alternativamente utilizando registerReceiver en un Service) y luego ponga deleteIntent ser un Intent que será capturado por ese receptor.

+0

¿Sabe por casualidad qué es la bandera de IntentFilter para detectar cuando se borran las notificaciones? – Brian

+0

No es un indicador 'IntentFilter', es un' BroadcastReceiver': vea http://code.google.com/p/islamictools/source/browse/trunk/IslamicTools/src/com/alpha/commun/MsgNotification .java? spec = svn11 & r = 11 para ver un ejemplo de cómo harías esto. – Femi

+0

No estoy muy familiarizado con BroadcastReceivers, pero mi pregunta era sobre cómo registrar el receptor. ¿No necesita proporcionar un IntentFilter ya sea que llame a Context.registerReceiver o lo coloque manualmente en el AndroidManifest? – Brian

0

Debe usar getBroadcast method en lugar de getService y debe registrar el receptor para Acción específica.

38

código de ejemplo que se ejecutará cada vez que el usuario borre la notificación, espero que lo ayude. No se requiere

.... 
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

No hay absolutamente ninguna necesidad de verificar 'action' equallity –

+7

Una aplicación podría tener diferentes notificaciones generadas con el mismo receptor o diferentes acciones deseadas dependiendo del contenido de notificación u otras condiciones. En esos casos, uno podría querer definir una acción. – MeanderingCode

+1

Tenga en cuenta que este código reutiliza el PendingIntent para todas las notificaciones de esta manera. Lea su descripción sobre la generación de unidades únicas mediante el uso de diferentes códigos de solicitud o diferentes datos verificados por Intent.isEqual(). – althaus

-4

Un receptor explícito. Se llamará a deleteIntent automáticamente mientras presiona el botón clear.