2010-11-06 13 views
40

Estoy tratando de iniciar una Service de mi Activity a tener en cuenta los cambios en una página web, es una aplicación privada, así que no se moleste la vida de batería ...Notificar a la actividad del servicio

Pero 'd como para pasar los datos de mi Service a mi Activity ... me parece que no puede encontrar una manera de llamar a la Activity de mi Service. ¿Cómo puedo conseguir esto?

Respuesta

47

Como indicó Alex, puede enlazar al servicio y pasar algún tipo de oyente o devolución de llamada al servicio para usar en eventos.

O bien, puede utilizar una transmisión Intent, quizás utilizando métodos como setPackage() en el Intent para limitar el alcance de la emisión.

O bien, puede utilizar createPendingResult() para crear un PendingIntent que se pasa como un Intent extra para el servicio - el servicio puede entonces utilizar ese PendingIntent para desencadenar onActivityResult() en su actividad.

O bien, puede utilizar un ResultReceiver.

O bien, puede utilizar un Messenger.

(la verdad, no he intentado estos dos últimos enfoques, pero creo que van a trabajar aquí)

+0

Estoy tratando de usar el intento pendiente de llamar a onactivityresult, pero no se está llamando en absoluto – Mars

+0

Intent notificationIntent = new Intent (this, activity.class); \t \t notificationIntent.putExtra ("captchaUrl", captchaUrl); \t \t PendingIntent contentIntent = PendingIntent.getActivity (esto, 0, notificationIntent, 0); – Mars

+0

@mars: Lo que estás haciendo no es lo que escribí.Escribí: "O bien, puedes usar' createPendingResult() 'para crear un' PendingIntent' que pases como un 'Intent' adicional al servicio - el servicio puede usar ese' PendingIntent' para disparar 'onActivityResult()' en tu actividad ". No he intentado usar 'createPendingResult()' con 'Notification', pero sospecho que esto no funcionará. Tenga en cuenta que originalmente escribió: "Me gustaría pasar datos de mi servicio a mi actividad", que no tiene nada que ver con una "Notificación". – CommonsWare

0

El mecanismo ResultReceiver se ha explicado en otro post: - Restful API service Sin embargo, no funcionaría en todos los casos . Por favor, consulte mi comentario en esa publicación. El alcance limitado o el mecanismo PendingIntent parecen más adecuados.

1

Algunas formas feas:

1.) Si la actividad no ha comenzado todavía, a continuación, utilizar intent y startActivity, pero recuerda intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

2.) De lo contrario, si la actividad ha comenzado ya, puede escribir su propio método de devolución de llamada en la actividad y registrar el método en el servicio, luego llamar directamente al método en el servicio.

la esperanza de encontrar alguna manera inteligente.

Creo que la transmisión también funciona bien, puede escribir una clase interna estática para recibir la transmisión y comenzar la actividad. Pero también es feo en mi opinión.

3

Una alternativa más: si su servicio actualiza el proveedor de contenido, la actividad puede ser notificada a través del ContentObserver. Esto sería suficiente si su servicio descarga algunos datos del servidor y simplemente desea mostrar contenidos nuevos en la actividad.

Cuestiones relacionadas