GCM BroadcastReceiver setResultCode uso

Estoy utilizando el ejemplo de GCM de los desarrolladores de Android y no podía entender el propósito de la setResultCode (Activity.Result_OK). ¿Qué componente recibe este mensaje? ¿Quién lo llama y lo recibe?

Aquí está el ejemplo

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ComponentName comp = new ComponentName(context.getPackageName(),GcmIntentService.class.getName()); startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); // ????? } } 

Gracias.

La emisión en la que tu aplicación recibe el mensaje GCM es una emisión ordenada.

Las emisiones ordenadas (enviadas con Context.sendOrderedBroadcast) se envían a un receptor a la vez. A medida que cada receptor se ejecuta a su vez, puede propagar un resultado al siguiente receptor, o puede abortar completamente la emisión para que no se pase a otros receptores. Los receptores de órdenes que se ejecutan pueden ser controlados con el atributo android: priority del filtro de intención coincidente; Receptores con la misma prioridad se ejecutarán en un orden arbitrario.

Esto significa que si su aplicación tiene varios receptores de difusión configurados para manejar mensajes GCM, se llamarán uno tras otro (en un orden que depende de su prioridad). Es posible que tenga varios receptores de difusión que manejen mensajes GCM si, por ejemplo, su aplicación utiliza alguna biblioteca de terceros que utiliza GCM y además su aplicación utiliza GCM directamente. En este caso, desea que su aplicación maneje sólo sus propios mensajes y no los mensajes enviados a la biblioteca de terceros (y viceversa).

Si uno de ellos maneja el mensaje GCM y no desea que los demás lo manejen también, puede abortar la transmisión. Lo hace por setResultCode(Activity.RESULT_CANCEL) . Por otro lado, setResultCode(Activity.RESULT_OK) propagaría el resultado del primer receptor al siguiente receptor.

En ese caso, su código se vería así:

 public class GCMBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getExtras ().get("from").equals (SENDER_ID_OF_YOUR_APP) { ComponentName comp = new ComponentName( GcmIntentService.class.getPackage().getName(), GcmIntentService.class.getName()); startWakefulService(context, (intent.setComponent(comp))); // abort the broadcast setResultCode(Activity.RESULT_CANCEL); } else // don't abort the broadcast setResultCode(Activity.RESULT_OK); } } } 

Si sólo tiene un receptor de difusión que maneje el mensaje GCM, la llamada a setResultCode tiene mucha importancia.

En realidad, setResultCode(Activity.RESULT_CANCEL) por sí solo no anulará la emisión. Tienes que llamar a abortBroadcast() :

http://developer.android.com/reference/android/content/BroadcastReceiver.html#abortBroadcast ()

Establece el indicador que indica que este receptor debe abortar la emisión actual; Sólo funciona con transmisiones enviadas a través de Context.sendOrderedBroadcast. Esto evitará que otros receptores de radiodifusión reciban la emisión.

  • Tamaño de icono de la barra de estado de Android - Uso de Cordova / Phonegap Push Plugin
  • La intención del receptor de mensajes de la nube de Google no se inicia (devolución de llamada de intención de difusión: resultado = CANCELADO paraIntención)
  • Enviar notificación a un tema específico en Firebase en Java
  • Enviar Notificaciones push a iOS / Android en WiFi cerrado (sin conexión a Internet)
  • Firebase onMessageReceived no llamado cuando la aplicación está en segundo plano
  • Firebase Cloud Messaging: mejores prácticas
  • Servicio de notificación de Google / Apple Push (APNS / GCM)
  • Un servidor que envía notificaciones push a dispositivos Android e iOS
  • Aplicación Phonegap de Android: llevar la actividad al frente
  • ¿Está com.google.android.c2dm.intent.RECEIVE todavía en uso?
  • Despierta Android Phone / tablet?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.