Получить контекст в сервисе - PullRequest
258 голосов
/ 23 июня 2011

Есть ли надежный способ получить Context от Service?

Я хочу зарегистрировать приемник вещания на ACTION_PHONE_STATE_CHANGED, но мне не нужно, чтобы мое приложение всегда получало эту информацию, поэтому я не помещаю ее в Manifest.

Однако я не могу позволить, чтобы широковещательный приемник был уничтожен GC, когда мне нужна эта информация, поэтому я регистрирую широковещательный приемник в Service. * * 1010

Следовательно, мне нужно Context, чтобы позвонить registerReceiver(). Когда мне больше не нужно ACTION_PHONE_STATE_CHANGED I отменить регистрацию it.

Какие-нибудь советы?

Ответы [ 5 ]

722 голосов
/ 23 июня 2011
58 голосов
/ 06 марта 2013

Service расширяется ContextWrapper, что расширяется Context. Следовательно, Service является Context. Используйте 'this' ключевое слово в сервисе.

29 голосов
/ 09 мая 2015
  1. Service расширяет ContextWrapper
  2. ContextWrapper расширяет Context

Итак ....

Context context = this;

(в классе обслуживания или деятельности)

7 голосов
/ 07 июня 2014

Поскольку Service является Context, контекст переменной должен быть this:

DataBaseManager dbm = Utils.getDataManager(this);   
3 голосов
/ 07 января 2019

Как Сервис уже является Контекстом Сам

Вы даже можете получить это через:

Context mContext = this;

ИЛИ

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