мое приложение что-то делает, когда экран становится черным, но я хочу, чтобы оно выполняло эту задачу только в том случае, если экран был выключен "сам по себе", через время ожидания экрана, а НЕ когда пользователь нажимает кнопку питания. Есть ли способ различить эти два события?
ACTION_SCREEN_OFF очевидно срабатывает в обоих случаях, и я не нашел никаких других намерений, которые могли бы соответствовать тому, что я ищу.
Ответ 1 · рейтинг 4 · berkus
На нижнем уровне происходит событие, когда время ожидания экрана истекает, посмотрите с помощью "adb logcat", и вы увидите это, копайте оттуда.
Ответ 2 · рейтинг 1 · Nelz11
Службы не могут напрямую обрабатывать события кнопок. Возможно, вы можете сделать так, чтобы ваша активность зарегистрировала широковещательный приемник, чтобы получать уведомления, когда экран гаснет, а затем сделать так, чтобы активность проверяла последнюю нажатую клавишу, чтобы увидеть, была ли это кнопка питания - если это не так, вы можете отправить транслируйте на свой сервис и запускайте все, что хотите.
Ответ 3 · рейтинг 1 · Sean
Это забавный вопрос :) Хотя это и не точно, вы можете попробовать замерить время, прошедшее с момента последнего касания пользователя и до того момента, когда ваша активность приостановится, и посмотреть, соответствует ли оно время отключения экрана
Ответ 4 · jimrandomh
Можете ли вы прослушать событие клавиатуры KEYCODE_POWER? Это может сделать то, что вы хотите. (Но порядок, в котором это и ACTION_SCREEN_OFF прибывают, может быть не гарантирован).