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

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ć.


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ść”


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

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

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


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

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;

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

    }

-1

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.