Как использовать getSystemService в классе без активности?
Я создаю приложение, которое запускает будильник через AlarmManager.
Я хотел бы иметь возможность вызвать Alarm через свой собственный класс неактивности, но поскольку я не расширяю Activity, у меня нет никакого "контекста". Эта концепция смущает меня, и я прочитал документы sdk.
Как я могу использовать:
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
в моем классе non-activty?
Кроме того, я предполагаю, что получение контекста позволит мне использовать SharedPrefs и Intents в моем классе неактивности?
Ответы
Ответ 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
Вам нужно передать контекст в класс без активности.