Comment utiliser getSystemService dans une classe hors activité?

Je construis une application qui déclenche une alarme via AlarmManager.

Je voudrais pouvoir appeler l’alarme via sa propre classe de non-activité, mais comme je ne prolonge pas l’activité, je ne semble pas avoir de «contexte». Ce concept me confond, et j’ai lu les documents sdk.

Comment pourrais-je aller avec:

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

dans ma classe de non-activité?

En outre, je suppose que l’obtention d’un contexte me permettra d’utiliser également les objectives et les intentions partagés dans mon cours hors 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 dans un singleton, ce qui vous permet d’accéder au contexte n’importe où dans l’application. Dans certains cas, cela pourrait être une bonne solution mais dans d’autres, ce n’est certainement pas une bonne solution.

Quoi qu’il en soit, si vous souhaitez déclencher une alarme via AlarmManager je suis certain que l’alarme doit hériter d’un Service ou mieux encore d’ IntentService . Dans ce cas, vous avez access 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 en 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’inheritance 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, cela vous permet d’obtenir le contexte actuel traversé par la vue.

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

Vous devez passer un contexte dans la classe de non-activité.