Jestem więc w podobny scenariusz i musisz wiedzieć, kiedy rozpocznie się następny film z playlisty. Zauważyłem, że ExoPlayer.EventListener
ma metodę o nazwie onPositionDiscontinuity()
, która jest wywoływana za każdym razem, gdy wideo się zmienia lub "szuka" do następnej na liście odtwarzania.
Nie korzystałem z tej metody w szerokim zakresie, ale z tego, co widzę do tej pory, jest to metoda, którą należy się zainteresować. Nie ma żadnych parametrów, które zostaną przekazane, gdy metoda zostanie uruchomiona, więc będziesz musiał zachować jakiś licznik lub kolejkę, aby śledzić, co gra w danym momencie.
Mam nadzieję, że to pomoże!
Edit: zmiana indeksu zwróconej przez Exoplayer.getCurrentWindowIndex()
jest recommended way wykryć zmianę pozycji na liście odtwarzania MediaSource
.
int lastWindowIndex = 0; // global var in your class encapsulating exoplayer obj (Activity, etc.)
exoPlayer.addListener(new ExoPlayer.EventListener() {
@Override
public void onLoadingChanged(boolean isLoading) {
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
}
@Override
public void onPlayerError(ExoPlaybackException error) {
}
@Override
public void onPositionDiscontinuity() {
//THIS METHOD GETS CALLED FOR EVERY NEW SOURCE THAT IS PLAYED
int latestWindowIndex = exoPlayer.getCurrentWindowIndex();
if (latestWindowIndex != lastWindowIndex) {
// item selected in playlist has changed, handle here
lastWindowIndex = latestWindowIndex;
// ...
}
}
});
Czy kiedykolwiek otrzymałeś na to odpowiedź? Przyjęta odpowiedź nie pomaga, jak zauważono w komentarzach. –