Режим "Картинка в картинке" – это особый тип многооконного режима, который в основном используется для воспроизведения видео. Она позволяет смотреть видео в маленьком окне, прикрепленном к углу экрана, во время поиска контента или работы на устройстве.
Режим PIP использует многооконный режим API, доступный в Android 7.0, чтобы показывать видео в закрепленном окне. Чтобы добавить в приложение режим "Картинка в картинке", зарегистрируйте объект activity, переключайте его в этот режим по мере необходимости и убедитесь, что элементы интерфейса скрыты, а воспроизведение видео продолжается, когда объект activity находится в режиме "Картинка в картинке".
Реализация режима «картинка в картинке» с помощью Jetpack.
Используйте библиотеку Jetpack Picture-in-Picture для реализации режима «картинка в картинке», поскольку она упрощает интеграцию и уменьшает количество распространенных проблем в приложениях. Пример использования можно увидеть в нашем демонстрационном приложении . Однако, если вы предпочитаете реализовать PiP с помощью API платформы, обратитесь к следующей документации.
,Реализация режима «картинка в картинке» с помощью Jetpack.
Используйте библиотеку Jetpack Picture-in-Picture для реализации режима «картинка в картинке», поскольку она упрощает интеграцию и уменьшает количество распространенных проблем в приложениях. Пример использования можно увидеть в нашем демонстрационном приложении . Однако, если вы предпочитаете реализовать PiP с помощью API платформы, обратитесь к следующей документации.
Как управлять интерфейсом в режиме "Картинка в картинке"
Когда вы переходите в режим "Картинка в картинке", весь интерфейс приложения отображается в окне PiP, если вы не укажете, как он должен выглядеть в этом режиме и вне его.
Сначала вам нужно определить, когда приложение находится в режиме "Картинка в картинке". Для этого можно использовать 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() }