Uzyskaj kontekst w usłudze


280

Czy jest jakiś niezawodny sposób, aby uzyskać ContextodService ?

Chcę zarejestrować odbiornik emisji, ACTION_PHONE_STATE_CHANGEDale nie potrzebuję mojej aplikacji, aby zawsze otrzymywać te informacje, więc nie umieszczam ich w Manifest.

Nie mogę jednak dopuścić, aby odbiornik telewizyjny został zabity przez GC, gdy potrzebuję tych informacji, więc rejestruję odbiornik w Service.

Dlatego muszę Contextzadzwonić registerReceiver(). Kiedy już nie potrzebuję ACTION_PHONE_STATE_CHANGED, wyrejestrowuję go.

Jakieś wskazówki?

Odpowiedzi:


780

3
Miałem ten problem, ale okazało się, że to wątek roboczy nie miał kontekstu. Rozwiązałem to, podając kontekst podczas konstruowania wątku.
ctrl-alt-delor

17
Uwaga: kontekst usługi nie będzie widoczny, dopóki onStart lub onStartCommand w usługach: stackoverflow.com/questions/7619917/…
klasa

36
To może być najkrótsza odpowiedź z największą liczbą głosów w
przepełnieniu stosu

4
biorąc pod uwagę rozmiar otrzymanych odpowiedzi i głosów pozytywnych, nie sądzę, aby jakakolwiek inna odpowiedź w SO
mogła

2
te 4 słowa właśnie rozwiązały mój problem, który próbowałem rozwiązać przez 3 godziny.
Nirup Iyer,

64

Servicerozszerza, ContextWrapperktóry się rozszerza Context. Dlatego Servicejest to Context. Użyj 'this'słowa kluczowego w serwisie.


31
  1. Service rozszerza się ContextWrapper
  2. ContextWrapper rozszerza się Context

Więc....

Context context = this;

(w klasie usług lub działalności)


8

Ponieważ Servicejest to Contextzmiennym kontekstem musi być this:

DataBaseManager dbm = Utils.getDataManager(this);   

5

Ponieważ obsługa jest już Context sam

możesz nawet przejść przez:

Context mContext = this;

LUB

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

1

na wypadek, gdyby ktoś coś dostał NullPointerException, musisz uzyskać kontekstonCreate().

Servicejest Context, więc zrób to:

@Override
public void onCreate() {
    super.onCreate();
    context = this;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.