Java 停止音乐并再次播放

Java 停止音乐并再次播放,java,android,android-studio,android-mediaplayer,media-player,Java,Android,Android Studio,Android Mediaplayer,Media Player,我试着做一个小的音乐文件阅读器项目,我使用下面的代码,我可以播放音乐并暂停,但一旦我停止播放并点击一个按钮从一开始播放音乐,音乐就不会播放 我使用了下面的代码,我不知道如何解决这个问题: final MediaPlayer mp=new MediaPlayer(); mp.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mp.setDataSource(Environment.getExtern

我试着做一个小的音乐文件阅读器项目,我使用下面的代码,我可以播放音乐并暂停,但一旦我停止播放并点击一个按钮从一开始播放音乐,音乐就不会播放 我使用了下面的代码,我不知道如何解决这个问题:

 final MediaPlayer mp=new MediaPlayer();
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
 try {
            mp.setDataSource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +String.valueOf("/myfile.mp3"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!mp.isPlaying()){
                try{
                    mp.prepare();

                }catch(Exception e){e.printStackTrace();}
                    mp.start();
                    btn1.setText("pause");

                }else{
                    mp.pause();
                    btn1.setText("play");

                }
            }
        });



        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mp.stop();
                mp.reset();
                btn2.setVisibility(btn2.INVISIBLE);
                btn1.setText("play");

            }
        });

}

从文档的状态机来看,似乎您必须使用

mp.stop()
mp.prepare()
mp.start()
这将完成状态机

选项1:您可以使用mp.seekTo0从头开始返回;呼叫mp.stop后;同时移除mp.reset;像这样:

btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mp.stop();
            mp.seekTo(0);
            btn2.setVisibility(btn2.INVISIBLE);
            btn1.setText("play");

        }
    });
btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mp.stop();
            mp.reset();
            btn2.setResource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +String.valueOf("/myfile.mp3"));
            mp.prepare();
            btn1.setText("play");

        }
    });
选项2:调用mp.reset时;您正在将对象恢复为空闲状态,这就是无法播放音乐的原因。必须通过调用mp.setResourceEnvironment.getExternalStoragePublicDirectoryEnvironment.DIRECTORY\u DOWNLOADS+String.valueOf/myfile.mp3将对象转换为初始化状态;然后mp准备;像这样:

btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mp.stop();
            mp.seekTo(0);
            btn2.setVisibility(btn2.INVISIBLE);
            btn1.setText("play");

        }
    });
btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mp.stop();
            mp.reset();
            btn2.setResource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +String.valueOf("/myfile.mp3"));
            mp.prepare();
            btn1.setText("play");

        }
    });
我建议你选择选项1


我希望这有帮助。我没有做过任何android编程,但我了解一些Java,并阅读了有关MediaPlayer的详细信息。请在您的btn2 onClick中添加这些代码行

它将修复媒体播放器,以便在您重置后再次播放

这是我的代码实现了你想要的,除了我加载的原始文件夹音乐

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Button stopButton = (Button) findViewById(R.id.button_stop);
        final Button playButton = (Button) findViewById(R.id.button_play);

        mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.file);
        playButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(!mediaPlayer.isPlaying()){
                    mediaPlayer.start();
                    playButton.setText("pause");
                    stopButton.setVisibility(View.VISIBLE);

                }else{
                    mediaPlayer.pause();
                    playButton.setText("play");

                }
            }
        });



        stopButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer.stop();
                mediaPlayer.reset();
                stopButton.setVisibility(INVISIBLE);
                playButton.setText("play");
                mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.file);
            }
        });
    }
}

谢谢,但我不想在点击BTN1时启动。很抱歉,我当时可能没有收到你的问题。这是按钮2的提案,因为它将从这里开始。你想对按钮1做什么?btn1是播放或暂停音乐,如果我点击btn2,音乐将停止,如果我在btn2之后点击btn1,音乐将从begginingi重新启动。我认为mp.reset可以这样做吗?@fatima我更新了我的答案。如果还有问题就告诉我。我很乐意帮你找到解决办法。对这很有效,两个都有效。非常感谢much@fatima我很高兴它成功了。试着探索一下,你会学到很多关于类的函数及其方法的知识,还有更多