如何让android媒体播放器播放声音?

时间:2013-04-29 14:07:43

标签: java android media-player

我不知道为什么它不起作用,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();mp.stop();以及mp.release();应用播放声音,但该文件未发布...

2 个答案:

答案 0 :(得分:11)

你当然不想马上开始然后立即停止..

问题是你正在紧接着执行这些:

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

你应该打电话给start,然后当声音播放完毕后,释放。您可以使用Completion event来连接侦听器并在那里释放:

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

答案 1 :(得分:2)

Mediaplayer.create(): - 创建新的媒体播放器对象。这个对象是来自raw文件夹的音乐文件,当start()方法播放时被称为

Mediaplayer.start(): - * 开始播放音乐 *如果对象Mediaplayer已初始化。另外提供异常。

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

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

转到此处查看state diagram of mediaplayer

现在您正在做的是启动歌曲并直接停止。我建议您创建按钮,按下按钮后停止媒体播放器。< / p>

其他方式已由 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();
    }});


}