2013-02-01 132 views
1

我做了一个android应用程序,你可以点击按钮来播放声音。每次单击按钮时,都会创建一个新的MediaPlayer,问题是,当您在另一个声音仍在播放期间按下按钮时,它们同时播放,但是我想,以前的声音在您停止时会停止按下按钮。我已经试过这段代码,但每次按下按钮时我的应用程序崩溃:停止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(); 

     }}); 

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

+0

后从当你的应用程序崩溃的堆栈跟踪。 – FoamyGuy

回答

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' 的声明:

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 

} 
+0

已经尝试了你的代码,但是出现了同样的错误:但是第二件事我并没有真正得到 –

+1

你建议的代码是最好的方法。而不是在不需要时初始化它。 (在这种情况下)。 @LennartSchoch你将很高兴发布logcat。否则它只是猜测的工作。加上我很确定你打算调用'.release()' – Doomsknight

0

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

+0

提出另一个问题,答案部分是答案。 –

0

  • 你必须创建之前释放玩家一个新的
  • 我不会赌IsPlaying模块()检查停止播放;因为你不需要它释放它!

代码

@Override 
    public void onClick(View v) { 

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

    }});