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.