Uso de Dagger 2 para inyectar en servicio
Tengo una aplicación que es básicamente un servicio que se ejecuta todo el tiempo y las alarmas del usuario cuando sucede algo.
Cuando el servicio crea la alarma, necesita darle su context
para que la alarma pueda hacer callbacks al servicio cuando algo sucede.
- Cómo pasar un contexto de actividad en una aplicación a un servicio en otra aplicación
- Service vs Thread en Android
- Android reproduciendo música en fondo
- Diálogo de alerta del servicio de Android
- ((Botón)) dentro de un servicio no funciona
Por ejemplo:
public MyService extends Service{ private SomeAlarm alarm; @Override public void onCreate() { super.onCreate(); alarm = new SomeAlarm(MyService.this); } }
¿Cómo puedo inyectar la clase SomeAlarm
en el servicio y dar al SomeAlarm
el contexto del servicio como una variable?
- Transmitir los datos de la actividad al servicio mediante un intento
- Servicio eficiente de fondo para el seguimiento de la ubicación del usuario
- Múltiples instancias de IntentService en Android
- AudioSource.VOICE_CALL no funciona en android 4.0 pero funciona en android 2.3
- Android: estado de la aplicación cuando la aplicación está fuera de pila debido a limitación de memoria
- Evitar que algunos usuarios cierren el servicio de Android
- Detenga el servicio de Android cuando la aplicación se cierra con el administrador de tareas
- ¿Comunicación Bluetooth en hilo o servicio en Android?
Escribí el código desde la parte superior de mi cabeza, así que podría haber un error tipográfico o dos.
Lo haces de la misma manera que al inyectar cosas en las actividades.
- Declare un componente,
- Agregue el método de inyección a ese componente,
- Agregue un módulo que proporcione su servicio
- Crear el constructor de componentes
- Agregue su módulo al constructor
- Inyecte su servicio con el componente
Su módulo y componente se vería algo como esto (tal vez agregar algún ámbito)
@Module class ServiceModule { MyService mService; ServiceModule(MyService service) { mService = service; } @Provides MyService provideMyService() { return mService; } } @Component(modules=ServiceModule.class) interface MyServiceComponent { void inject(MyService service); }
A continuación, en onCreate
sólo crear su componente e inyectar su alarma.
@Inject private SomeAlarm alarm; public void onCreate() { DaggerMyServiceComponent.builder() .serviceModule(new ServiceModule(this)) .build() .inject(this); alarm.doStuff(); }
Esto supone que su alarma puede ser inyectada por constructor teniendo un constructor anotado @Inject
como este:
class SomeAlarm { @Inject SomeAlarm(MyService service) { /*constructor stuff*/ } }
De lo contrario sólo añadir la creación de alarma a su módulo.
Tenía un problema similar, Resultó que estaba llamando a Builder () (U mayúscula) Corregir uno debe ser constructor (b minúscula)
- Cómo arreglar este código todas las pantallas de Android
- ¿Cómo obfuscate el proyecto con Dagger 2.0 usando Proguard?