java - 播放和停止按钮不能同时使用

标签 java android android-mediaplayer

我的布局中有 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/

相关文章:

java - 在 java 中添加自定义 HTTP header

java - 我的媒体播放器启动了一个新实例而不是停止

android - 如何在Android上实现循环之间的无缝音频播放

android - 多个副本从 SD 卡加载到 GridView

java - 对象内的 Jackson Json 列表

java - 使用下拉列表在 Java 中创建自动完成文本框

java - 关于 SimpleDB 查询

android - 如何下载和构建 libijs 源?

android - 在 Android AAR 库中,我可以公开一个公共(public) API 并隐藏实现吗?

java - 图像方向和 ExifInterface