57 votes

Comment utiliser getSystemService dans une classe de non activité?

Je suis la construction d'une application qui déclenche une alarme via AlarmManager.

Je voudrais être en mesure d'appeler l'Alarme via son propre non-activité de la classe, mais comme je ne suis pas l'extension de l'Activité, je ne semble pas avoir de "contexte". Ce concept me confond, et j'ai lu le sdk docs.

Comment pourrais-je aller sur l'aide de:

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

dans ma non-activité de la classe?

Aussi, je suis en supposant que l'obtention de contexte qui va me permettre d'utiliser SharedPrefs et les Intentions de ma non-activité de la classe ainsi?

43voto

Marek Szanyi Points 983

Vous pouvez passer le contexte de la non-activité de la classe qui est la voie préférée ou vous pouvez encapsuler la base de contexte de l'application à un singleton qui vous permettra d'accéder au contexte de n'importe où dans l'application. Dans certains cas, cela pourrait être une bonne solution, mais dans d'autres, c'est certainement pas un bon.

De toute façon, si vous voulez déclencher une alarme via l' AlarmManager je suis sûr que l'alarme doit hériter d'une Service ou mieux encore d' IntentService et dans de tels cas, vous avez accès à du contexte via this.getBaseContext() ou this.getApplicationContext()

20voto

Jean Hominal Points 7001

Service et Activity hériter d' Context - ainsi, lorsque vous appelez getSystemService dans ces classes, vous êtes vraiment appelant super.getSystemService.

Si vous voulez avoir un Context disponible dans une autre classe, vous pouvez passer de l'un comme argument à une méthode de cette classe, de conserver une référence à elle, etc.

Edit: exemple de Code. Mais sérieusement, il est extrêmement base - 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) {
  }
}

15voto

Kevin Points 4235

Vous pouvez essayer ce qui suit, il vous permet d’obtenir le contexte actuel dans lequel la vue est exécutée.

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

4voto

Ryan Reeves Points 6265

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X