2013-07-25 5 views
2

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

Проблема, с которой я сталкиваюсь, заключается в том, что при нажатии кнопки питания событие «onSensorChanged» датчика освещенности запускается по какой-либо причине. Это означает, что если пользователь нажимает кнопку питания, чтобы выключить экран, он автоматически включается, если он находится в правильном освещении.

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

Есть ли еще один возможный (возможно, более логичный) подход к этой проблеме?

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

Спасибо.

ответ

0

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

Edit: Еще одна идея ...

Что вы можете сделать, это отслеживать в последний раз ACTION_SCREEN_OFF Намерение был уволен. Если время меньше определенного порога (0,05 с?) С момента вызова вашего onSensorChanged, вы можете просто игнорировать (или, по крайней мере, не возвращать его обратно на).

+0

Спасибо за ответ. Я подумал об этом, но использовал бы его только в крайнем случае, ради пользователя. У людей есть привычка нажимать кнопку питания, а затем приклеивать их телефоны в кармане (что, в любом случае, отключит экран, но пользователи, как правило, nitpick). Когда они берут его обратно, хотя, экран должен вернуться. Это работает, если я использую датчик приближения, потому что кнопка питания не вызывает его onSensorChanged. Насколько я могу судить, эта кнопка - единственная вещь (кроме света), которая запускает датчик освещенности, поэтому мне нужно только беспокоиться об этой одной кнопке. –

+0

Я понимаю, что вы имеете в виду. Из любопытства, почему вы не используете датчик приближения? Может быть, датчик света должен быть просто резервным для устройств без датчиков прокси? – Geobits

+0

Датчик по умолчанию для моего приложения - это датчик приближения. Действительно, датчик освещенности является всего лишь резервным (большинство планшетов не имеют датчика близости) и приятная дополнительная функция (поскольку некоторые люди сообщают о более низком потреблении батареи при использовании датчика освещенности). Дело в том, что, хотя это резерв, я хочу, чтобы он работал так же хорошо (и таким же образом), как датчик приближения, и к моему удивлению, он работал красиво! Никогда бы не догадался, насколько ужасная Авто-яркость на моей ноте, но о, радость от наблюдения за ее магией в моем приложении ... за исключением этой довольно неприятной и неожиданной проблемы. –