Je crée une application qui déclenche une alarme via AlarmManager.
J'aimerais pouvoir appeler l'alarme via sa propre classe de non-activité, mais comme je ne prolonge pas Activity, je ne semble pas avoir de "contexte". Ce concept m'embrouille et j'ai lu les documents sdk.
Comment pourrais-je utiliser:
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
dans ma classe de non-activité?
En outre, je suppose que l'obtention du contexte me permettra d'utiliser également SharedPrefs et Intents dans ma classe de non-activité?
Vous pouvez passer le contexte à la classe de non-activité qui est la méthode préférée ou vous pouvez encapsuler le contexte de base de l'application à un singleton qui vous permettrait d'accéder au contexte n'importe où dans l'application. Dans certains cas, cela peut être une bonne solution, mais dans d'autres, ce n'est certainement pas une bonne solution.
Quoi qu'il en soit, si vous voulez déclencher une alarme via le AlarmManager
je suis à peu près sûr que l'alarme devrait hériter d'un Service
ou mieux encore de IntentService
et dans de tels cas, vous avez accès au contexte via this.getBaseContext()
ou this.getApplicationContext()
Service
et Activity
héritent de Context
- donc lorsque vous appelez getSystemService
dans ces classes, vous appelez vraiment super.getSystemService
.
Si vous voulez avoir un Context
disponible dans une autre classe, vous pouvez en passer un comme argument à une méthode de cette classe, en garder une référence, etc.
Modifier: exemple de code. Mais sérieusement, c'est extrêmement basique - si vous comprenez l'héritage et les méthodes.
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) {
}
}
Vous pouvez essayer ce qui suit, il vous permet d'obtenir le contexte actuel dans lequel la vue est en cours d'exécution.
alarmTest = (AlarmManager)this.getContext().getSystemService(Context.ALARM_SERVICE);
Vous devez passer un contexte dans la classe de non-activité.