2014-09-05 71 views
4

我正在嘗試使用mediacontroller播放音頻。我能夠使音頻工作,但是當歌曲開始播放時,我的媒體控制器上的播放按鈕不會更新。如果按媒體控制器上的播放按鈕,它會暫停歌曲並尋找進度條。然後,如果我按暫停它再次播放歌曲。我打電話播放歌曲時MediaController播放按鈕不會更新

mp.start() 

這是否不更新播放按鈕。當我打電話開始時,怎樣才能讓按鈕變成暫停按鈕?

public class QuickMusicPlayer implements MediaController.MediaPlayerControl { 

private final MediaPlayer mMediaPlayer; 
private final MediaController mMediaController; 
private Activity mActivity; 

public QuickMusicPlayer(View anchorView, Activity activity) { 
    mActivity = activity; 
    mMediaPlayer = new MediaPlayer(); 
    mMediaController = new MediaController(activity); 
    mMediaController.setMediaPlayer(this); 
    mMediaController.setAnchorView(anchorView); 
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
} 

public void setUrl(String url) { 
    mMediaPlayer.reset(); 
    if (TextUtils.isEmpty(url)) { 
     ViewUtil.showCroutonAlert(mActivity, R.string.cant_play_music); 
    } else { 
     try { 

      mMediaPlayer.setDataSource(url); 
      mMediaPlayer.prepareAsync(); 
      mMediaController.setEnabled(true); 
      mMediaController.show(0); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

@Override 
public void start() { 
    mMediaPlayer.start(); 
} 

@Override 
public void pause() { 
    mMediaPlayer.pause(); 
} 

@Override 
public int getDuration() { 
    return mMediaPlayer.getDuration(); 
} 

@Override 
public int getCurrentPosition() { 
    return mMediaPlayer.getCurrentPosition(); 
} 

@Override 
public void seekTo(int pos) { 
    mMediaPlayer.seekTo(pos); 
} 

@Override 
public boolean isPlaying() { 
    return mMediaPlayer.isPlaying(); 
} 

@Override 
public int getBufferPercentage() { 
    return 0; 
} 

@Override 
public boolean canPause() { 
    return true; 
} 

@Override 
public boolean canSeekBackward() { 
    return true; 
} 

@Override 
public boolean canSeekForward() { 
    return true; 
} 

@Override 
public int getAudioSessionId() { 
    return 0; 
} 

}

回答

7

想通了。我需要在開始更新按鈕後再次致電演出

mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
     mp.start(); 
     mMediaController.show(0); 
    } 
});