Подтвердить что ты не робот

Использование кинжала 2 для ввода в эксплуатацию

У меня есть приложение, которое в основном является службой, которая работает все время и сигнализирует пользователю, когда что-то происходит.

Когда служба создает тревогу, ей необходимо передать ее context, чтобы сигнал тревоги вызывал, когда что-то происходит.

Например:

public MyService extends Service{
    private SomeAlarm alarm;

    @Override
    public void onCreate() {
        super.onCreate();
        alarm = new SomeAlarm(MyService.this);
    }
}

Как я могу вставить класс SomeAlarm в службу и указать SomeAlarm контекст службы как переменную?

4b9b3361

Ответ 1

Я написал код с верхней части головы, поэтому может быть опечатка или две.

Вы делаете это точно так же, как при вводе материала в действия.

  • Объявить компонент,
  • добавьте метод инъекции к этому компоненту,
  • добавить модуль, предоставляющий вашу службу
  • создать компоновщик компонентов
  • добавьте свой модуль в конструктор
  • введите свою службу компонентом

Ваш модуль и компонент будут выглядеть примерно так (возможно, добавить некоторые области)

@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);
}

Затем в onCreate просто создайте свой компонент и введите свой сигнал тревоги.

@Inject
private SomeAlarm alarm;

public void onCreate() {
    DaggerMyServiceComponent.builder()
            .serviceModule(new ServiceModule(this))
            .build()
            .inject(this);

    alarm.doStuff();
}

Это предполагает, что ваш аварийный сигнал может быть сконструирован конструктором с помощью конструктора с комментариями @Inject, как это:

class SomeAlarm {
    @Inject
    SomeAlarm(MyService service) {
        /*constructor stuff*/
    }
}

Иначе вы просто добавили бы создание тревоги в свой модуль.

Ответ 2

Имел аналогичную проблему, Оказалось, что я вызывал Builder() (Uppercase B) Правильным должен быть построитель (нижний регистр b)