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
- Analizar notificaciones push en Android
- Spring pedalea cliente web sockets para android
- Activación inteligente "androide" desde una notificación push
- Enviar notificación a un tema específico en Firebase en Java
- La aplicación se bloquea si la aplicación se cierra mediante el servicio Push: parse.com
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.
- No se puede iniciar la aplicación de receptor com.parse.ParseBroadcastReceiver en Trigger.io
- Servicio de notificación de Google / Apple Push (APNS / GCM)
- Al hacer clic en la notificación no se abre la actividad mencionada
- Productos de Android Gradle con notificaciones de Parse Push
- ¿Está com.google.android.c2dm.intent.RECEIVE todavía en uso?
- ¿Hay alguna razón para continuar usando IntentService para manejar mensajes de GCM?
- notificaciones push de Google Chrome android
- OneSignal: no se puede abrir la actividad después de hacer clic en el botón
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.