1

我制作了一个 android 应用程序,您可以在其中单击按钮来播放声音。每次,您单击按钮,都会创建一个新的 MediaPlayer,问题是,当您在另一个声音仍在播放期间按下按钮时,它们正在同时播放,但我希望,当您按下按钮。我已经尝试过这段代码,但每次按下按钮时我的应用程序都会崩溃:

MediaPlayer mp;
Button button;

button = (Button) findViewById(R.id.button);

button.setOnClickListener(new OnClickListener() {


        @Override
        public void onClick(View v) {

            if(mp.isPlaying()){

                mp.stop();

            }

            mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
            mp.start();

        }});

有没有办法解决我的问题?

4

3 回答 3

2

它可能会崩溃,因为 'mp' 未初始化。尝试这个:

    @Override
    public void onClick(View v) {
        //if mp exists and is playing...
        if(mp != null && mp.isPlaying()){

            mp.stop();

        }

        mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
        mp.start();

    }});

编辑您还可以通过在顶部声明'mp'时初始化'mp'来避免检查null。

例如,而不是检查是否 mp != null。将您的“mp”声明更改为:

MediaPlayer mp;

MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);

您的 onclick 方法可能如下所示:

public void onClick(View v) {

    if(mp.isPlaying()) {
        mp.stop();
    }

    //start mp from beginning

}
于 2013-02-01T22:15:24.787 回答
0

似乎启动过多的 MediaPlayer 并不好,因为当我点击几次声音时,应用程序崩溃了。我已经将 mp.start 更改为 mp.reset 并发布。

于 2013-02-01T22:44:20.693 回答
0

笔记

  • 您必须在创建新播放器之前释放播放器
  • 我不会赌 isPlaying() 检查来阻止玩家;因为你不需要它释放它!

代码

    @Override
    public void onClick(View v) {

       if(mp != null) { 
           mp.release(); 
       }
       mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
       mp.start();

    }});
于 2015-10-28T07:12:48.727 回答