Где я должен отменить регистрацию Screen Off BroadcastReceiver?

Мое приложение регистрирует BroadcastReceiver для каждого действия, которое обнаруживает состояние SCREEN_OFF. Но если я отменю регистрацию приемника в onPause(), он никогда не сработает. Я думаю, что onPause() отменяет его регистрацию до того, как сможет получить трансляцию SCREEN_OFF. В таком случае, где я должен отменить регистрацию приемника?

Регистрация приемника в манифесте должна соответствовать цели моего приложения, но я где-то читал, что Intent.ACTION_SCREEN_OFF не может быть зарегистрирован таким образом.


person Sam    schedule 03.07.2013    source источник


Ответы (2)


Такие приемники в значительной степени бесполезны, потому что выключение экрана обычно приводит к приостановке действий. Это полезно для фоновых компонентов, таких как Служба, которые хотели бы приостановить работу, когда экран выключен.

Состояние экрана также может быть определено по запросу:

    PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
    boolean isScreenOn = pm.isScreenOn();
person S.D.    schedule 03.07.2013

Отмените регистрацию получателя в методе onDestroy(). Таким образом, как только действие будет уничтожено, получатель будет разрегистрирован.

person S.A.Norton Stanley    schedule 03.07.2013
comment
Привет, спасибо за ответ, но если я прав, onDestroy() не будет вызываться, когда новая активность выходит на передний план (если я не вызову finish(), чего я не хочу делать). - person Sam; 03.07.2013
comment
No on destroy не вызывается, когда на передний план выходит новая активность. - person S.A.Norton Stanley; 03.07.2013