[英]Android media player not working as expected
我对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);
}
});
这些是我用来播放歌曲的步骤,您可以尝试与我的步骤同步以解决错误。
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以便准备好然后播放歌曲,这将检查歌曲是否正在播放,然后停止播放,否则播放。
希望对您有帮助。
对于单击ListView,您需要重置媒体播放器,更改数据源并开始播放新歌曲。
mp.reset();
mp.setDataSource("song you selected from ListView");
mp.prepare();
mp.start();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.