включите / выключите экран в Android встряхиванием - PullRequest
2 голосов
/ 07 марта 2011

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

Когда я обнаруживаю дрожание, я изменяю значение яркости экрана, как предложено в ответе на этот вопрос . Все это прекрасно работает, если я на самом деле не выключаю экран ... если я устанавливаю яркость 0,01f по методу public void setBright(float value), он работает отлично. Однако, если я установлю яркость на 0.0f, телефон не будет снова поворачивать экран ... по крайней мере, пока я не нажму кнопку питания.

Возможно ли то, что я пытаюсь сделать? что я делаю не так?

- РЕДАКТИРОВАТЬ -

Благодаря Dre и icyerasor Я углубился в проблему. Я получаю PARTIAL_WAKE_LOCK , прежде чем установить яркость на 0.0f, но он все равно не включается, когда я встряхиваю телефон. Однако, когда я отлаживаю приложение, я вижу, что setBright (1.0f) вызывается нормально, когда я встряхиваю телефон с выключенным экраном; Я подозреваю, что экран блокировки как-то портит, так как он срабатывает, когда я нажимаю кнопку питания. После нажатия кнопки питания приложение продолжает работать как обычно. Есть ли способ обойти экран блокировки?

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Я согласен с предположением icyerasor, однако - если предположение верно и телефон переходит в спящий режим, вам придется приобрести PARTIAL_WAKE_LOCK, чтобы процессор не спал до Вы устанавливаете яркость на 0.0

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

1 голос
/ 07 марта 2011

Просто предположение: установка яркости 0.0 может также перевести телефон в спящий режим?

Если вы хотите снова включить его программно, попробуйте получить ACQUIRE_CAUSES_WAKEUP Wakelock:

PowerManager pm = (PowerManager)mContext.getSystemService(
                                          Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
                                      PowerManager.SCREEN_BRIGHT_WAKE_LOCK
                                      | PowerManager.ACQUIRE_CAUSES_WAKEUP,
                                      TAG);
wl.acquire(1000);
...