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