¿Por qué llamar a setResult en BroadcastReceiver?

En el código de ejemplo C2DM de google, cuando una notificación recived en BroadcastReceiver llaman:

setResult(Activity.RESULT_OK, null /* data */, null /* extra */);

No sabía lo que el setResult hacer. Esto es lo que dicen en los documentos Android:

Cambiar todos los datos de resultado devueltos de estas transmisiones; Sólo funciona con transmisiones enviadas a través de Context.sendOrderedBroadcast. Todos los datos del resultado actual se reemplazan por el valor dado a este método.

¿Puede alguien explicar lo que significan y por qué tengo que llamar?

Código completo:

 public class C2DMBaseReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { C2DMReceiver.runIntentInService(); setResult(Activity.RESULT_OK, null /* data */, null /* extra */); } } 

El método setResult en broadcastreceivers, es más que nada para fines de seguimiento, si está familiarizado con el método setResult de la clase de actividad, puede pensar en este método en broadcast de la misma manera, pero en lugar de obtener un método de devolución de llamada como " OnActivityResult "en el caso de las actividades, el método broadcast setResult se utiliza para realizar un seguimiento de los resultados de las emisiones en un cierto orden, por eso la documentación dice:" sólo funciona con las emisiones enviadas a través de Context.sendOrderedBroadcast. Por el valor dado a este método. " Lo que significa que usted puede hacer uso de los métodos getResultCode, getResultData o getResultExtras para saber cómo fueron las cosas durante la ejecución del método onReceive en todos los diferentes broadcastreceivers registrados para manejar su difusión. Así se puede conocer el resultado de la ejecución del código en el receptor de radiodifusión anterior llamado antes del que actualmente se ejecuta a lo largo de todos los receptores.

Dice sólo "Context.sendOrderedBroadcast." Porque una llamada regular al método de sendBroadcast no puede esperar a que un receptor complete su ejecución antes de iniciar otro hilo para ejecutar código en otro receptor que escuche la misma intención también.

El método setResult () establece el resultado que se va a utilizar en el intento de llamada. Supongamos que usted ha llamado a su receptor personalizado de cualquier otra actividad usando startActivityForResult (intento, código) entonces en el método onActivityResult () en la misma actividad que usted puede utilizar los resultados obtenidos de la actividad llamada, sólo si hay un método setResult () en La otra actividad. Es sólo una manera de llamar a una actividad a través de la intención y obtener resultados de vuelta a la misma actividad.

Ejemplo: En su actividad principal, inicia una actividad con un código de solicitud. Su principal espera un resultado al final de esta actividad.

 startActivityForResult (Intent intent, int requestCode); 

Al final de su trabajo, la nueva actividad establece un código de resultado (el trabajo A hecho, el trabajo B hecho … etc) y una intención (no es necesario), y termina con la llamada a finish ().

 void setResult (int resultCode, Intent data); 

Su actividad principal obtiene este resultado con el funciton onActivityResult (). Comprueba el código de solicitud para saber qué trabajo se ha ejecutado y para obtener el resultado / estado de este trabajo. (Y los datos, si se esperaba una intención, pero los datos también pueden ser el código de resultado).

 void onActivityResult(int requestCode, int resultCode, Intent data); 

Espero haberlo ayudado.

  • ¿Es posible escribir un receptor de difusión Android que detecte cuando el teléfono se despierta?
  • ACTION_HEADSET_PLUG demora de difusión
  • Receptor de difusión no funciona para SMS
  • ¿Por qué mi Broadcast Receiver no recibe las acciones de difusión del sistema?
  • android.hardware.action.NEW_PICTURE se dispara dos veces
  • Cómo determinar si una de mis actividades está en primer plano
  • ¿Es esto posible comprobar si una difusión fue enviada en modo pegajoso? ¿Puede ser abortado / removido?
  • ANR Difusión de Intención {act = android.intent.action.SCREEN_OFF flg = 0x50000010}
  • Broadcast Receivers - WhatsApp y servicios similares
  • ACTION_MY_PACKAGE_REPLACED no recibido
  • Android BroadcastReceiver dentro de la actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.