Не удается обнаружить событие встряхивания, когда экран моего телефона отключен в Android

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

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

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

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

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

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

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

1 ответ

Проблема в том, что долгое время не было единого стандарта для того, что делать с датчиками, когда экран гаснет. Некоторые устройства позволяют ему продолжать работать, а другие нет. В конце концов команда 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 не нуждаются в блокировке от пробуждения, а просто перерегистрируют датчик, когда экран выключается.

Другие вопросы по тегам