Android: Заобиколно решение за задействане на сензора за светлина при всяко натискане на бутона за захранване?

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

Проблемът, с който се сблъсквам, е, че когато се натисне бутонът за захранване, събитието „onSensorChanged“ на сензора за светлина се задейства по някаква причина. Това означава, че ако потребителят натисне бутона за захранване, за да изключи екрана, той автоматично се включва отново, ако е на правилното осветление.

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

Има ли друго възможно (може би по-логично) решение на този проблем?

Не мисля, че би било полезно да публикувам кода, но ме уведомете, ако имате нужда да го публикувам.

Благодаря.


person Jasjit Singh Marwah    schedule 25.07.2013    source източник


Отговори (1)


Вместо да проследявате флаг за натискане на бутона за захранване, защо не запазите флаг, когато вие го изключите? По този начин, ако е бил изключен по друга причина, няма да направи нищо.

Редакция: Друга идея...

Това, което можете да направите, е да проследите последния път, когато намерението ACTION_SCREEN_OFF е било задействано. Ако времето е по-малко от определен праг (0,05 s?) от момента на извикване на вашия onSensorChanged, можете просто да пренебрегнете (или поне да не го включите отново включено).

person Geobits    schedule 25.07.2013
comment
Благодаря за отговора. Мислех за това, но бих го използвал само в краен случай, в името на потребителя. Хората имат навика да натискат бутона за захранване и след това да пъхнат телефона си в джоба си (което така или иначе ще изключи екрана, знам, но потребителите са склонни да се заяждат). Когато обаче го извадят обратно, екранът трябва да се включи отново. Това работи, ако използвам сензора за близост, защото бутонът за захранване не задейства своя onSensorChanged. Доколкото мога да разбера, този бутон е единственото нещо (освен светлината), което задейства светлинния сензор, така че трябва да се тревожа само за този бутон. - person Jasjit Singh Marwah; 25.07.2013
comment
Разбирам какво имаш предвид. От любопитство, защо тогава не използвате сензора за близост? Може би светлинният сензор трябва да бъде просто резервен вариант за устройства без прокс сензори? - person Geobits; 25.07.2013
comment
Сензорът по подразбиране за моето приложение е сензорът за близост. Всъщност светлинният сензор е просто резервен вариант (повечето таблети нямат сензор за близост) и хубава допълнителна функция (тъй като някои хора съобщават за по-ниско използване на батерията, докато използват светлинния сензор). Работата е там, че въпреки че е резервен вариант, искам да работи също толкова добре (и по същия начин) като сензора за близост и за моя изненада, той работи прекрасно! Никога не бих го познал от това колко ужасна е автоматичната яркост на моя Note, но о, радостта да го гледам как работи магията си в приложението ми... с изключение на този доста досаден и неочакван проблем. - person Jasjit Singh Marwah; 25.07.2013
comment
Има смисъл. Редактиран отговор. - person Geobits; 25.07.2013
comment
А, значи имаш предвид всеки път, когато се извика onSensorChanged, да се проверява дали екранът току-що е бил изключен (преди 0,05 s например), в който случай не го включвайте отново (игнорирайте го)? Предполагам, че ще трябва да регистрирам BroadcastReceiver и да проследявам системното време при всяко задействане на намерението. Надяваме се, че Android улеснява живота ми и задейства това намерение, преди да извика onSensorChanged, но освен това изглежда като правдоподобно решение. Ще го пробвам веднага щом мога! Благодаря! - person Jasjit Singh Marwah; 25.07.2013