Получить контекст в сервисе
Есть ли надежный способ получить Context
из Service
?
Я хочу зарегистрировать приемник вещания для ACTION_PHONE_STATE_CHANGED
но мне не нужно мое приложение, чтобы всегда получать эту информацию, поэтому я не помещаю ее в Manifest
,
Однако я не могу позволить, чтобы широковещательный приемник был уничтожен GC, когда мне нужна эта информация, поэтому я регистрирую широковещательный приемник в Service
,
Следовательно, мне нужно Context
чтобы позвонить registerReceiver()
, Когда мне больше не нужно ACTION_PHONE_STATE_CHANGED
Я отменяю регистрацию
Какие-нибудь советы?
8 ответов
Service
продолжается ContextWrapper
который расширяется Context
, Следовательно Service
это Context
, использование 'this'
Ключевое слово в сервисе.
Service
продолжаетсяContextWrapper
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);