2016-09-27 126 views
0

當用戶從listview中選擇歌曲時,我使用以下代碼播放音樂。阻止媒體播放器調用onCompletionListener

if (mMediaPlayer.isPlaying()) { 
      mMediaPlayer.reset(); 
      try { 
       mMediaPlayer.setDataSource(MainActivity.localTrackList.get(MainActivity.currentOffset).getPath()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mMediaPlayer.prepareAsync(); 

     } else { 
      mMediaPlayer = new MediaPlayer(); 
      try { 
       mMediaPlayer.setDataSource(MainActivity.localTrackList.get(MainActivity.currentOffset).getPath()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mMediaPlayer.prepareAsync(); 
     } 

mMediaPlayer.reset();正在調用onCompletionListener。在我的oncompletionListener中,我正在播放下一首歌曲,因此不是播放所選歌曲,而是播放listview中的下一首歌曲。是否有任何方法可以阻止撥打onCompletionListener並只播放從listview中選擇的歌曲?

+0

嗨。也許你可以添加一個布爾標誌(isMediaPlayerReset),並在播放器手動重置時將其設置爲true,並在onCompletionListener上檢查它。 – Lev

+0

好的時候應該將isMediaPlayerReset設置爲true和false?我應該如何處理生命週期?任何暗示或要點將不勝感激 –

回答

2

你可以做這樣的事情。

boolean isMediaPlayerReset = false; 
MediaPlayer mMediaPlayer = null; 



    //on list item click 
    if(mMediaPlayer.isPlaying()){ 
     isMediaPlayerReset = true; 
     mMediaPlayer.reset(); 
     try { 
      mMediaPlayer.setDataSource("/path"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     mMediaPlayer.prepareAsync(); 
    } 

    mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) { 
      if(isMediaPlayerReset){ 
       isMediaPlayerReset = false; 
       return; 
      } 
      //play next song 
     } 
    });