【问题标题】:Stop MediaPlayer停止媒体播放器
【发布时间】:2016-12-08 18:27:56
【问题描述】:

我制作了一个安卓应用程序,您可以在其中单击按钮来播放声音。每次,您单击按钮,都会创建一个新的 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();

        }});

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

【问题讨论】:

  • 发布应用崩溃时的堆栈跟踪。

标签: java android media-player


【解决方案1】:

它可能会崩溃,因为 '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

}

【讨论】:

  • 已经用同样的错误尝试了你的代码:/,但第二件事我并没有真正得到
  • 您建议的代码是最好的方法。而不是在不需要时初始化它。 (在这种情况下)。 @LennartSchoch 您将发布日志猫。否则它只是猜测工作。另外我很确定你应该打电话给.release()
【解决方案2】:

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

【讨论】:

  • 提出另一个问题,答案部分用于回答。
【解决方案3】:

注意事项

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

代码

    @Override
    public void onClick(View v) {

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

    }});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多