2012-01-24 19 views
7

en el código de ejemplo C2DM de Google, cuando una notificación Recived en BroadcastReceiver que llaman:¿Por qué llamar a setResult en BroadcastReceiver?

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

Yo no sabía qué hacer el setResult. esto es lo que dicen en los documentos de Android:

Cambiar todos los datos de resultados devueltos por estas transmisiones; solo funciona con transmisiones enviadas a través de Context.sendOrderedBroadcast. Todos los datos de resultados actuales se reemplazan por el valor otorgado a este método.

¿Alguien puede explicar lo que significan y por qué debo llamarlo?

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 */); 
    } 
} 

Respuesta

9

El método setResult(...) en BroadcastReceiver, es más que nada para fines de seguimiento.

Si está familiarizado con el método ActivitysetResult(...), puede pensar en este método en la difusión de la misma manera. Pero en vez de conseguir un método de devolución de llamada como onActivityResult(int requestCode, int resultCode, Intent data) en el caso de las actividades, transmitido setResult(...) método se utiliza para realizar un seguimiento de los resultados de las emisiones en un cierto orden, por eso el documentation dice:

sólo funciona con transmisiones enviado a través de Context.sendOrderedBroadcast. Todos los datos de resultados actuales se reemplazan por el valor otorgado a este método.

Lo que significa que usted puede hacer uso de los métodos getResultCode(), getResultData() o getResultExtras() saber cómo fueron las cosas durante la ejecución del método onReceive(Context, Intent) en todos los diferentes BroadcastReceiver s registrado para manejar su difusión. Por lo tanto, puede conocer el resultado de la ejecución del código en el BroadcastReceiver anterior llamado antes del que se ejecuta actualmente a lo largo de todos los receptores.

Dice solo Context.sendOrderedBroadcast() porque una llamada normal al método sendBroadcast(...) podría no esperar a que 1 receptor complete su ejecución antes de iniciar otro hilo para ejecutar el código en otro receptor que escuche el mismo intento.

+0

+1 por explicación .. –

-1

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

-1

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 la operación de él, la nueva actividad establece un código de resultado (el trabajo de un hecho, el trabajo realizado B ... etc) y una intención (no es necesario), y termina con el mismo llamado a terminar ()

void setResult (int resultCode, Intent data); 

Su actividad principal recibe este resultado con el onActivityResult Funciton(). 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 que te haya ayudado.

Cuestiones relacionadas