ピクチャー イン ピクチャー(PiP)は、主に動画再生に使用される特別なタイプのマルチ ウィンドウ モードです。この機能を使うと、ユーザーはメイン画面でアプリを切り替えたりコンテンツをブラウジングしたりしながら、画面の隅に固定された小さなウィンドウで動画を見続けることができます。
PIP は、Android 7.0 で使用可能になったマルチウィンドウ API を利用して、固定された動画オーバーレイ ウィンドウを提供します。アプリにピクチャー イン ピクチャーを追加するには、アクティビティを登録し、必要に応じてアクティビティをピクチャー イン ピクチャー モードに切り替えて、アクティビティがピクチャー イン ピクチャー モードのときに UI 要素が非表示になり、動画の再生が継続されるようにする必要があります。
使用 Jetpack 实现 PiP
使用 Jetpack 画中画库来实现画中画体验,因为它可以简化集成并减少常见的应用内问题。如需查看其使用示例,请参阅我们的平台示例应用。不过,如果您希望使用平台 API 实现 PiP,请参阅以下文档。
PIP モードで UI を処理する
PiP モードに切り替えると、アプリの UI 全体が PiP ウィンドウに表示されます。ただし、PiP モードの内外で UI をどのように表示するかを指定している場合は、その指定に従います。
まず、アプリが 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() を使用して、アプリがピクチャー イン ピクチャー モードに切り替わったときに表示する 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() }