epo*_*rmd 54 android android-context
我正在构建一个通过AlarmManager触发警报的应用程序.
我希望能够通过它自己的非活动类来调用Alarm,但由于我没有扩展Activity,所以我似乎没有任何"上下文".这个概念让我困惑,我读过sdk文档.
我将如何使用:
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Run Code Online (Sandbox Code Playgroud)
在我的非活动课上?
此外,我假设获取上下文将允许我在我的非活动类中使用SharedPrefs和Intents?
Mar*_*nyi 40
您可以将上下文传递给非活动类,这是首选方法,也可以将应用程序的基本上下文封装到单例中,以允许您在应用程序内的任何位置访问上下文.在某些情况下,这可能是一个很好的解决方案,但在其他情况下,肯定不是一个好的解
无论如何,如果你想通过AlarmManager我触发警报,我很确定警报应该从一个Service或更好的方式继承IntentService,在这种情况下你可以通过this.getBaseContext()或者访问上下文this.getApplicationContext()
Jea*_*nal 18
Service并Activity继承自Context- 所以当你getSystemService在这些课堂上打电话时,你真的在打电话super.getSystemService.
如果你想Context在另一个类中有一个可用的,你可以将一个作为参数传递给该类的方法,保持对它的引用,等等.
编辑:代码示例.但严重的是,它是非常基础的 - 如果你了解继承和方法.
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) {
}
}
Run Code Online (Sandbox Code Playgroud)
Kev*_*ker 13
您可以尝试以下操作,它允许您获取视图正在运行的当前上下文.
alarmTest = (AlarmManager)this.getContext().getSystemService(Context.ALARM_SERVICE);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85138 次 |
| 最近记录: |