2017-07-23 1 views
1

Quand je clique sur une chanson de la playlist première fois il joue la chanson suivante, ce problème est seulement arrivé pour la première fois sur la deuxième fois ou plus cliquez sur une chanson de la playlist ça marche bien.Je veux jouer la prochaine chanson automatiquement dans le lecteur multimédia

Mais le problème majeur a, il est incapable de jouer la chanson suivante après la fin de n'importe quelle chanson à tout moment.

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mediaPlayer) { 
      mediaPlayer.reset(); 
       // play next song 
       if(listView_click_arg2 < (songPath.length - 1)){ 
        listView_click_arg2=listView_click_arg2+1; 
       } 
       else{ 
        // play first song 
        listView_click_arg2=0; 
       } 
      try { 
       playSong(songPath[listView_click_arg2]); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 
    }); 


private void playSong(String path) throws IllegalArgumentException, IllegalStateException, IOException { 
    startTime=0; 
    finalTime=0; 
    oneTimeOnly=0; 
    mediaPlayer.stop(); 
    mediaPlayer=null; 
    mediaPlayer=new MediaPlayer(); 
    mediaPlayer.setDataSource(path); 
    mediaPlayer.prepare(); 
    mediaPlayer.start(); 
} 
+0

Ce code fonctionnera très bien si nous mettons setOnCompletionListener() juste après le setDataSource() dans la fonction playSong. – Aashish

Répondre

0

J'ai trouvé que vous avez un problème à cause de la fonction mediaPlayer.reset(). Il indique

Lorsqu'un objet MediaPlayer est simplement créé en utilisant new ou après avoir appelé reset(), il est dans l'état Idle; et après l'appel de release(), il est dans l'état End. Entre ces deux états se trouve le cycle de vie de l'objet MediaPlayer.

Veuillez passer en revue ce lien. Il y a un joli tableau de flux: https://developer.android.com/reference/android/media/MediaPlayer.html

enter image description here

I belive, après avoir supprimé mediaPlayer.reset() à l'intérieur du corps onCompletionListener, il va se résoudre.

+0

Je supprime la méthode mediaPlayer.reset(), mais le problème persiste toujours comme précédemment. – Aashish

0

Essayez d'ajouter release(). Cela ressemble à un problème de mémoire.

private void playSong(String path) throws IllegalArgumentException, IllegalStateException, IOException { 
    startTime=0; 
    finalTime=0; 
    oneTimeOnly=0; 
    // changing the state of mediaPlayer inside its own callback is a bad practice. 
    //mediaPlayer.stop(); 
    mediaPlayer.release(); // <<------ Add this before reference is gone. 
    mediaPlayer=null; 
    mediaPlayer=new MediaPlayer(); 
    mediaPlayer.setDataSource(path); 
    mediaPlayer.prepare(); 
    mediaPlayer.start(); 
}