Android wyłącza limit czasu ekranu, gdy aplikacja jest uruchomiona

Odpowiedzi:

173

Chcesz użyć czegoś takiego:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Ian G. Clifton
źródło
4
to sprawia, że ​​jest to dla biegania lub całej aplikacji?
Muhammed Refaat
@ MayurR.Amipara yeah Myślę, że tak jest w tym przypadku
Muhammed Refaat
1
Jeśli napiszę ten kod w metodzie onCreate () klasy Application, to czy będzie on działał dla całej aplikacji?
Jayesh
Jeśli nie, to Jak mogę utrzymać cały ekran aplikacji, wstawiając mniej kodu zamiast dodawać ten wiersz do każdego działania.
Jayesh
1
@Jayesh: Możesz utworzyć baseActivity i napisać ten kod w metodzie onCreate i rozszerzyć całą aktywność z baseActivity.
maryam
102

Użyłem:

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

aby wyłączyć limit czasu ekranu i

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

aby go ponownie włączyć.

capellone78
źródło
84

Istnieje również sposób XML zalecany przez Google:

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

Sprawdź Prezentacje Google - slajd 16.

„Wakeloki są kosztowne, jeśli się je zapomina (...) Rozważ użycie android: keepScreenOn, aby zapewnić poprawność”

neteinstein
źródło
2
Dla tych, którzy nie mają czasu na przeczytanie powiązanego pliku PDF: „Wakelocks są kosztowne, jeśli się zapomina”, „Rozważ użycie android: keepScreenOn, aby zapewnić poprawność”.
lenrok258
2
@ lenrok258 Dodano do odpowiedzi ;-)
neteinstein
Podczas używania PowerManager.newWakeLocki getWindow().addFlagsnie działało z jakiegoś powodu, tak się stało.
Benjamin Basmaci
3

Po prostu dodaj poniższą linię do swojej MainActivityi aplikacji nigdy nie wyłączaj świateł.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Wyjątek zerowego wskaźnika
źródło
2

W widoku, w moim przypadku podklasy SurfaceView, możesz ustawić ekran na zawsze włączony. Chciałem, aby ekran pozostał włączony, gdy ten widok wciąż rysował.

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

@Override
protected void onDetachedFromWindow(){
    super.onDetachedFromWindow();
    this.setKeepScreenOn(false);
}
orkoden
źródło
1
W rzeczywistości jest to bardziej skomplikowane niż potrzeba. Po prostu wywołaj setKeepsScreenOn (true) w dowolnym miejscu, a framework automatycznie zajmie się utrzymaniem ekranu włączonego, gdy okno jest wyświetlane.
hackbod
1

Umieść to na onStart

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

I to na ciebie się manifestuje

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

Nie zapomnij

wakeLock.release();

at onStop

Gonkas
źródło
1
PARTIAL_WAKE_LOCKumożliwia wyłączenie ekranu.
Michael
1

to najlepszy sposób rozwiązania tego problemu

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
MBMJ
źródło
dlaczego FLAG_FULLSCREEN ma odpowiadać na to pytanie?
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;
Artur Majtczak
źródło
0

1.getWindow (). AddFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); to najlepsze rozwiązanie dla natywnego Androida.
2. jeśli chcesz korzystać z aplikacji React na Androida, użyj poniższego kodu.

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

    }
Manisha
źródło
-1

Można to zrobić, kupując Wake Lock.

Sam tego nie testowałem, ale tutaj jest mały poradnik na ten temat.

wonne
źródło
10
Nie nie nie. Blokady budzenia są łatwo niewłaściwie używane i mogą wyczerpać baterię użytkownika, jeśli nie są używane zbyt ostrożnie. Użyj View#setKeepScreenOnlub jego odpowiednika atrybutu układu xml,android:keepScreenOn="true"
adamp
5
@adamp: OP nie wskazał, czy jego aplikacja jest działaniem czy usługą. Działanie powinno wykorzystywać cytowany mechanizm. Usługa powinna używać rozszerzenia WakeLock.
CommonsWare
dzięki, to nie jest usługa. jest podobny do przeglądarki zdjęć i po prostu nie chcę, aby ekran był przyciemniony.
zacisk
@adamp: Twoja wzmianka o android:keepScreenOn="true"jest moim zdaniem jedyną poprawną odpowiedzią na działania. Trzymaj się z dala od wakelocków, chyba że jest to absolutnie konieczne.
pauluss86
Nie tylko działania, ale dowolny interfejs użytkownika, który wyświetla okno. Zaakceptowana odpowiedź użycia odpowiedniej flagi okna jest równie ważna.
adamp