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

Как использовать getSystemService в классе без активности?

Я создаю приложение, которое запускает будильник через AlarmManager.

Я хотел бы иметь возможность вызвать Alarm через свой собственный класс неактивности, но поскольку я не расширяю Activity, у меня нет никакого "контекста". Эта концепция смущает меня, и я прочитал документы sdk.

Как я могу использовать:

alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

в моем классе non-activty?

Кроме того, я предполагаю, что получение контекста позволит мне использовать SharedPrefs и Intents в моем классе неактивности?

4b9b3361

Ответ 1

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

В любом случае, если вы хотите вызвать будильник через AlarmManager, я уверен, что сигнал тревоги должен наследоваться от Service или еще лучше от IntentService, и в таких случаях у вас есть доступ к контексту через this.getBaseContext() или this.getApplicationContext()

Ответ 2

Service и Activity наследуют от Context - поэтому, когда вы вызываете getSystemService в этих классах, вы действительно вызываете super.getSystemService.

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

Изменить: образец кода. Но серьезно, это чрезвычайно просто - если вы понимаете наследование и методы.

class MyActivity extends Activity { // Activity extends Context, so MyActivity also extends Context
  void someMethod() {
    MyOtherClass.useStaticContext(this);
    MyOtherClass instance = new MyOtherClass();
    instance.useInstanceContext(this.getApplicationContext());
  }
}
class MyOtherClass {
  static void useStaticContext(Context context) {
  }
  void useInstanceContext(Context context) {
  }
}

Ответ 3

Вы можете попробовать следующее: он позволяет получить текущий контекст, который просматривает представление.

alarmTest = (AlarmManager)this.getContext().getSystemService(Context.ALARM_SERVICE);

Ответ 4

Вам нужно передать контекст в класс без активности.