Der Bild-im-Bild-Modus (BiB) ist ein spezieller Mehrfenstermodus, der hauptsächlich für die Videowiedergabe verwendet wird. Nutzer können sich ein Video in einem kleinen Fenster ansehen, das an einer Ecke des Bildschirms angepinnt ist, während sie zwischen Apps wechseln oder sich Inhalte auf dem Hauptbildschirm ansehen.
Für das angepinnte Video-Overlay-Fenster nutzt BiB die in Android 7.0 verfügbaren Mehrfenstermodus-APIs. Wenn du deiner App BiB hinzufügen möchtest, musst du deine Aktivität registrieren, sie bei Bedarf in den BiB-Modus versetzen und dafür sorgen, dass UI-Elemente ausgeblendet werden und die Videowiedergabe fortgesetzt wird, wenn sich die Aktivität im BiB-Modus befindet.
使用 Jetpack 实现 PiP
使用 Jetpack 画中画库来实现画中画体验,因为它可以简化集成并减少常见的应用内问题。如需查看其使用示例,请参阅我们的平台示例应用。不过,如果您希望使用平台 API 实现 PiP,请参阅以下文档。
UI im PiP-Modus verwalten
Wenn du den BiB-Modus aktivierst, wird die gesamte Benutzeroberfläche deiner App im BiB-Fenster angezeigt, es sei denn, du gibst an, wie die Benutzeroberfläche im und außerhalb des BiB-Modus aussehen soll.
Zuerst müssen Sie wissen, ob sich Ihre App im PiP-Modus befindet oder nicht. Dazu können Sie OnPictureInPictureModeChangedProvider verwenden.
Mit dem folgenden Code wird geprüft, ob sich Ihre App im Bild-im-Bild-Modus befindet.
@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 } }
Jetzt können Sie mit rememberIsInPipMode() festlegen, welche UI-Elemente angezeigt werden sollen, wenn die App in den PiP-Modus wechselt:
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() }