Pencere içinde pencere (PiP), çoğunlukla video oynatma için kullanılan özel bir çoklu pencere modudur. Bu özellik, 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ı penceresi 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.
Implement PiP with Jetpack
Use the Jetpack Picture-in-Picture library to implement picture-in-picture experience as it streamlines integration and reduces common in-app issues. Refer to our platform sample app to see an example of its usage. However, if you prefer to implement PiP using the platform APIs, refer to the following documentation.
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. Bunu yapmak için 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 rememberIsInPipMode() simgesini kullanarak uygulama PiP moduna girdiğinde hangi kullanıcı arayüzü öğelerinin gösterileceğini değiştirebilirsiniz:
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() }