停止播放音乐然后再次播放

时间:2020-06-12 15:46:04

标签: java android android-studio android-mediaplayer media-player

我试图制作一个小型音乐文件阅读器项目,我使用下面的代码播种了我可以播放音乐并暂停它的方法,但是一旦我停止它并单击一个按钮从头开始播放音乐就不会播放 我使用下面的代码,但我不知道如何解决该问题:

 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");

            }
        });

}

3 个答案:

答案 0 :(得分:1)

选项1 :您可以在调用mp.seekTo(0);之后从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");

        }
    });

选项2 :调用mp.reset();时,您正在将对象恢复到“空闲”状态,这就是为什么不能播放音乐的原因。您必须先调用mp.setResource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +String.valueOf("/myfile.mp3"));,然后再调用mp.prepare();,将对象转移到Initialized状态,如下所示:

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的详细信息,here.

答案 1 :(得分:0)

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

mp.stop()
mp.prepare()
mp.start()

这将完成状态机。

答案 2 :(得分:0)

将这些代码行添加到您的btn2 onClick

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

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

                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();
        }
            }
        });

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

这是我根据需要实现的代码,除了我正在从RAW文件夹加载音乐

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);
            }
        });
    }
}