0

我的应用程序使用ServiceMediaPlayer流式传输音乐,但在尝试重置mediaplayer以播放下一首曲目时出现问题。重置媒体播放器需要很长时间,并导致用户界面冻结一段时间后快速按下多次,虽然我在另一个线程中调用它。MediaPlayer重置需要很长时间

这里是我的代码片段,我用它来从我的播放列表中的轨道

private void playTrack(int position) { 
    if (!isAudioFocusAvailable()) 
     return; 
    try { 
     sendBufferingStarted(); 
     // Problem is here 
     mPlayer.reset(); 
     mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mPlayer.setDataSource(mTracks.get(mCurrentPosition).getUrl()); 
     mIsBuffering = true; 
     mPlayer.prepareAsync(); 
     mIsPaused = false; 
     acquireWifiWakeLock(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
    } 

} 

任何建议,以避免重置和UI冻结问题

回答

0

试试这个代码,它可以帮助

public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    if(!isPlaying){ 
     mPlayer = new MediaPlayer(); 
     mPlayer.setDataSource(soundid[position]); 
     mPlayer.prepare(); 
     mPlayer.start(); 
     isPlaying = true; // reproducir es true 

    }else{ 

     isPlaying = false; 
     mPlayer.stop(); 
     mPlayer.reset(); 
     mPlayer.setDataSource(soundid[position]); 
     mPlayer.prepare(); 
     mPlayer.start(); 
     isPlaying = true; 

    } 

    mPlayer.setOnCompletionListener(new OnCompletionListener() { 

     public void onCompletion(MediaPlayer mPlayer) { 
      mPlayer.release(); 
      isPlaying = false; 
     } 

    }); 
}