2016-09-27 62 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 
     } 
    });