2011-08-17 19 views
6

En este momento, la Actividad principal (Ley A) inicia un Servicio que contiene la Conexión Bluetooth. (Se une el Servicio)¿Cómo implementar mejor dos actividades compartiendo un servicio (con conexión Bluetooth)?

El servicio es una versión modificada de BluetoothChatService (Android BluetoothChat de muestra) ... ... modificado con un añadido Messenger y Manejador de acuerdo con MessengerService (Android Muestra Mensajero remoto)

La actividad A asegura que el Bluetooth está conectado a un dispositivo externo y luego inicia otra actividad (Ley B).

El problema es conseguir que el Servicio siga funcionando y que sirva la Conexión Bluetooth a la nueva actividad sin problemas. No sé cómo:

  • Asegúrese de que el servicio no se reinicia o reinstanced, cuando se cambia de actividad de A a B

  • Asegúrese de que la funcionalidad de la mensajería funciona como se desea (de la actividad actualmente activo)

¿es necesario volver a vincular el servicio a la nueva actividad, y cómo puedo asegurar que no se pierde la conexión BT (debido a otra instancia de servicio)? ¿O necesito pasar el objeto de Messenger a la nueva actividad para comunicarme con el Servicio ya instanciado? Si es así, ¿cómo hago eso mejor?

¡Muy agradecido por las respuestas!

Respuesta

1

Usted o subclase Application y almacenar la información en ese país (ver here), o usted podría hacer su "servicio" un producto único, por lo que tiene un miembro estático de su propio tipo que inicializar sólo si es nulo.

6

Haga que el servicio sea "adhesivo" para que continúe funcionando. Y crea una clase de actividad base para tus 2 actividades. La clase de actividad base puede manejar toda la funcionalidad común de enlace con el servicio y proporcionar la comunicación adecuada. Definitivamente recomendaría desconectar su servicio cuando las actividades pause y volver a vincularlos en las actividades cuando se reanuden. Pero esto se puede hacer una vez en la actividad de la clase base común.

El enlace al servicio solo debe iniciarse si no se está ejecutando y si enlaza/desasigna en Reanudar/Pausa, debe tener solo una conexión activa al servicio en un momento dado.

1

Esta es una vieja pregunta, pero me encontré con esta situación hoy y se me ocurrió una solución que funciona en base a las otras respuestas. Como no pude encontrar una implementación funcional, la publicaré para otros que puedan tener curiosidad. Creé un "servicio fijo" y luego una clase de ServiceManager que es responsable de administrar el ciclo de vida y el enlace para el Servicio. Luego coloco la clase ServiceManager en una subclase de Aplicación para que las Actividades puedan acceder a ella como un ámbito global. Funciona bien. La fuente está disponible en GitHub.

Cuestiones relacionadas