我刚刚开始使用Android刚刚开始使用Android,目前引用了过去2天的以下代码,无法解决问题。
代码: https://github.com/quocnguyenvan/media-player-demo
问题:当我们点击第一首歌曲播放它一段时间后,让我们说ListView中的4首歌曲并暂停它而不点击停止。 一旦我们点击第二首歌开始播放第一首歌,我们就无法播放第二首歌,除非我们点击第一首歌的停止如何解决这个问题。
代码无法弄清楚并修复它的问题。我在发布StackOverflow之前已经提到了很多帖子但是无法做到,任何建议或指导都受到高度赞赏。
有问题的代码:
// play music
viewHolder.ivPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(flag){
mediaPlayer = MediaPlayer.create(context, music.getSong());
flag = false;
}
if(mediaPlayer.isPlaying()) {
mediaPlayer.pause();
viewHolder.ivPlay.setImageResource(R.drawable.ic_play);
} else {
mediaPlayer.start();
viewHolder.ivPlay.setImageResource(R.drawable.ic_pause);
}
}
});
// stop
viewHolder.ivStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!flag) {
mediaPlayer.stop();
mediaPlayer.release();
flag = true;
}
viewHolder.ivPlay.setImageResource(R.drawable.ic_play);
}
});
答案 0 :(得分:0)
这些是我用来播放歌曲的步骤,您可以尝试与我的步骤同步以解决错误。
private void initMembers() {
//initialize the members here
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//media prepare
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mediaPlayer) {
//media player prepared
togglePlayPausePlayer();
}
});
//media completion
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(final MediaPlayer mediaPlayer) {
//handle the media play completion
handleOnCompletionLogic();
}
});
}
之后,每当我尝试播放这首歌时。我称这种方法。
public void playMusic(final MusicModel musicModel) {
//here play the music with data in below
try {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.reset();
mMediaPlayer.setDataSource(musicModel.getUrl());
mMediaPlayer.prepareAsync();
} catch (IOException | IllegalStateException exp) {
exp.printStackTrace();
showMessage(getString(R.string.error_unable_play));
}
}
上面重置播放的歌曲并为另一首歌准备播放器。 和OnPreparedListener它调用togglePlayPausePlayer(),相应地播放和暂停歌曲。
private void togglePlayPausePlayer() {
//here handle the logic for play and pause the player
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
setPlayAndPause(false);
} else {
mMediaPlayer.start();
setPlayAndPause(true);
}
}
关键是我们初始化播放器并设置onPrepareListener以供媒体播放器准备然后播放歌曲,这将检查它是否正在播放然后它将停止,否则它将播放。
希望这可以帮到你。
答案 1 :(得分:0)
要点击ListView,您需要重置媒体播放器,更改数据源并开始播放新歌。
mp.reset();
mp.setDataSource("song you selected from ListView");
mp.prepare();
mp.start();