Держите экран бодрствующим на протяжении всей моей деятельности
У меня есть три действия в моем приложении. Я хочу держать экран активным, когда он во втором действии. Во время второго занятия экран не должен выключаться, если только клавиша "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();
Подробнее об этом по этой ссылке