Kotlin

Verwalten von Änderungen im PiP-Modus

1. Aktualisieren der Benutzeroberfläche bei Änderungen des PiP-Modus

Überschreiben Sie onPictureInPictureModeChanged um den PiP-Status zu verfolgen und die lokale Vorschau im schwebenden Fenster auszublenden (das Teilnehmervideo bleibt erhalten):

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)
        }
    }
}

Enthüllen Sie isInPipMode zu komponieren (zum Beispiel mit mutableStateOf), so dass die Schaltfläche PiP automatisch ausgeblendet wird.

2. Die Sitzung in PiP aufrechterhalten

Do nicht aufrufen session.onPause() im PiP-Modus, oder der Anruf kann unterbrochen werden, wenn der Benutzer die Vollbildschirmaktivität verlässt:

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

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

3. Ansichten in onStop aufräumen

Entfernen Sie Verleger- und Abonnentenansichten, wenn die Aktivität beendet ist:

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