Держите экран бодрствующим на протяжении всей моей деятельности - PullRequest
53 голосов
/ 09 декабря 2011

У меня есть три действия в моем приложении. Я хочу держать экран активным, когда он во втором упражнении. Во время второго занятия экран не должен выключаться, если только клавиша «lock» не нажата вручную. Я перебрал много ссылок, но они мне кажутся неясными.

Ответы [ 5 ]

146 голосов
/ 09 декабря 2011

Как описано в руководстве по Android Оставьте экран включенным , вы можете сделать это несколькими способами.Вы можете установить FLAG_KEEP_SCREEN_ON в окне действия:

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

Эквивалентом XML для этого является добавление атрибута android:keepScreenOn="true" в корневое представление макета вашей деятельности.Преимущество установки флага программно заключается в том, что вы можете использовать

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

, когда вам больше не нужно заставлять экран оставаться включенным во время работы.

Другой способ управленияscreen (и некоторые другие ресурсы) должны использовать блокировку пробуждения:

mWakeLock = ((PowerManager) getContext().getSystemService(Context.POWER_SERVICE))
    .newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
mWakeLock.acquire();
// screen stays on in this section
mWakeLock.release();

Манифест должен включать это разрешение:

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

Однако, как обсуждалось в руководстве,wake-блокировка больше подходит для других случаев использования (например, для службы или фоновой задачи, требующей, чтобы ЦП продолжал работать, пока экран выключен).

47 голосов
/ 01 августа 2012

Мне гораздо проще найти это решение:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" // Whatever your layout is
    ...
    android:keepScreenOn="true"> // Add this line

Просто добавьте это в XML макета своей деятельности.

7 голосов
/ 09 декабря 2011

Как я понимаю, ваш вопрос, я думаю, вы должны использовать WAKE_LOCK для него в вашем приложении.

Что-то вроде,

final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"");    
mWakeLock.acquire();

И в manifest.xml вашего приложения.файл файл добавить это,

<uses-permission android:name="android.permission.WAKE_LOCK" />
1 голос
/ 04 февраля 2013

Этот код устарел, используйте вместо этого:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

После того, как вы закончите с использованием, вызовите (лучшее решение - вызвать этот метод в методе onDestroy некоторого действия):

wl.release();

Подробнее об этом ссылка

1 голос
/ 09 декабря 2011

попробуйте использовать это

getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_FULLSCREEN
                                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
...