Este post ha sido probado por expertos para que tengas la seguridad de la veracidad de nuestra esta sección.
Solución:
tienes que comprobar playWhenReady
con un Player.EventListener. Los estados de reproducción de ExoPlayer son independientes de si el reproductor está en pausa o no:
player.addListener(new Player.DefaultEventListener()
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState)
if (playWhenReady && playbackState == Player.STATE_READY)
// media actually playing
else if (playWhenReady)
// might be idle (plays after prepare()),
// buffering (plays when data available)
// or ended (plays when seek away from end)
else
// player paused in any state
);
Para reproducir/pausar el reproductor, ExoPlayer proporciona
player.setPlayWhenReady(boolean)
La secuencia de estados de reproducción con ExoPlayer con un archivo multimedia que nunca se detiene para volver a almacenar en búfer es una vez en cada uno de los cuatro estados y no expresa reproducción/pausa:
Player.STATE_IDLE;
Player.STATE_BUFFERING;
Player.STATE_READY;
Player.STATE_ENDED;
Cada vez que el jugador necesita almacenar en búfer, dice:
Player.STATE_READY;
Player.STATE_BUFFERING;
Player.STATE_READY;
Configurar playWhenReady no afecta el estado.
En conjunto, su contenido multimedia se está reproduciendo cuando
playWhenReady && playbackState == Player.STATE_READY
Se reproduce cuando está listo. 🙂
Puedes usar esta función:
public boolean isPlaying()
return exoPlayer.getPlaybackState() == Player.STATE_READY && exoPlayer.getPlayWhenReady();
Debe ser que desde que se publicaron las otras respuestas, se ha proporcionado un nuevo método en Player.EventListener. Esto funciona bien para mi:
override fun onIsPlayingChanged(isPlaying: Boolean)
// your code here
Si está jugando es falseestá en pausa, de lo contrario en reproducción.
Reseñas y valoraciones del tutorial
Si haces scroll puedes encontrar las anotaciones de otros programadores, tú igualmente tienes la opción de insertar el tuyo si dominas el tema.