BroadcastReceiver для блокировки экрана не срабатывает - PullRequest
2 голосов
/ 10 октября 2011

Я пытаюсь отключить обновления местоположения GPS при блокировке экрана.Прочитав ответ на этот вопрос Android - как получить широковещательные намерения ACTION_SCREEN_ON / OFF?

Я написал некоторый код для реализации BroadcastReceiver, но он не работает, когда экран выключается.

Я зарегистрировал BroadcastReceiver в своем коде с

@Override
public void onResume() {
    super.onResume();
    IntentFilter iFilter = new IntentFilter();
    iFilter.addAction("android.intent.action.ACTION_SCREEN_ON");
    iFilter.addAction("android.intent.action.ACTION_SCREEN_OFF");
    registerReceiver(screenStatReceiver, iFilter);

, а сам получатель пока что просто заглушка:

    public BroadcastReceiver screenStatReceiver = new BroadcastReceiver() {

       @Override
       public void onReceive(Context context, Intent intent) {
       // TODO Auto-generated method stub
       Log.d("BCAST_TAG", "Got broadcast");         
       String action = intent.getAction();

       }
};

и в манифесте Iесть:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Есть идеи, почему он не запускается при отладке на телефоне?

Ответы [ 3 ]

8 голосов
/ 10 октября 2011
1 голос
/ 03 сентября 2014

Для этой проблемы вам нужно создать бесконечный сервис, который регистрирует локальный широковещательный приемник для этих намерений.Если вы сделаете это, то ваше приложение будет искать отключенный экран, но убедитесь, что вам нужно создать службу, которая всегда будет работать в фоновом режиме, например, приёмник перезагрузки

0 голосов
/ 10 октября 2011

Вы регистрируете приемник в методе onResume().Почему вы не регистрируете его в onCreate(), чтобы иметь возможность постоянного «прослушивания»?

В этом случае вы прослушиваете изменения только после возобновления действия.

...