Kotlin

PiP モードの変更を管理する

1.PiP モードが変更されたら UI を更新する

オーバーライド onPictureInPictureModeChanged を使用してPiP状態を追跡し、フローティングウィンドウのローカルプレビューを非表示にします(加入者ビデオは残ります):

override fun onPictureInPictureModeChanged(
    isInPictureInPictureMode: Boolean,
    newConfig: Configuration,
) {
    super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
    isInPipMode = isInPictureInPictureMode

    if (isInPictureInPictureMode) {
        publisherViewContainer.visibility = View.GONE
        publisher?.view?.visibility = View.GONE
    } else {
        publisherViewContainer.visibility = View.VISIBLE
        publisher?.view?.visibility = View.VISIBLE
        if (publisher?.view is GLSurfaceView) {
            (publisher?.view as GLSurfaceView).setZOrderOnTop(true)
        }
    }
}

暴露 isInPipMode をコンポーズする。 mutableStateOf)ので、PiPボタンは自動的に隠れます。

2.PiPでセッションを維持する

を行う。 違う コール session.onPause() または、ユーザーがフルスクリーンアクティビティから離れると、通話が一時停止することがあります:

override fun onPause() {
    super.onPause()
    if (!isInPictureInPictureMode) {
        session?.onPause()
    }
}

override fun onResume() {
    super.onResume()
    if (!isInPictureInPictureMode) {
        session?.onResume()
    }
}

3.onStopでビューをクリーンアップする

アクティビティが停止したら、パブリッシャーと購読者のビューを削除します:

override fun onStop() {
    super.onStop()
    subscriber?.let { subscriberViewContainer.removeView(it.view) }
    publisher?.let { publisherViewContainer.removeView(it.view) }
}