Android відключить час очікування екрана під час роботи програми


116

Чи є спосіб відключити заставку під час роботи мого додатка?

Затемнення екрану - це те, що я маю на увазі.


3
Що з використанням View.setKeepScreenOn()[посилання] [1] ?. Я ніколи цього не використовував сам. [1]: developer.android.com/reference/android/view/…
dorzey

3
можливий дублікат Force Screen On
Річард Ев

Відповіді:


172

Ви хочете використовувати щось подібне:

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

4
це робить його для запущеної діяльності або всього додатка?
Мухаммед Рефаат

@ MayurR.Amipara так, я думаю, що це так
Мухаммед Refaat

1
Якщо я напишу цей код у класі класу Application onCreate (), то він працюватиме для цілого додатка?
Jayesh

Якщо ні, то як я можу утримувати весь екран додатка, вставляючи менше коду, а не додавати цей рядок до кожної дії.
Jayesh

1
@Jayesh: Ви можете створити baseActivity і записати цей код у метод onCreate і розширити всю активність від baseActivity.
марям

102

Я використав:

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

щоб вимкнути тайм-аут екрана та

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

щоб знову включити його.


83

Існує також XML спосіб, який Google рекомендує:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true">

Перевірте Google Слайди - слайд 16.

"Wakelocks коштують дорого, якщо їх забули (...) Подумайте про використання android: KeepScreenOn для забезпечення коректності"


2
Для тих, хто не встигає прочитати зв'язаний pdf: "Wakelocks коштують дорого, якщо їх забудуть", "Для забезпечення коректності подумайте про використання android: KeepScreenOn".
lenrok258

2
@ lenrok258 Додано до відповіді ;-)
neteinstein

Хоча користування PowerManager.newWakeLockі getWindow().addFlagsчомусь не працювало, це було зроблено.
Бенджамін Басмачі



2

У перегляді, в моєму випадку підкласу SurfaceView, ви можете вмикати екран завжди. Я хотів, щоб екран залишався включеним, поки цей погляд ще малював речі.

public class MyCoolSurfaceView extends SurfaceView { 
@Override
protected void onAttachedToWindow (){
    super.onAttachedToWindow();
    this.setKeepScreenOn(true);
}

@Override
protected void onDetachedFromWindow(){
    super.onDetachedFromWindow();
    this.setKeepScreenOn(false);
}

1
Це насправді складніше, ніж потрібно. Просто зателефонуйте setKeepsScreenOn (true) куди завгодно, і рамка автоматично подбає про збереження екрана під час показу вашого вікна.
hackbod

1

Поставте це на старт

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep");
    wakeLock.acquire();

І це у вас проявляється

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

Не забувайте

wakeLock.release();

на onStop


1
PARTIAL_WAKE_LOCKдозволяє вимкнути екран.
Майкл

1

це найкращий спосіб вирішити це

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

чому потрібно відповісти на це питання FLAG_FULLSCREEN?
Абдул Васае


0
procedure SetSleep(aEnable:Boolean);
var
    vFlags: integer;
begin
    vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or
        TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or
        TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or
        TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;

    if aEnable then
    begin
      CallInUIThread (   // uses FMX.Helpers.Android
      procedure
      begin
        TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);
      end );
    end
    else
      CallInUIThread (
      procedure
      begin
        TAndroidHelper.Activity.getWindow.clearFlags (vFlags);
      end );
end;

0

1.getWindow (). AddFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); найкраще рішення для Native Android.
2. Якщо ви хочете користуватися програмою React для Android, скористайтеся наведеним нижче кодом.

@ReactMethod
    public void activate() {
        final Activity activity = getCurrentActivity();
        if (activity != null) {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                }
            });
        }

    }

-1

Це можна зробити, придбавши замок Wake Lock.

Я сам цього не перевіряв, але ось невеликий підручник з цього приводу.


10
Ні-ні-ні. Замки Wake легко зловживаються та можуть спорядити акумулятор користувача, якщо його не використовувати дуже обережно. Використовуйте View#setKeepScreenOnабо його еквівалентний атрибут xml layout,android:keepScreenOn="true"
adamp

5
@adamp: ОП не вказав, чи є його додаток діяльністю чи послугою. Діяльність повинна використовувати механізм, який ви цитуєте. Службою слід користуватися WakeLock.
CommonsWare

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

@adamp: на ваш погляд, ваша згадка android:keepScreenOn="true"- це єдино вірний варіант відповіді. Не тримайтеся подалі від годинників, якщо це абсолютно не потрібно.
pauluss86

Не лише діяльність, а будь-який інтерфейс користувача, який показує вікно. Прийнята відповідь щодо використання відповідного прапора вікна однаково справедлива.
adamp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.