我的布局中有 2 个按钮。 1. 播放/暂停 2. 停止 播放和暂停按钮效果很好,但停止按钮不起作用。我实际上不知道问题从哪里开始。
这是我的代码
case R.id.playBtn:
if (mediaPlaying){
mediaPlaying = false;
mPlayer.pause();
playedLength = mPlayer.getCurrentPosition();
playButton.setBackgroundResource(R.drawable.play);
}else{
mediaPlaying = true;
if(mPlayer == null){
// create the media player
mPlayer = new MediaPlayer();
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mediaPlaying = false;
playedLength = 0;
playButton.setBackgroundResource(R.drawable.play);
}
});
try {
afd = getAssets().openFd(""+AUDIO+"");
mPlayer.setDataSource(afd.getFileDescriptor());
mPlayer.prepare();
mPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
} else
// resume playing
mPlayer.seekTo(playedLength);
mPlayer.start();
playButton.setBackgroundResource(R.drawable.pause);
}
break;
case R.id.stopBtn:
if (mediaPlaying){
mediaPlaying = false;
if (mPlayer != null){
mPlayer.stop();
mPlayer = null;
playButton.setBackgroundResource(R.drawable.play);
}
}else{
mediaPlaying = true;
Toast.makeText(getApplicationContext(), "Added to favorites.", Toast.LENGTH_SHORT).show();
if (mPlayer != null){
mPlayer.pause();
mPlayer.seekTo(0);
}
}
break;
我想做这个 当点击停止按钮时,无论播放器正在播放还是暂停,都将完全停止。在播放时,如果我单击停止,播放器会重新启动,但当暂停并单击停止时,播放器不会重新启动。 如有任何帮助,我们将不胜感激。
更新
case R.id.playBtn:
if (state == PlayerState.PLAYING){
mPlayer.pause();
playedLength = mPlayer.getCurrentPosition();
playButton.setBackgroundResource(R.drawable.play);
}else if (state == PlayerState.PLAYING){
if(mPlayer == null){
// create the media player
mPlayer = new MediaPlayer();
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mediaPlaying = false;
playedLength = 0;
playButton.setBackgroundResource(R.drawable.play);
}
});
try {
afd = getAssets().openFd(""+AUDIO+"");
mPlayer.setDataSource(afd.getFileDescriptor());
mPlayer.prepare();
mPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
} else
// resume playing
mPlayer.seekTo(playedLength);
mPlayer.start();
playButton.setBackgroundResource(R.drawable.pause);
}
break;
case R.id.stopBtn:
if (state == PlayerState.STOPPED){
if (mPlayer != null){
mPlayer.stop();
mPlayer = null;
playButton.setBackgroundResource(R.drawable.play);
}
}else if (state == PlayerState.PAUSED){
Toast.makeText(getApplicationContext(), "Added to favorites.", Toast.LENGTH_SHORT).show();
if (mPlayer != null){
mPlayer.pause();
mPlayer.seekTo(0);
}
}
break;
最佳答案
如果 boolean 值是您经历不同行为的原因
单击停止按钮时,mediaPlaying
将具有不同的值。仅当值为 true 时,它才会停止播放器,如果您在播放器暂停时点击停止,则它将为 false
,因此您的代码不会停止播放器。
我建议您添加一个 PlayerState 枚举,例如(播放、停止、暂停)而不是使用 boolean 值。这样您就可以更轻松地了解玩家处于什么状态以及要采取什么操作。
在代码中
public enum PlayerState {
PLAYING,
STOPPED,
PAUSED
}
然后创建变量并设置初始状态(与媒体播放相同(并且在应用程序中的同一位置))
private PlayerState state = PlayerState.STOPPED;
然后在代码中替换操作 mediaPlaying 的位置,并将 if(mediaPlaying) 替换为 if 语句,例如
if (state == PlayerState.PLAYING) { ...
完成此操作后,您不再需要 boolean 值 mediaPlaying。并且您可以更详细地了解应用程序中的媒体播放器状态。
某种状态代码,很难,因为我没有所有代码。在每种情况下检查状态转换,然后设置状态(代码中缺少)
case R.id.playBtn:
if (state == PlayerState.PLAYING){
// logic here for going from playing to paused
state = PlayerState.PAUSED;
} else if (state != PlayerState.PLAYING){
// logic from non playing to playing
state = PlayerState.PLAYING;
}
break;
case R.id.stopBtn:
if (state == PlayerState.PLAYING){
// logic if playing
} else if (state == PlayerState.PAUSED){
// logic if paused
}
state = PlayerState.STOPPED;
break;
关于java - 播放和停止按钮不能同时使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60809907/