Le mode Picture-in-picture (PIP) est un type spécial de mode multifenêtre, principalement utilisé pour la lecture de vidéos. Elle permet à l'utilisateur de regarder une vidéo dans une petite fenêtre épinglée dans un coin de l'écran tout en naviguant entre les applications ou en parcourant le contenu de l'écran principal.
Le mode PIP exploite les API multifenêtres disponibles dans Android 7.0 pour fournir la fenêtre de superposition vidéo épinglée. Pour ajouter le mode PIP à votre application, vous devez enregistrer votre activité, la faire passer en mode PIP si nécessaire, et vous assurer que les éléments d'interface utilisateur sont masqués et que la lecture de la vidéo se poursuit lorsque l'activité est en mode PIP.
Implémenter le mode PIP avec Jetpack
Utilisez la bibliothèque Picture-in-picture Jetpack pour implémenter l'expérience Picture-in-picture, car elle simplifie l'intégration et réduit les problèmes courants dans l'application. Consultez notre application exemple de plate-forme pour voir un exemple de son utilisation. Toutefois, si vous préférez implémenter le mode PIP à l'aide des API de plate-forme, consultez la documentation suivante.
Gérer votre UI en mode PIP
Lorsque vous passez en mode PIP, l'intégralité de l'UI de votre application s'affiche dans la fenêtre PIP, sauf si vous spécifiez l'apparence de votre UI en mode PIP et en dehors de ce mode.
Tout d'abord, vous devez savoir si votre application est en mode PIP ou non. Pour ce faire, vous pouvez utiliser OnPictureInPictureModeChangedProvider.
Le code suivant vérifie si votre application est en mode PIP.
@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 } }
Vous pouvez maintenant utiliser rememberIsInPipMode() pour activer ou désactiver les éléments d'interface utilisateur à afficher lorsque l'application passe en mode PiP :
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() }