2012-06-07 17 views
9

¿Es posible tener una notificación para iniciar un receptor de difusión?La notificación de android no desencadena el receptor de BroadcastReceptor

He intentado este código pero no funciona.

Se crea una notificación, pero cuando hago clic en ella no sucede nada.

NOTA: Cuando cambio la notificaciónIntent para apuntar desde MyBroadcastReceiver.class a una actividad (como MainActivity.class), funciona bien.

creación Notificación:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(
     Context.NOTIFICATION_SERVICE); 

    int notificationIconId = XXXXXX 
    Notification notification = new Notification(
     notificationIconId, 
     XXXXXX, 
     System.currentTimeMillis() 
    ); 

    CharSequence contentTitle = XXXXXXX 
    CharSequence contentText = XXXXXX 

    Intent notificationIntent = new Intent(context,MyBroadcastReceiver.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
    notificationManager.notify(1,notification); 

Aquí está el BroadcastReceiver

public static class MyBroadcastReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    /* 
      */ 

} 
} 

Dentro AndroidManifest.xml

<receiver android:name=".MyBroadcastReceiver" /> 

Respuesta

31

Desde su código ...

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 

Al crear un PendingIntent dirigiéndose a BroadcastReceiver, debe usar getBroadcast(...) y no getActivity(...).

Ver PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)

Además, no se cree su Intent así ...

Intent notificationIntent = new Intent(context,MyBroadcastReceiver.class); 

Eso es una explícita Intent que se dirige a una clase específica (utilizados para arranque de una clase específica Activity por lo general) .

lugar crear una 'emisión' Intent con una 'acción' como ...

Intent notificationIntent = new Intent(MyApp.ACTION_DO_SOMETHING); 

También debe especificar una sección para la sección <intent-filter><receiver android:name=".MyBroadcastReceiver" /> de su manifiesto.

+1

@Abhishek: No hay problema. La primera vez que trabajé con notificaciones, caí en la misma trampa al usar 'getActivity' para' PendingIntent' cuando en realidad quería iniciar 'Service' (que usa' getService'). Una lección bien aprendida :) – Squonk

+3

@Abhishek olvidó mencionar setClass para la notificaciónIntent 'notificationIntent.setClass (context, MyBroadcastReceiver.class);' – AbdullahDiaa

Cuestiones relacionadas