2012-04-28 18 views
5

Implemento Activity X. Obtuve un PendingIntent P de un Service S. Sé con certeza, que P apunta a unknownActivity Y que devuelve el resultado R a través de su método setResult.Start PendingIntent for result

¿Cómo debo iniciar P en X, para recibir el resultado R en X.onActivityResult?

+0

PS. Al igual que con la llamada 'startActivityFotResult', también me gustaría recibir una notificación cuando se cancela Y (en este caso, R es igual a 'RESULT_CANCELED'). – wrygiel

Respuesta

-1

pasé algún tiempo excavando este tema y mi conclusión es que es imposible sin ciertos cambios en ambos Actividades (XyY):

En Activity X:

  • Debe crear uno más PendingIntent (P2), esta vez en el contexto Activity X, usando X.createPendingResult. Ahora, enviar datos a través del P2 dará como resultado la llamada al X.onActivityResult.
  • Debería adjuntar PendingIntent P2 como un extra de PendingIntent P antes de send -solo.

En Activity Y:

  • Debe extraer PendingIntent P2 de su getIntent().
  • No debe llamar al setResult, pero establezca los resultados en algunos campos locales.
  • Debe reemplazar onDestroy y enviar PendingIntent P2 desde allí.

¿Por qué es así?

Supongo que es algo sobre la seguridad de un tipo. Activity Y se puede iniciar en una tarea separada (que Activity X). ¿Tal vez setResult está destinado a manejar los resultados pasados ​​solo dentro de la misma tarea? Para la definición de la tarea, vea here.

+0

Respondí mi propia pregunta. No soy un experto y puedo estar tan equivocado. Puede ser imprudente aceptar esta respuesta hasta que alguien la confirme. – wrygiel

5

Google Play Services utiliza PendingIntent objetos para resolver errores de permiso en el mismo escenario:

IntentSender intentSender = pendingIntent.getIntentSender(); 
activity.startIntentSenderForResult(intentSender, REQUEST_CODE, null, 0, 0, 0); 

Ver Activity.startIntentSenderForResult() para la documentación.