서비스에서 컨텍스트 얻기


280

에서 얻을 수있는 확실한 방법 ContextService있습니까?

브로드 캐스트 리시버를 등록하고 ACTION_PHONE_STATE_CHANGED싶지만 항상이 정보를 얻기 위해 내 앱이 필요하지 않으므로에 넣지 않습니다 Manifest.

그러나이 정보가 필요할 때 GC가 브로드 캐스트 리시버를 종료 할 수 없으므로에 브로드 캐스트 리시버를 등록합니다 Service.

따라서 Context에 전화 해야합니다 registerReceiver(). 나는 더 이상 필요없는 경우 ACTION_PHONE_STATE_CHANGEDI 등록 취소 를.

팁이 있습니까?

답변:


781

3
이 문제가 있었지만 컨텍스트가없는 작업자 스레드였습니다. 스레드를 만들 때 컨텍스트를 전달하여 해결했습니다.
ctrl-alt-delor

17
참고 : 서비스 내 컨텍스트는 서비스에서 onStart 또는 onStartCommand까지 표시되지 않습니다. stackoverflow.com/questions/7619917/…
class

36
이것은 stackoverflow에서 가장 높은 표를 얻은 최단 답변 일 수 있습니다
Sayka

4
답변의 크기와받은 공표를 고려할 때, 나는 SO의 다른 답변이 이것을 이길 것이라고 생각하지 않습니다 :)
Amruta-Pani

2
이 4 단어는 내가 3 시간 동안 해결하려고했던 내 문제를 해결했습니다.
Nirup Iyer

64

Service연장 ContextWrapper되는 연장 Context. 따라서는 Service입니다 Context. 'this'서비스에서 키워드를 사용하십시오 .


31
  1. Service 연장하다 ContextWrapper
  2. ContextWrapper 연장하다 Context

그래서....

Context context = this;

(서비스 또는 액티비티 클래스)


8

이후 ServiceContext변수 컨텍스트해야합니다 this:

DataBaseManager dbm = Utils.getDataManager(this);   

5

으로 서비스가 이미 있습니다 문맥 자체

당신은 그것을 통해 얻을 수 있습니다 :

Context mContext = this;

또는

Context mContext = [class name].this;  //[] only specify the class name
// mContext = JobServiceSchedule.this; 

1

누군가가 얻는 경우를 대비 NullPointerException하여 내부 컨텍스트를 가져와야합니다.onCreate().

Service입니다 Context, 이렇게하십시오 :

@Override
public void onCreate() {
    super.onCreate();
    context = this;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.