Android отключить тайм-аут экрана во время работы приложения


117

Есть ли способ отключить заставку во время работы моего приложения?

Я имею в виду затемнение экрана.


3
А как насчет использования View.setKeepScreenOn()[ссылка] [1] ?. Но сам я им никогда не пользовался. [1]: developer.android.com/reference/android/view/…
dorzey

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

Ответы:


173

Вы хотите использовать что-то вроде этого:

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

4
это делает его для беговой деятельности или всего приложения?
Мухаммед Рефаат

@ MayurR.Amipara да, я думаю, что это именно тот случай,
Мухаммед Рефаат

1
Если я напишу этот код в методе onCreate () класса приложения, будет ли он работать для всего приложения?
Jayesh

Если «Нет», то как я могу сохранить весь экран приложения включенным, вставляя меньше кода вместо добавления этой строки в каждое действие.
Jayesh

1
@Jayesh: вы можете создать baseActivity и написать этот код в методе onCreate и расширить все действия из baseActivity.
maryam

102

Я использовал:

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

отключить тайм-аут экрана и

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

чтобы снова включить его.


87

Существует также способ XML, который рекомендует Google:

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

Проверьте Google Slides - Slide 16.

«Wakelocks дорого обходятся, если их забывают (...) Рассмотрите возможность использования android: keepScreenOn, чтобы гарантировать правильность»


2
Для тех, у кого нет времени читать связанный pdf: «Wakelocks дорого обходятся, если они забыты», «Рассмотрите возможность использования android: keepScreenOn для обеспечения корректности».
lenrok258 07

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

Поместите это в onStart

    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 для ответа на этот вопрос?
Abdul Wasae


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); лучшее решение для собственного 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
Нет нет нет. Блокировки пробуждения легко использовать неправильно и могут разрядить аккумулятор пользователя, если использовать их не очень осторожно. Use View#setKeepScreenOnили его эквивалент атрибута макета xml,android:keepScreenOn="true"
adamp

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

спасибо, это не услуга. это похоже на программу просмотра изображений, и я просто не хочу, чтобы экран затемнялся.
зажим

@adamp: android:keepScreenOn="true"на мой взгляд, ваше упоминание о деятельности - единственный верный ответ. Держитесь подальше от wakelocks без крайней необходимости.
pauluss86

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