Различать время ожидания экрана и нажатие кнопки питания?

мое приложение что-то делает, когда экран становится черным, но я хочу, чтобы оно выполняло эту задачу только в том случае, если экран был выключен «сам по себе», через время ожидания экрана, а НЕ когда пользователь нажимает кнопку питания. Есть ли способ различить эти два события?

ACTION_SCREEN_OFF очевидно срабатывает в обоих случаях, и я не нашел никаких других намерений, которые могли бы соответствовать тому, что я ищу.


person Nick    schedule 04.05.2010    source источник
comment
Что ты пытаешься сделать? Там может быть другое действие, чтобы слушать.   -  person CaseyB    schedule 04.05.2010
comment
Я пытаюсь выполнить простой расчет, когда время ожидания экрана истекло, но не когда пользователь нажимает кнопку питания, чтобы «принудительно» выключить экран. Timeout-Action было бы здорово, но я пока не нашел ничего подобного. Можно ли запросить, включен ли экран блокировки (что, как я полагаю, обычно происходит только при нажатии кнопки питания, по крайней мере, на N1)?   -  person Nick    schedule 05.05.2010
comment
Почему вы хотите сделать это только в этой ситуации? Если вы объясните, что и почему, возможно, кто-то предложит вам лучшее решение.   -  person o0'.    schedule 05.05.2010
comment
Может ли это помочь: stackoverflow.com/a/8941006/969325   -  person Warpzit    schedule 18.05.2013
comment
Спасибо, Warpzit, я проверю!   -  person Nick    schedule 19.05.2013


Ответы (4)


На нижнем уровне происходит событие, когда время ожидания экрана истекает, посмотрите с помощью «adb logcat», и вы увидите это, копайте оттуда.

person berkus    schedule 15.05.2010
comment
Спасибо за Ваш ответ. Я видел это, но подумал, что, поскольку это не публичная трансляция, я не могу ее слушать, но я уверен, что найду что-нибудь об этом в гугле, если вы скажете, что это теоретически возможно (хотя и не обычными средствами). , Наверное). Спасибо! - person Nick; 16.05.2010

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

person Nelz11    schedule 22.05.2013

Это забавный вопрос :) Хотя это и не точно, вы можете попробовать замерить время, прошедшее с момента последнего касания пользователя и до того момента, когда ваша активность приостановится, и посмотреть, соответствует ли оно время отключения экрана

person Sean    schedule 22.05.2013

Можете ли вы прослушать событие клавиатуры KEYCODE_POWER? Это может сделать то, что вы хотите. (Но порядок, в котором это и ACTION_SCREEN_OFF прибывают, может быть не гарантирован).

person jimrandomh    schedule 06.05.2010
comment
Привет, спасибо за ответ! Это хорошая идея, хотя я только что попробовал, и она не работает, похоже, невозможно перехватить этот код ключа: groups.google.com/group/android-developers/browse_thread/thread/ Кроме того, мне нужно зарегистрировать эту систему ключевых событий -wide, потому что я использую сервис, что тоже невозможно, я думаю :-/ Но спасибо за вашу помощь, это хорошая идея, если бы она работала, это было бы идеально :-)! - person Nick; 07.05.2010