播放和停止按钮不起作用

问题描述 投票:0回答:1

我的布局中有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;
java android android-mediaplayer
1个回答
0
投票

如果出现布尔值,您会经历不同行为的原因单击停止按钮时,mediaPlaying将具有不同的值。如果值为true,它将仅停止播放器,并且如果在播放器暂停时按下Stop,它将为false,因此您的代码不会停止播放器。

我建议您添加一个PlayerState枚举,例如(播放,停止,暂停),而不是使用布尔值。这样,您就可以更轻松地了解播放器处于什么状态以及要采取什么措施。

用代码输入

public enum PlayerState {
    PLAYING,
    STOPPED,
    PAUSED
}

然后您创建变量并设置初始状态(与mediaPlay的操作相同(并且在应用程序的同一位置))

private PlayerState state = PlayerState.STOPPED;

然后在您的代码中,替换操纵mediaPlay的位置,并将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;
© www.soinside.com 2019 - 2024. All rights reserved.