Программирование выключения и включения в одной функции OnClick на Android - PullRequest
0 голосов
/ 23 ноября 2011

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

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 0/(float)255;
getWindow().setAttributes(lp);

Но это вступит в силу только тогда, когда функция onClick вернется. Я попытался запустить его в обработчик, но безуспешно. Мне нужно найти способ принудительно применить настройку до того, как функция вернется, чтобы я мог вызвать функцию включения через 2 секунды после того же вызова onClick.

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

PowerManager pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP | 
PowerManager.ON_AFTER_RELEASE ,"Dev Tag");
try
{
    wl.acquire();
    wl.release();
}
catch (Exception e)
{
    Toast.makeText(this, e.getMessage(),20).show();
}

Заранее благодарим за помощь!

1 Ответ

0 голосов
/ 23 ноября 2011

Я попытался использовать следующий код для выключения экрана

Это не выключает экран. Это устанавливает подсветку на 0 яркости. Вы не можете выключить экран программно, последний раз я проверял.

Но это вступит в силу только тогда, когда функция onClick вернется.

Правильно. Так работает Android. Пользовательский интерфейс является однопоточным. Ваш запрос на изменение яркости экрана помещается в очередь, и это сообщение не будет обработано до тех пор, пока вы не вернете управление Android, вернувшись с onClick().

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

Это невозможно. Это тоже не обязательно. Есть много способов получить контроль после того, как прошло две секунды. Вероятно, наиболее эффективным является вызов postDelayed() на одном из ваших виджетов.

Мне также было очень трудно разбудить устройство потом

Во-первых, устройство не спало.

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

A WakeLock - это то, что вы используете в фоновом режиме, чтобы держать устройство в активном состоянии в течение нескольких минут, пока вы выполняете некоторую работу. Это также то, что используется для внутренних операций, например android:keepScreenOn (используется для чтения электронных книг, видеоплееров и других действий, когда пользователь может некоторое время не касаться экрана). Это не имеет ничего общего с screenBrightness.

...