如何在非活动类中使用getSystemService?
我正在构build一个通过AlarmManager触发报警的应用程序。
我希望能够通过它自己的非活动类来调用Alarm,但由于我没有扩展Activity,所以我没有看到任何“上下文”。 这个概念混淆了我,我读过sdk文档。
我将如何去使用:
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
在我的非活动class?
另外,我假设获取上下文将允许我在我的非活动类中使用SharedPrefs和Intents?
您可以将上下文传递给非活动类,这是首选的方法,或者您可以将应用程序的基本上下文封装到单例中,从而允许您在应用程序中的任何位置访问上下文。 在某些情况下,这可能是一个很好的解决scheme,但在其他情况下,它肯定不是一个好的解
无论如何,如果你想通过AlarmManager
触发一个警报,我敢肯定,警报应该从一个Service
或更好的IntentService
,在这种情况下,你可以通过this.getBaseContext()
或this.getApplicationContext()
Service
和Activity
从Context
inheritance – 所以当你在这些类中调用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);
您需要将一个上下文传递给非活动类。