Заменить ACTION_SCREEN_ON на ACTION_USER_PRESENT? - PullRequest
3 голосов
/ 19 сентября 2011

У меня есть продолжительная служба прослушивания для входа датчика.Чтобы сохранить заряд батареи, я остановил выборку датчиков на ACTION_SCREEN_OFF и снова запустил ее снова на ACTION_SCREEN_ON.

Однако часто я просто включаю телефон, чтобы быстро взглянуть на часы на экране блокировки (чтобы проверить текущее время), а затем снова выключаю его, не разблокируя телефон.В этом случае нет никакой причины раскручивать датчики только для того, чтобы сразу же выключить и снова отключить.

Поэтому я попытался заменить ACTION_SCREEN_ON на ACTION_USER_PRESENT в моем приемнике вещания.Это работало нормально, за исключением одного особого случая: когда экран гаснет и я сразу нажимаю кнопку питания (или кнопку домой), экран блокировки пропускается.И тогда ACTION_USER_PRESENT никогда не принимается, только ACTION_SCREEN_ON.

Есть ли способ для моего широковещательного приемника после получения ACTION_SCREEN_ON узнать, активна ли блокировка экрана и ожидать ACTION_USER_PRESENT позже?Или, если экран блокировки пропущен, не ждать ACTION_USER_PRESENT и продолжить и сразу же перезапустить семплирование?

Ответы [ 2 ]

3 голосов
/ 16 января 2016

До Android 4.4, если экран включен и экран блокировки отключен, запускается только ACTION_SCREEN_ON. Для Android 5.0 в этом случае запускаются как ACTION_SCREEN_ON, так и ACTION_USER_PRESENT.

0 голосов
/ 19 сентября 2011

У меня длительное прослушивание службы для входа датчика.

Имейте в виду, что пользователям не нравятся "долгосрочные службы", и, если вы не используете startForeground(), Android может отключить вашу службу.

Я остановил выборку датчиков на ACTION_SCREEN_OFF и снова запустил ее снова на ACTION_SCREEN_ON.

Если вы не используете WakeLock, устройство все равно должно заснуть, пока ваш датчик прослушивания зарегистрирован. Я не уверен, что вы что-то получаете с помощью ACTION_SCREEN_OFF / ACTION_SCREEN_ON.

есть ли способ для моего широковещательного приемника после получения ACTION_SCREEN_ON узнать, активна ли блокировка экрана и ожидать ACTION_USER_PRESENT позже?

Вы можете попробовать inKeyguardRestrictedInputMode() на KeyguardManager. Похоже, это должно работать, хотя я не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...