Pencere içinde pencere (PIP) hakkında

Pencere içinde pencere (PiP), çoğunlukla video oynatma için kullanılan özel bir çoklu pencere modu türüdür. Kullanıcının uygulamalar arasında geçiş yaparken veya ana ekrandaki içeriklere göz atarken ekranın bir köşesine sabitlenmiş küçük bir pencerede video izlemesine olanak tanır.

PiP, sabitlenmiş video yer paylaşımı penceresini sağlamak için Android 7.0'da sunulan çok pencereli API'lerden yararlanır. Uygulamanıza PiP eklemek için etkinliğinizi kaydetmeniz, gerektiğinde etkinliğinizi PiP moduna geçirmeniz ve etkinlik PiP modundayken kullanıcı arayüzü öğelerinin gizlendiğinden ve video oynatmanın devam ettiğinden emin olmanız gerekir.

Jetpack ile PiP'yi uygulama

Entegrasyonu kolaylaştırdığı ve yaygın uygulama içi sorunları azalttığı için Jetpack pencere içinde pencere kitaplığını kullanarak pencere içinde pencere deneyimini uygulayın. Kullanım örneği için platform örnek uygulamamıza bakın. Ancak, platform API'lerini kullanarak PiP'yi uygulamayı tercih ederseniz aşağıdaki belgelere bakın.

Pencere içinde pencere modunda kullanıcı arayüzünüzü yönetme

PiP moduna girdiğinizde, kullanıcı arayüzünüzün PiP modunda ve dışında nasıl görünmesi gerektiğini belirtmediğiniz sürece uygulamanızın tüm kullanıcı arayüzü PiP penceresine girer.

Öncelikle uygulamanızın PiP modunda olup olmadığını bilmeniz gerekir. Bunu yapmak için OnPictureInPictureModeChangedProvider kullanabilirsiniz. Aşağıdaki kod, uygulamanızın PiP modunda olup olmadığını kontrol eder.

@Composable
fun rememberIsInPipMode(): Boolean {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val activity = LocalContext.current.findActivity()
        var pipMode by remember { mutableStateOf(activity.isInPictureInPictureMode) }
        DisposableEffect(activity) {
            val observer = Consumer<PictureInPictureModeChangedInfo> { info ->
                pipMode = info.isInPictureInPictureMode
            }
            activity.addOnPictureInPictureModeChangedListener(
                observer
            )
            onDispose { activity.removeOnPictureInPictureModeChangedListener(observer) }
        }
        return pipMode
    } else {
        return false
    }
}

Artık uygulama PiP moduna girdiğinde hangi kullanıcı arayüzü öğelerinin gösterileceğini değiştirmek için rememberIsInPipMode() kullanabilirsiniz:

val inPipMode = rememberIsInPipMode()

Column(modifier = modifier) {
    // This text will only show up when the app is not in PiP mode
    if (!inPipMode) {
        Text(
            text = "Picture in Picture",
        )
    }
    VideoPlayer()
}