在服务中获取上下文

时间:2011-06-22 20:33:17

标签: android broadcastreceiver android-service

是否有可靠的方法从Context获取Service

我想为ACTION_PHONE_STATE_CHANGED注册广播接收器,但我不需要我的应用程序始终获取此信息,因此我不会将其放在Manifest中。

但是,当我需要这些信息时,我不能让GC杀死广播接收器,所以我在Service注册广播接收器。

因此,我需要Context来呼叫registerReceiver()。  当我不再需要ACTION_PHONE_STATE_CHANGED取消注册时。

任何提示?

5 个答案:

答案 0 :(得分:714)

答案 1 :(得分:58)

Service扩展ContextWrapper,扩展Context。因此ServiceContext。 在服务中使用'this'关键字。

答案 2 :(得分:7)

由于ServiceContext,因此变量上下文必须为this

DataBaseManager dbm = Utils.getDataManager(this);   

答案 3 :(得分:4)

以防万一有人得到NullPointerException,您需要在onCreate().内获取上下文

ServiceContext,请这样做:

@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;