Bild im Bild (BiB)

Der Bild-im-Bild-Modus (PiB) 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 Inhalte auf dem Hauptbildschirm durchsuchen.

Für die Funktion „Bild-im-Bild“ werden die Mehrfenster-APIs genutzt, die in Android 7.0 verfügbar gemacht wurden, um das angepinnte Video-Overlay-Fenster bereitzustellen. Wenn Sie Ihrer App PiP hinzufügen möchten, müssen Sie Ihre Aktivität registrieren, sie bei Bedarf in den PiP-Modus umschalten und dafür sorgen, dass die UI-Elemente ausgeblendet sind und die Videowiedergabe fortgesetzt wird, wenn die Aktivität im PiP-Modus ist.

Benutzeroberfläche im PiP-Modus verwalten

Wenn Sie in den PiP-Modus wechseln, wird die gesamte Benutzeroberfläche Ihrer App in das PiP-Fenster übernommen, es sei denn, Sie geben an, wie Ihre Benutzeroberfläche im und außerhalb des PiP-Modus aussehen soll.

Zuerst müssen Sie wissen, ob sich Ihre App im PiP-Modus befindet oder nicht. Sie können dafür OnPictureInPictureModeChangedProvider verwenden. Im folgenden Code wird angezeigt, ob sich Ihre App im PiP-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() auswählen, 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()
}