简体   繁体   English

播放歌曲时,MediaController播放按钮不会更新

[英]MediaController play button not updating when song is playing

I am trying to use the mediacontroller to play audio. 我正在尝试使用mediacontroller播放音频。 I am able to get the audio working but when the song starts playing the play button on my mediacontroller does not update. 我能够让音频工作但是当歌曲开始播放时我的mediacontroller上的播放按钮不会更新。 If press the play button on the mediacontroller it pauses the song and seeks the progressbar. 如果按下mediacontroller上的播放按钮,它会暂停歌曲并寻找进度条。 Then if i press pause it plays the song again. 然后,如果我按暂停,它会再次播放该歌曲。 i am calling 我在打电话

mp.start() 

does this not update the play button. 这不会更新播放按钮。 How can I get the button to change to the pause button when I call 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;
}

} }

Figured it out. 弄清楚了。 I need to call show again after start to update the buttons 我需要在开始更新按钮后再次调用show

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM