dabit_1 
|
Publicado: Mie May 27, 2009 2:03 pm Título del mensaje: Comunicacion entre Service y Activity |
|
|
| Necesito enviar información desde un servicio a una activity. No logro encontrar información ni ejemplos por ningun sitio, ni tan siquiera en ingles. Porfavor alguien sabe algo???? |
|
JaVaK 
|
Publicado: Mie May 27, 2009 2:08 pm Título del mensaje: |
|
|
Bienvenido dabit_1, no sé si será igual pero en un manual que hay sobre un Widget hay comunicación servicio-Widget, que se podría cambiar a servicio-Activity porque viene a ser lo mismo.
Míratelo por si te vale: http://www.android-spa.com/viewtopic.php?t=2416 |
|
dabit_1 
|
Publicado: Mie May 27, 2009 2:47 pm Título del mensaje: |
|
|
| Muchas gracias por la rapida respuesta, he estado mirando el codigo y veo cosas que con una activity no se pueden hacer, tp me aclaro muy bien con el codigo la verdad... si alguien supiera ponerme un ejemplo senzillo de paso de variables entre service y activity, gracias! |
|
javiel 
|
Publicado: Mie May 27, 2009 2:58 pm Título del mensaje: ... |
|
|
Que cosas, yo estoy mirando eso ahora exactamente
Estoy intentando crear un ejemplo sencillo pero está casi todo pero cuando actualizo una caja de texto por ejemplo, no me la actualiza
Este tuto te explica como hacerlo
http://developerlife.com/tutorials/?p=356
Pero como te digo, en el updateUI le pongo un setText() a un TextView y no me lo hace, aunque si puedo escribir en el log
¿hay alguna forma de refrescar un activity?
Sólo me queda eso, tengo el ejemplo casi terminado a falta de eso
Tengo prisas luego pongo el código |
|
dabit_1 
|
Publicado: Mie May 27, 2009 3:01 pm Título del mensaje: |
|
|
| Gracias javiel, voy a mirarme el ejemplo y a ver si consigo algo! |
|
Lu 
|
Publicado: Mie May 27, 2009 4:35 pm Título del mensaje: |
|
|
Hola,
No sé si aun os hace falta info sobre esto, pero hace unas semanas a mí me pasó igual. Os dejo el link del hilo porque al final explico como lo solucioné yo (para lo que yo necesitaba, que no sé si será lo mismo que lo que necesitais vosotros, o aunque no sea lo mismo igual lo podéis hacer así tambien).
http://www.android-spa.com/viewtopic.php?t=1790
Saludos  |
|
dabit_1 
|
Publicado: Mie May 27, 2009 5:14 pm Título del mensaje: |
|
|
| Muchas gracias Lu! parece lo que quiero, solo me queda una duda, en la clase Service que metodo es ejecutado al inicio? pruebo con onCreate y no se si es q lo escribo mal pero no me hace nada |
|
javiel 
|
Publicado: Mie May 27, 2009 5:17 pm Título del mensaje: ... |
|
|
Lu, estoy muy interesado en saber como lo haces, lo he leido pero no lo entiendo
De principio usas un BroadcastReceiver, que supongo que será una especie de recector, pero lo que no me queda claro es como envias información desde el servicio a la actividad.
Veo que es con esto:
| Código : | Intent i = new Intent(Intent.ACTION_VIEW); this.sendOrderedBroadcast(i, null);
|
Lo que no sé es como le envías información ¿desde un Intend? Porque usas Intent.ACTION_VIEW, estoy muy perdido.
Si por ejemplo yo quisiera pasar la localización del GPS (que es lo que me interesa) ¿como lo haría?
De principio pongo aquí el código que prometí, aunque estoy muy interesando que como lo haces tu Lu
PROGRAMA
Lo que hace es tener un contador que se actualiza cada segundo desde un servicio
PROBLEMA
Desde el update(int count) de la actividad no actualiza el TextView y ni muestra el Toast. Pero fijaros que si escribe en la consola
CODIGO
MyService.java
| Código : | package com. javielinux. pruebaservicio; import java.util.Timer;import java.util.TimerTask;import android.app.Service;import android.content.Intent;import android.os.IBinder;public class MyService extends Service { private Timer timer = new Timer(); private static final long UPDATE_INTERVAL = 1000; public static ServiceUpdateUIListener UI_UPDATE_LISTENER; private int count = 0; public static void setUpdateListener (ServiceUpdateUIListener l ) { UI_UPDATE_LISTENER = l; } @Override public IBinder onBind (Intent arg0 ) { return null; } @Override public void onCreate () { super. onCreate(); _startService (); } @Override public void onDestroy () { super. onDestroy(); _shutdownService (); } private void _startService () { timer. scheduleAtFixedRate( new TimerTask() { public void run () { count++; System. out. println("_startService(): " + count ); UI_UPDATE_LISTENER. update(count ); } }, 0, UPDATE_INTERVAL ); } private void _shutdownService () { if (timer != null) timer. cancel(); }} |
ServiceUpdateUIListener.java
| Código : | package com.javielinux.pruebaservicio;
public interface ServiceUpdateUIListener { public void update(int count); }
|
PruebaServicio.java (la actividad)
| Código : | package com. javielinux. pruebaservicio; import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class PruebaServicio extends Activity implements ServiceUpdateUIListener { TextView text; @Override public void onCreate (Bundle savedInstanceState ) { super. onCreate(savedInstanceState ); setContentView (R. layout. main); text = (TextView ) findViewById (R. id. count); text. setText("..."); Toast. makeText(this, "Empezando..." , Toast. LENGTH_SHORT). show(); Button startButton = (Button) findViewById (R. id. start); startButton. setOnClickListener(new View. OnClickListener() { public void onClick (View view ) { startService (); } }); Button stopButton = (Button) findViewById (R. id. stop); stopButton. setOnClickListener(new View. OnClickListener() { public void onClick (View view ) { stopService (); } }); MyService. setUpdateListener(this); } private void startService () { Intent svc = new Intent (this, MyService. class); startService (svc ); } private void stopService () { Intent svc = new Intent (this, MyService. class); stopService (svc ); } @Override public void update (int count ) { System. out. println("update(): " + count ); Toast. makeText(this, "Contadores: " + count, Toast. LENGTH_SHORT). show(); text. setText("Contador: " + count ); } } |
main.xml (layout)
| Código : | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Contador:" android:layout_marginTop="20px" android:layout_marginBottom="20px" android:id="@+id/count" /> <Button android:text="Arrancar servicio" android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Parar servicio" android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout>
|
|
|
javiel 
|
Publicado: Mie May 27, 2009 5:19 pm Título del mensaje: ... |
|
|
recordad que servicio tiene que estar en el Manifest
<service android:name="MyService"></service> |
|
Lu 
|
|
Lu 
|
Publicado: Mie May 27, 2009 5:33 pm Título del mensaje: |
|
|
EStoy mirando tu post Javiel...dame unos minutos que lo entienda bien, jeje  |
|
Lu 
|
Publicado: Mie May 27, 2009 5:53 pm Título del mensaje: |
|
|
A ver, creo que lo que quieres es pasarle la variable "count" desde el servicio a la activity. Ahora mismo en el código que has posteado no veo que se la pases en ningún sitio y por eso no se te actualiza.
Nuestros problemas son un poco distintos. Mi servicio lo que hacia era cada X tiempo hacía una peticion a unos web services y al terminar la llamada "avisaba" a la activity. Yo no le pasaba ningún dato. Como bien has dicho, el broadcastReceiver es como un receptor, y cuando el service llamaba al método sendOrderedBroadCast, la actividad recoge ese aviso del service. No entiendo mucho de intents, pero cuando puse lo de Intent.ACTION_VIEW es como un filtro. En la actividad registré el receiver asi: this.registerReceiver(receiver, new IntentFilter(Intent.ACTION_VIEW)); El servicio manda el aviso con la accion Intent.ACTION_VIEW y si coincide con el filtro de la actividad, pues ésta recoge el mensaje (sino no). Ten en cuenta tambien que la actividad debe estar en su ciclo activo para enterarse de que le ha llegado un mensaje.
Como te he dicho, no tuve que pasar ningún dato y no soy experta en intents, pero supongo que dentro del intent podrás meter el dato (con un bundle o algo asi no?) y en el listener del BroadcastReceiver fijate que puedes recuperar el intent y entonces supongo que podrás sacar el dato de ahí para entonces poder mostrarlo en la activity.
Se que me explico fatal, espero haberme hecho entender. Ya te digo que lo de pasar datos yo no lo hice, pero supongo que se haría así. Si tienes mas preguntas con algo dimelo, que ya te digo que me explico fatal. Espero que te sirva.
Saludos  |
|
javiel 
|
|
Lu 
|
Publicado: Mie May 27, 2009 6:31 pm Título del mensaje: |
|
|
Ahm vale, ya lo veo mejor, es importante esa linea, jejeje. Al final voy a salir aprendiendo yo más que nadie, no se me había ocurrido nunca hacerlo así. Claro, cuando llamas al update desde el service, estas llamando al update de la propia Activity. Pues si que es raro que no se te refresque la pantalla...
Bueno, que vaya bien la prueba al aire libre, jeje.
Saludos  |
|
dabit_1 
|
Publicado: Mie May 27, 2009 7:23 pm Título del mensaje: |
|
|
Muchas gracias a todos, gracias a vosotros ya e conseguido pasar la inforamcion, ahora el problema q tengo es que parece que el stopService no me hace ni caso, hago un:
this.stopService(servei)
donde "servei" es el Intent instanciado asi:
servei = new Intent(this, Servei.class);
alguna idea de pq no se detiene???? |
|
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|