четверг, 14 февраля 2013 г.

Отключение управления энергопотреблением в Android приложении

По умолчанию на устройстве Android включено управление энергопотреблением для экономного использования энергии батареи. Пользователь Android может самостоятельно настроить режим энергопотребления: время бездействия до затемнения экрана и перехода устройства в спящий режим и т.д. Иногда затемнение экрана является нежелательным поведением в приложении. В таких случаях приходится программно отключать управление энергопотреблением. Об этом я и хочу рассказать в своем посте.
Для того, чтобы иметь доступ к управлению энергопотреблением, необходимо добавить соответствующее разрешение в файл манифеста . Для этого в файл AndroidManifest.xml добавим строку:

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

За управление энергопотреблением в Android отвечает класс PowerManager из пакета android.os. Использование этого API существенно влияет на время жизни батареи, поэтому рекомендую использовать класс PowerManager.WakeLock() только при крайней необходимости и по возможности применять минимальные уровни, а также освобождать его когда вы в нем больше не нуждаетесь.
Получить экземпляр класса PowerManager можно с помощью вызова метода Context.getSystemService().
Самый важный метод класса PowerManager, который вам понадобится, это newWakeLock(). Он создает объект WakeLock, который предоставляет методы управления состоянием энергопотребления. На практике все очень просто:

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
        final PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "MyTag");

wl.acquire();
wl.release();


В метод newWakeLock() первым параметром передаем уровень блокировки. Существует несколько предопределенных уровней блокировки, имеющих различное влияние на энергопотребление:
PARTIAL_WAKE_LOCK - экран может затемниться и перейти в спящий режим, клавиатура может скрыться,
SCREEN_DIM_WAKE_LOCK - экран может только затемниться, клавиатура может скрыться,
SCREEN_BRIGHT_WAKE_LOCK - экран остается ярким, а клавиатура может скрыться,
FULL_WAKE_LOCK - экран остается ярким, клавиатура остается раскрытой.

Использование WakeLock для блокировки погасания экрана отключает затемнение экрана во всем устройстве. Поэтому рекомендуется вместо WakeLock использовать FLAG_KEEP_SCREEN_ON:

getActivity().getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

Для отключения блокировки нужно добавить строку:

getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Удачной разработки приложений!

Комментариев нет:

Отправить комментарий