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