2013-04-29 166 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(); 
    }}); 


}