如何在非活动类中使用getSystemService?

我正在构build一个通过AlarmManager触发报警的应用程序。

我希望能够通过它自己的非活动类来调用Alarm,但由于我没有扩展Activity,所以我没有看到任何“上下文”。 这个概念混淆了我,我读过sdk文档。

我将如何去使用:

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

在我的非活动class?

另外,我假设获取上下文将允许我在我的非活动类中使用SharedPrefs和Intents?

您可以将上下文传递给非活动类,这是首选的方法,或者您可以将应用程序的基本上下文封装到单例中,从而允许您在应用程序中的任何位置访问上下文。 在某些情况下,这可能是一个很好的解决scheme,但在其他情况下,它肯定不是一个好的解

无论如何,如果你想通过AlarmManager触发一个警报,我敢肯定,警报应该从一个Service或更好的IntentService ,在这种情况下,你可以通过this.getBaseContext()this.getApplicationContext()

ServiceActivityContextinheritance – 所以当你在这些类中调用getSystemService时,你确实在调用super.getSystemService

如果你想在另一个类中有一个Context ,你可以将一个作为parameter passing给这个类的一个方法,并保存对它的引用等等。

编辑 :代码示例。 但严重的是,这是非常基本的 – 如果你了解inheritance和方法。

 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) { } } 

您可以尝试以下操作,它允许您获取视图正在运行的当前上下文。

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

您需要将一个上下文传递给非活动类。