2010-05-16 12 views
7

tengo una actividad (A) y un Servicio (S), que se inicia por A como esto:En Android: cómo llamar a la función de actividad de un servicio?

Intent i = new Intent(); 
i.putExtra("updateInterval", 10); 
i.setClassName("com.blah", "com.blah.S"); 
startService(i); 

A tienen una función como ésta en A:

public void someInfoArrived(Info i){...} 

Ahora quiero llamar a A.someInfoArrived (i) desde dentro de S. Intent.putExtra no tiene una versión donde podría pasar una referencia de objeto, etc. ... ¡Por favor ayuda!

PD: A la inversa (A encuesta S para nueva información) NO es lo que necesito. Encontré suficiente información acerca de cómo hacer eso.

Respuesta

14

Una opción es cambiar de startService() a bindService() y utilizar el patrón de encuadernación local. Luego, debe tener A llamada un método en S en algún momento para registrar un oyente o método de devolución de llamada. Entonces, S tendrá algo a lo que puede llamar en A cuando llegue cierta información. Puede ver un proyecto de muestra para ese here.

Alternativamente, puede dejar startService() en su lugar y usar una transmisión Intent para dejar que S le cuente a A acerca de la información que llega. Puede ver un proyecto de ejemplo que demuestre dicha difusión Intenthere.

+1

¡Gracias, eso es exactamente lo que estaba buscando! Mis esperanzas y creencias en los foros se han restaurado :) – nex

+0

Acaba de implementar su segunda sugerencia y funciona como un encanto. ¡gracias de nuevo! – nex

Cuestiones relacionadas