Pencere içinde pencere (PIP) hakkında

Pencere içinde pencere (PiP), çoğunlukla video oynatmak için kullanılan özel bir çoklu pencere modudur. Kullanıcıları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 kullanıma 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.

PiP modunda kullanıcı arayüzünüzü kullanma

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

Öncelikle, uygulamanızın PiP modunda olup olmadığını bilmeniz gerekir. Bu amaçla OnPictureInPictureModeChangedProvider ürününü kullanabilirsiniz. Aşağıdaki kod, uygulamanızın PiP modunda olup olmadığını gösterir.

@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() simgesini 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()
}