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.

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?

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.

  1. Declare un componente,
  2. Agregue el método de inyección a ese componente,
  3. Agregue un módulo que proporcione su servicio
  4. Crear el constructor de componentes
  5. Agregue su módulo al constructor
  6. 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)

  • ¿Debo usar PendingIntent.getService () o getBroadcast con AlarmManager?
  • La notificación sigue en la barra después de matar al servicio
  • Definición de la política de SELinux para el servicio del sistema Android: cómo configurar?
  • Manejar onActivityResult en un servicio
  • Android: ¿Cómo ejecutar el servicio cuando la aplicación es visible?
  • Android: Multithreading-Bluetooth SPP / RFCOMM-Cómo mantener activo mi BluetoothSocket y OutputStream al cambiar Actividades
  • Obtención de resultados de varias AsyncTasks
  • ¿Cómo diseñar interacción servicio-actividad para un simple reproductor de mp3?
  • Compruebe si el servicio se está ejecutando desde un receptor de difusión
  • Cómo tener varias instancias de Servicio en Android
  • Android: stopService () no llama a onDestroy ()!
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.