Nie wyłączaj ekranu

Niektóre aplikacje, np. gry lub aplikacje do odtwarzania filmów, muszą mieć włączony ekran. Niektóre interfejsy API Androida automatycznie utrzymują włączony ekran. W innych przypadkach możesz użyć modyfikatora Compose lub ustawić flagę, aby ręcznie utrzymać włączony ekran.

Nie wyłączaj ekranu w Compose

Jeśli aplikacja używa Jetpack Compose, zastosuj modyfikator keepScreenOn do elementu kompozycyjnego. Modyfikator jest dostępny w Compose UI w wersji 1.9.0 lub nowszej. Ekran pozostaje włączony, dopóki modyfikator jest częścią kompozycji. Gdy żaden element kompozycyjny nie używa modyfikatora, Compose automatycznie przestaje utrzymywać ekran włączony.

Aby ekran był włączony tylko przez pewien czas, zastosuj modyfikator warunkowo. W tym przykładzie ekran pozostaje włączony tylko podczas odtwarzania filmu:

@Composable
fun VideoPlayer(isPlaying: Boolean, modifier: Modifier = Modifier) {
    Box(
        modifier = modifier
            // Keep the screen on only while the video plays.
            .then(if (isPlaying) Modifier.keepScreenOn() else Modifier)
    ) {
        // Video surface and playback controls.
    }
}

Modyfikator ustawia tę samą właściwość widoku co atrybut android:keepScreenOn opisany w następnej sekcji, więc ekran pozostaje włączony tylko wtedy, gdy okno aplikacji jest widoczne. Nie usuwa flagi FLAG_KEEP_SCREEN_ON ustawionej przez aplikację w oknie.

Ręczne utrzymywanie włączonego ekranu

Aby ekran urządzenia był cały czas włączony, ustaw flagę FLAG_KEEP_SCREEN_ON w aktywności. Tę flagę można ustawić tylko w aktywności, nigdy w usłudze ani innym komponencie aplikacji. Na przykład:

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }
}

Innym sposobem na utrzymanie włączonego ekranu jest ustawienie atrybutu android:keepScreenOn w pliku XML układu aplikacji:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">
    ...
</RelativeLayout>

Użycie android:keepScreenOn="true" jest równoważne użyciu FLAG_KEEP_SCREEN_ON. Możesz użyć metody, która najlepiej pasuje do Twojej aplikacji. Zaletą programowego ustawiania flagi w aktywności jest to, że później możesz ją programowo wyczyścić, co pozwoli na wyłączenie ekranu.

Jeśli aplikacja z flagą FLAG_KEEP_SCREEN_ON przejdzie w tło, system pozwoli na normalne wyłączenie ekranu. W takim przypadku nie musisz wyraźnie usuwać flagi. Jeśli aplikacja nie musi już utrzymywać włączonego ekranu, należy wyczyścić flagę, wywołując metodę clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).

Tryb nieaktywny na telewizorze

Na telewizorach używaj FLAG_KEEP_SCREEN_ON, aby zapobiec przejściu urządzenia w tryb nieaktywny podczas aktywnego odtwarzania filmu. Jeśli aktywność na pierwszym planie nie ustawia właściwości FLAG_KEEP_SCREEN_ON, urządzenie automatycznie przechodzi w tryb nieaktywny po okresie braku aktywności.

Zobacz też