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);

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

капеллон78
источник
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, чтобы гарантировать правильность»

neteinstein
источник
2
Для тех, у кого нет времени читать связанный pdf: «Wakelocks дорого обходятся, если они забыты», «Рассмотрите возможность использования android: keepScreenOn для обеспечения корректности».
lenrok258 07
2
@ lenrok258 Добавил в ответ ;-)
neteinstein
Пока использовал PowerManager.newWakeLockи getWindow().addFlagsпо какой-то причине не работало, это сработало.
Бенджамин Басмачи
3

Просто добавьте строку ниже в свое, MainActivityи ваше приложение никогда не выключит свет.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
исключение нулевого указателя
источник
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);
}
orkoden
источник
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);
MBMJ
источник
зачем нужен FLAG_FULLSCREEN для ответа на этот вопрос?
Abdul Wasae
0
android:keepScreenOn="true"

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

https://developer.android.com/training/scheduling/wakelock.html

Сандип Тенгале
источник
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.

Сам я не тестировал, но вот небольшой урок по этому поводу.

Wonne
источник
10
Нет нет нет. Блокировки пробуждения легко использовать неправильно и могут разрядить аккумулятор пользователя, если использовать их не очень осторожно. Use View#setKeepScreenOnили его эквивалент атрибута макета xml,android:keepScreenOn="true"
adamp
5
@adamp: OP не указал, является ли его приложение деятельностью или службой. Действие должно использовать указанный вами механизм. Служба должна использовать WakeLock.
CommonsWare
спасибо, это не услуга. это похоже на программу просмотра изображений, и я просто не хочу, чтобы экран затемнялся.
зажим
@adamp: android:keepScreenOn="true"на мой взгляд, ваше упоминание о деятельности - единственный верный ответ. Держитесь подальше от wakelocks без крайней необходимости.
pauluss86
Не только действия, но и любой пользовательский интерфейс, отображающий окно. Принятый ответ об использовании соответствующего флажка окна также действителен.
adamp