не удается обнаружить событие встряхивания, когда экран моего телефона выключен в Android - PullRequest
2 голосов
/ 21 февраля 2012

В моем приложении я хочу обнаружить событие встряхивания, и я использую SensorEventListener, код работает нормально, когда моя деятельность выполняется на переднем плане. Но когда я нажимаю кнопку блокировки телефона, чтобы заблокировать экран, событие встряхивания не может быть обнаружено. Я проверил мой код на Samsung gts5360. Но тот же код отлично работает на Sony Ericsson E-mail: Xperia Mini Pro. На самом деле мой телефон Samsung не обнаруживает тряску, когда я оставляю устройство бездействующим прибл. 45 секунд после блокировки устройства.

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

Теперь мой вопрос заключается в том, что «Это функция Android, при которой устройство не обнаруживает дрожание, когда экран блокируется / выключается?».

Если это так, то как мой телефон Samsung начинает / останавливает прослушивание через несколько секунд после блокировки телефона?

А как непрерывно прослушивать событие дрожания, когда экран блокируется / выключается в "Sony ericssion xperia mini pro"?.

Эта функция зависит от поставщика?

Если кому-то понадобится мой код, дайте мне знать, я предоставлю его.

1 Ответ

0 голосов
/ 11 октября 2012

Проблема в том, что долгое время не было единого стандарта для того, что делать с датчиками, когда экран гаснет.Некоторые устройства позволяют ему продолжать работать, а другие нет.В конце концов команда Android решила, что для его работы приложение должно приобрести частичную блокировку пробуждения для этого вида операции:

PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
PowerManager.WakeLock lock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SensorRead");
lock.acquire();

Это разрешение необходимо: "android.permission.WAKE_LOCK"

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

Даже при всем этом он может не работать.Я обнаружил, что телефоны LG в последнее время реже поддерживают датчики фона.Кроме того, многие телефоны Motorola не нуждаются в блокировке от пробуждения, а просто перерегистрируют датчик, когда экран выключается.

...