Cómo activar la reproducción en segundo plano

Un usuario que mira contenido en un dispositivo de TV puede decidir cambiar a un selector de TV en cualquier momento. Si este cambia al selector mientras usa una app de reproducción para TV, la app se detendrá de forma predeterminada. Como el usuario no solicitó explícitamente la detención de la reproducción, es posible que el comportamiento predeterminado resulte inesperado y repentino. En esta lección, se describe cómo habilitar la reproducción en segundo plano en tu app, lo que brinda una mejor experiencia del usuario.

El método requestVisibleBehind() dejó de estar disponible en la API nivel 26.
Este se quitará en una futura versión. La funcionalidad que se describe en esta página no se admite en Android 8.0 ni versiones posteriores.

Cómo solicitar la reproducción en segundo plano

Por lo general, cuando el usuario hace clic en la pantalla principal para mostrar el selector de TV, la actividad se detiene. Sin embargo, tu app puede solicitar la reproducción en segundo plano, de manera que la actividad continúe reproduciéndose detrás del selector de TV.

Para solicitar la reproducción en segundo plano, llama a requestVisibleBehind(). Asegúrate de quitar los recursos multimedia si la actividad deja de mostrarse. Por ejemplo, deberías liberar los recursos multimedia si requestVisibleBehind() muestra false a fin de indicar que falló la solicitud o si el sistema invoca la anulación de onVisibleBehindCanceled().

Kotlin

    override fun onPause() {
        super.onPause()
        if (videoView?.isPlaying == true) {
            // Argument equals true to notify the system that the activity
            // wishes to be visible behind other translucent activities
            if (!requestVisibleBehind(true)) {
                // App-specific method to stop playback and release resources
                // because call to requestVisibleBehind(true) failed
                stopPlayback()
            }
        } else {
            // Argument equals false because the activity is not playing
            requestVisibleBehind(false)
        }
    }

    override fun onVisibleBehindCanceled() {
        // App-specific method to stop playback and release resources
        stopPlayback()
        super.onVisibleBehindCanceled()
    }
    

Java

    @Override
    public void onPause() {
      super.onPause();
      if (videoView.isPlaying()) {
        // Argument equals true to notify the system that the activity
        // wishes to be visible behind other translucent activities
        if (! requestVisibleBehind(true)) {
          // App-specific method to stop playback and release resources
          // because call to requestVisibleBehind(true) failed
          stopPlayback();
        }
      } else {
        // Argument equals false because the activity is not playing
        requestVisibleBehind(false);
      }
    }

    @Override
    public void onVisibleBehindCanceled() {
      // App-specific method to stop playback and release resources
      stopPlayback();
      super.onVisibleBehindCanceled();
    }