播放和停止按钮不能一起使用



我的布局中有两个按钮。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;

如果布尔值单击停止按钮时,mediaPlaying将具有不同的值。只有当值为true时,它才会停止播放器,如果你在播放器暂停时点击停止,它将是false,所以你的代码不会停止播放器。

我建议您为例如(PLAYING、STOPPED、PAUSED(添加PlayerState枚举,而不是使用布尔值。这样你就更容易知道球员处于什么状态,以及该采取什么行动。

码内

public enum PlayerState {
PLAYING,
STOPPED,
PAUSED
}

然后创建变量并设置初始状态(与mediaPlaying相同(在应用程序中的相同位置(

private PlayerState state = PlayerState.STOPPED;

然后在您的代码中,您将替换操作mediaPlaying的位置,并将if(mediaPlaying(替换为等if语句

if (state == PlayerState.PLAYING) { ...

一旦完成,您就不再需要布尔媒体播放。在应用程序中,您可以更好地了解媒体播放器的状态。

某种状态代码,很难,因为我没有所有的代码。在每种情况下,检查状态转换,然后设置状态(代码中缺少(

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;

最新更新