Режим «картинка в картинке» (PiP) — это особый тип многооконного режима, используемый в основном для воспроизведения видео. Он позволяет пользователю смотреть видео в небольшом окне, закрепленном в углу экрана, одновременно переключаясь между приложениями или просматривая контент на главном экране.
Функция PiP использует API многооконного режима, доступные в Android 7.0, для отображения закрепленного окна с видео. Чтобы добавить PiP в ваше приложение, необходимо зарегистрировать активность, переключать активность в режим PiP по мере необходимости и убедиться, что элементы пользовательского интерфейса скрыты, а воспроизведение видео продолжается, когда активность находится в режиме PiP.
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.
Управляйте пользовательским интерфейсом в режиме «картинка в картинке»
При переходе в режим «картинка в картинке» весь пользовательский интерфейс вашего приложения отображается в этом окне, если вы не укажете, как должен выглядеть ваш интерфейс в режиме «картинка в картинке» и вне его.
Во-первых, вам нужно знать, находится ли ваше приложение в режиме «картинка в картинке» или нет. Для этого можно использовать OnPictureInPictureModeChangedProvider . Приведённый ниже код показывает, находится ли ваше приложение в режиме «картинка в картинке».
@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 } }
Теперь вы можете использовать rememberIsInPipMode() для переключения между отображаемыми элементами пользовательского интерфейса при переходе приложения в режим «картинка в картинке»:
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() }
Режим «картинка в картинке» (PiP) — это особый тип многооконного режима, используемый в основном для воспроизведения видео. Он позволяет пользователю смотреть видео в небольшом окне, закрепленном в углу экрана, одновременно переключаясь между приложениями или просматривая контент на главном экране.
Функция PiP использует API многооконного режима, доступные в Android 7.0, для отображения закрепленного окна с видео. Чтобы добавить PiP в ваше приложение, необходимо зарегистрировать активность, переключать активность в режим PiP по мере необходимости и убедиться, что элементы пользовательского интерфейса скрыты, а воспроизведение видео продолжается, когда активность находится в режиме PiP.
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.
Управляйте пользовательским интерфейсом в режиме «картинка в картинке»
При переходе в режим «картинка в картинке» весь пользовательский интерфейс вашего приложения отображается в этом окне, если вы не укажете, как должен выглядеть ваш интерфейс в режиме «картинка в картинке» и вне его.
Во-первых, вам нужно знать, находится ли ваше приложение в режиме «картинка в картинке» или нет. Для этого можно использовать OnPictureInPictureModeChangedProvider . Приведённый ниже код показывает, находится ли ваше приложение в режиме «картинка в картинке».
@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 } }
Теперь вы можете использовать rememberIsInPipMode() для переключения между отображаемыми элементами пользовательского интерфейса при переходе приложения в режим «картинка в картинке»:
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() }