是否有可靠的方法从Context
获取Service
?
我想为ACTION_PHONE_STATE_CHANGED
注册广播接收器,但我不需要我的应用程序始终获取此信息,因此我不会将其放在Manifest
中。
但是,当我需要这些信息时,我不能让GC杀死广播接收器,所以我在Service
注册广播接收器。
因此,我需要Context
来呼叫registerReceiver()
。
当我不再需要ACTION_PHONE_STATE_CHANGED
我取消注册时。
任何提示?
答案 0 :(得分:714)
答案 1 :(得分:58)
Service
扩展ContextWrapper
,扩展Context
。因此Service
是Context
。
在服务中使用'this'
关键字。
答案 2 :(得分:7)
由于Service
是Context
,因此变量上下文必须为this
:
DataBaseManager dbm = Utils.getDataManager(this);
答案 3 :(得分:4)
以防万一有人得到NullPointerException
,您需要在onCreate().
内获取上下文
Service
是Context
,请这样做:
@Override
public void onCreate() {
super.onCreate();
context = this;
}
答案 4 :(得分:3)
服务本身已经是上下文
您甚至可以通过以下方式获得它:
Context mContext = this;
OR
Context mContext = [class name].this; //[] only specify the class name
// mContext = JobServiceSchedule.this;