2013-04-29 146 views
3

我不知道爲什麼它不起作用,logcat中沒有記錄錯誤,但我聽不到聲音。如何讓android媒體播放器播放聲音?

public static void DeclararSonido(int numero, Context contexto){ 
    switch(numero){ 
    case 0: 
     mp = MediaPlayer.create(contexto, R.raw.alan); 
     break;   
    } 
} 

public static void TocarPiedra(int posicion, Context contexto){ 
    DeclararSonido(posicion, contexto); 


    mp.start(); 
    mp.stop(); 
    mp.release(); 
} 
public static void TocarSirena(Context contexto){ 
    MediaPlayer mp2= MediaPlayer.create(contexto, R.raw.doh); 


    mp2.start(); 
    mp2.stop(); 
    mp2.release(); 

} 

如果我抹去mp2.stop();mp2.release();mp.stop();mp.release();應用程序播放聲音,但該文件沒有被釋放...

+0

是什麼問題? – 2013-04-29 14:09:04

+0

*「Alomejor es por la extension」* Los comentarios enespañolno son de mucha ayuda para nosotros los de habla inglesa。 Por青睞,海上運動和賽道。 – 2013-04-29 14:14:40

+0

更好地編輯原始問題http://stackoverflow.com/questions/16276652/mediaplayer-no-works-relese-and-stop-error更好地適合堆棧溢出標準,而不是發佈幾乎相同。 – laalto 2013-04-29 14:18:58

回答

8

你顯然不希望開始,然後馬上停止..

的問題是,你是接連執行這些正確的:

mp.start();  // starts playback 
mp.stop();  // .. then stops immediately .. 
mp.release(); 

你應該開始,然後當聲音完成播放時,釋放。您可以使用Completion event掛鉤的監聽器和版本有:

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){ 
    public void onCompletion(MediaPlayer player) { 
     player.release();   
    } 
}) 
+0

非常感謝Miky! ^^ – CristianCV 2013-04-29 14:30:19

2

Mediaplayer.create(): - 創建媒體播放器。這個對象的新對象具有原始文件夾是音樂文件 * 開始播放音樂 *如果對象MediaPlayer正在初始化。否則給人異常 - :當start()方法被調用

Mediaplayer.start()播放。

Mediaplayer.stop(): - * 停止 *當前正在進行的音樂與該對象。

Mediaplayer.release(): - 的音樂文件路徑不再與MediaPlayer對象關聯。所以你需要重新分配內存和所有。介意它mediaplayer不會是null

這裏去看看state diagram of mediaplayer

現在你在做什麼是開始的歌曲,並直接停止它。我建議你創建按鈕,當按鈕被按下停止的媒體播放器。

其他方式已經由Miky Dinescu給出setoncompletelistner。

所以,做如下

public static void DeclararSonido(int numero, Context contexto){ 
    switch(numero){ 
    case 0: 
     mp = MediaPlayer.create(contexto, R.raw.alan); 
     break;   
    } 
} 

public static void TocarPiedra(int posicion, Context contexto){ 
    DeclararSonido(posicion, contexto); 


    mp.start(); 
    mp.setOnCompleteListener(new OnCompleteListener(){ 
    public void OnCompletion(MediaPlayer mp){ 
    mp.stop(); 
    mp.release(); 
    }}); 
} 
public static void TocarSirena(Context contexto){ 
    MediaPlayer mp2= MediaPlayer.create(contexto, R.raw.doh); 

    //Alomejor es por la extension 

    mp2.start(); 
    mp2.setOnCompleteListener(new OnCompleteListener(){ 
    public void OnCompletion(MediaPlayer mp){ 
    mp2.stop(); 
    mp2.release(); 
    }}); 


}