2011-05-15 88 views
0

我有一个MediaPlayer对象作为类属性。Media Player停止工作

MediaPlayer mp; 

然后我用他们在我的onCreate方法 -

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

然后我尝试从我的一个按钮停止clicklistener这样的 -

 btnBack = (Button) findViewById(R.id.btn1);  
    btnBack.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      stopSound(); 
      startActivity(new Intent(Five.this, Four.class)); 
      finish(); 

     } 
    }); 
} 

public void stopSound(){ 
    if (mp != null) { 
     mp.release(); 
     mp.stop(); 
    } 
} 

但停止不工作。

我在做什么错了?

回答

3

您已经发布了MediaPlayer实例。它消失了。释放它后,您不能调用stop()。如果您打算恢复声音,只需删除release()调用即可。如果您想销毁MediaPlayer(例如,稍后使用MediaPlayer.create()创建新的MediaPlayer),请删除stop()调用。你应该仔细阅读this documentation; MediaPlayer类非常复杂。你需要了解不同的状态,以及何时可以调用某些方法。

0

你不能叫停止

之前释放看看这里的生命周期http://developer.android.com/reference/android/media/MediaPlayer.html

+0

好的...我删除了释放方法,并呼吁停止。仍然没有区别:( – nasaa 2011-05-15 22:56:35

+0

是mp null?它应该抛出一个异常,如果您尝试从无效状态调用mediaplayer方法。尝试在那里尝试catch(加上使用log.d进行日志记录)并发布logcat的结果 – ingo 2011-05-16 01:27:00

+0

no mp 让我再说一次,当我点击下一个按钮时,试图停止媒体播放器,在那里我试着检查mp!= null,然后调用mp.stop(),它不起作用。也尝试在onDestroy方法中做这个API演示:( 我相信我在做一些愚蠢的事情 – nasaa 2011-05-16 17:57:43

2

在某些版本的Android,只是一些的,我在一个应用程序streamming电台也有类似的问题,它的工作它与:

try{ 
     if(mp!=null && mp.isPlaying()){ 
      mp.stop(); 
     } 
     mp.release(); 
     mp=null; 
     mp = new MediaPlayer(); //I needed this, maybe you dont hac 
    }catch(Exception e){ 
        e.printStackTrace(); 
     System.out.println("I can't believe you get here !"); 
    } 
+0

任何想法它会影响创造mp obj这里..假设它是快速的过程开始和停止。 – CoDe 2013-12-30 10:14:54