3

我不知道为什么它不起作用,logcat中没有记录错误,但我听不到声音。

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();ANDmp.stop();并且mp.release();应用程序播放声音,但文件没有被释放......

4

2 回答 2

11

您当然不想立即开始然后停止..

问题是您正在一个接一个地执行这些:

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

您应该调用 start,然后在播放完声音后释放。您可以使用Completion 事件来连接侦听器并在那里释放:

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
    public void onCompletion(MediaPlayer player) {
       player.release();          
    }
})
于 2013-04-29T14:10:26.617 回答
2

Mediaplayer.create(): - 创建mediaplayer 的新对象。这个对象有来自 raw 文件夹的音乐文件,当 start() 方法被调用时播放

Mediaplayer.start():- *开始播放音乐* 如果对象 Mediaplayer 被初始化。否则给出异常。

Mediaplayer.stop() : -*停止* 当前正在进行的音乐与该对象。

Mediaplayer.release() :-音乐文件路径不再与 Mediaplayer 对象关联。所以你需要重新分配内存和所有。请注意 mediaplayer 不会为null

去这里看看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();
    }});


}
于 2013-04-29T14:30:47.853 回答