PIP (Picture-in-Picture)는 주로 동영상 재생에 사용되는 특수한 유형의 멀티 윈도우 모드입니다. 사용자가 기본 화면에서 앱 간에 이동하거나 콘텐츠를 탐색할 때 화면 모서리에 고정된 작은 창에서 동영상을 볼 수 있습니다.
PIP는 Android 7.0에서 사용할 수 있는 멀티 윈도우 API를 활용하여 고정 동영상 오버레이 창을 제공합니다. PIP를 앱에 추가하려면 활동을 등록하고 필요한 경우 활동을 PIP 모드로 전환하며 활동이 PIP 모드일 때 UI 요소를 숨기고 동영상 재생이 지속되게 해야 합니다.
PIP 모드에서 UI 처리
PIP 모드로 전환하면 UI가 PIP 모드와 PIP 모드 외부에서 어떻게 표시되는지 지정하지 않는 한 앱의 전체 UI가 PIP 창으로 전환됩니다.
먼저 앱이 PIP 모드인지 여부를 알아야 합니다. OnPictureInPictureModeChangedProvider
를 사용하여 이 작업을 실행할 수 있습니다.
아래 코드는 앱이 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 } }
이제 rememberIsInPipMode()
를 사용하여 앱이 PIP 모드로 전환될 때 표시할 UI 요소를 전환할 수 있습니다.
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() }