Ekranı açık tut

Oyun veya film uygulamaları gibi belirli uygulamaların ekranı açık tutması gerekir. Bazı Android API'leri ekranı sizin için otomatik olarak açık tutar. Diğer durumlarda, ekranı manuel olarak açık tutmak için bir Compose değiştirici kullanabilir veya bir işaret ayarlayabilirsiniz.

Compose'da ekranı açık tutma

Uygulamanız Jetpack Compose kullanıyorsa bir composable'a keepScreenOn değiştiricisini uygulayın. Değiştirici, Compose UI 1.9.0 ve sonraki sürümlerde kullanılabilir. Değiştirici, oluşturmanın bir parçası olduğu sürece ekran açık kalır. Değiştiriciyi kullanan hiçbir composable olmadığında Compose, ekranı otomatik olarak açık tutmayı durdurur.

Ekranın yalnızca belirli zamanlarda açık kalmasını istiyorsanız değiştiriciyi koşullu olarak uygulayın. Aşağıdaki örnekte, ekran yalnızca video oynatılırken açık tutulur:

@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.
    }
}

Değiştirici, sonraki bölümde açıklanan android:keepScreenOn özelliğiyle aynı görünüm özelliğini ayarlar. Bu nedenle, ekran yalnızca uygulamanızın penceresi görünür durumdayken açık kalır. Uygulamanızın pencerede ayarladığı FLAG_KEEP_SCREEN_ON işaretini temizlemez.

Ekranı manuel olarak açık tutma

Cihazın ekranını açık tutmak için etkinliğinizde FLAG_KEEP_SCREEN_ON işaretini ayarlayın. Bu işaret yalnızca bir etkinlikte ayarlanabilir, hiçbir zaman bir hizmette veya başka bir uygulama bileşeninde ayarlanamaz. Örneğin:

class MainActivity : Activity() {

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

Ekranı açık tutmanın bir diğer yolu da uygulamanızın düzen XML dosyasında android:keepScreenOn özelliğini ayarlamaktır:

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

android:keepScreenOn="true" kullanmak, FLAG_KEEP_SCREEN_ON kullanmakla aynıdır. Uygulamanız için en uygun yaklaşımı kullanabilirsiniz. İşaretçiyi etkinliğinizde programatik olarak ayarlamanın avantajı, daha sonra işaretçiyi programatik olarak temizleme ve böylece ekranın kapanmasına izin verme seçeneği sunmasıdır.

FLAG_KEEP_SCREEN_ON işaretine sahip bir uygulama arka plana geçerse sistem, ekranın normal şekilde kapanmasına izin verir. Bu durumda işareti açıkça temizlemeniz gerekmez. Uygulamanızın artık ekranı açık tutması gerekmiyorsa clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) yöntemini çağırarak işareti temizlemeniz gerekir.

TV için Ambiyans Modu

TV cihazlarında, etkin video oynatma sırasında cihazın Ambiyans Modu'na girmesini önlemek için FLAG_KEEP_SCREEN_ON kullanın. Ön plan etkinliği FLAG_KEEP_SCREEN_ON değerini ayarlamazsa cihaz, belirli bir süre işlem yapılmadığında otomatik olarak ambiyans moduna girer.

Aşağıdaki kaynakları da incelemenizi öneririz: