PIP 모드 (Picture-in-Picture) 정보

PIP 모드는 주로 동영상 재생에 사용되는 특수한 유형의 멀티 윈도우 모드입니다. 사용자가 기본 화면에서 앱 간에 이동하거나 콘텐츠를 둘러보는 동안 화면 모서리에 고정된 작은 창에서 동영상을 시청할 수 있게 해줍니다.

PIP는 Android 7.0에서 사용할 수 있는 멀티 윈도우 API를 활용하여 고정 동영상 오버레이 창을 제공합니다. 앱에 PIP를 추가하려면 활동을 등록하고, 필요에 따라 활동을 PIP 모드로 전환하고, 활동이 PIP 모드일 때 UI 요소가 숨겨지고 동영상 재생이 계속되는지 확인해야 합니다.

Jetpack으로 PIP 구현

Jetpack PIP 모드 라이브러리를 사용하여 PIP 모드 환경을 구현하세요. 통합을 간소화하고 일반적인 인앱 문제를 줄여줍니다. 사용 예는 플랫폼 샘플 앱을 참고하세요. 하지만 플랫폼 API를 사용하여 PIP를 구현하려면 다음 문서를 참고하세요.

PIP 모드에서 UI 처리

PIP 모드로 전환하면 PIP 모드 안팎에서 UI가 표시되는 방식을 지정하지 않는 한 앱의 전체 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()
}