Держите экран бодрствующим на протяжении всей моей деятельности

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

5 ответов

Решение

Как обсуждалось в учебнике по 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);

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

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

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"/>

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

Я нахожу это решение намного проще:

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

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

Как я понимаю ваш вопрос, я думаю, что вы должны использовать 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" />

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

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

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

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

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

wl.release();

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

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