Получить контекст в сервисе

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

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

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

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

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

8 ответов

Решение

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

  1. Service продолжается ContextWrapper
  2. ContextWrapper продолжается Context

Так....

Context context = this;

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

На всякий случай кто-то получает NullPointerException, вам нужно получить контекст внутри onCreate().

Service это Context, так что сделайте это:

@Override
public void onCreate() {
    super.onCreate();
    context = this;
}

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

DataBaseManager dbm = Utils.getDataManager(this);   

Так как сервис уже сам по себе является контекстом

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

Context mContext = this;

ИЛИ ЖЕ

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

Если вам нужен контекст службы, используйте thisключевое слово. если вам нужен контекст активности, вы можете получить к нему доступ, используя статическую переменную, подобную этой

      public static Context context;

в деятельности onCreate()

      context=this;

теперь вы можете получить доступ к этому контексту внутри службы

YourServiceClass.this

GPSTracker gpsTracker = new GPSTracker(TimeService.this);
Другие вопросы по тегам