我的Android音板应用程序有问题。 当我在我的设备上测试它时,当我按下第8个ImageButton时应用程序崩溃:。 除此之外,我想知道当我按下另一个按钮时我怎么能停止媒体播放器。 这是我的代码:
package nl.ingmar.soundboard;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class Main extends Activity implements OnClickListener {
ImageButton[] imagebuttons = new ImageButton[20];
MediaPlayer[] geluiden = new MediaPlayer[20];
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init() {
for(int i=0; i<geluiden.length; i++){
int rawID = getResources().getIdentifier( "geluid" + (i+1) , "raw" , getPackageName() );
int resID = getResources().getIdentifier("btn" + (i+1), "id", getPackageName());
imagebuttons[i] = ((ImageButton) findViewById(resID));
imagebuttons[i].setOnClickListener(this);
geluiden[i] = MediaPlayer.create(this, rawID);
}
}
@Override
public void onClick(View v) {
int index = 0;
for(int i = 0; i<imagebuttons.length; i++){
if(imagebuttons[i].getId() == v.getId()){
index = i;
geluiden[i].start();
}
}
}
}
答案 0 :(得分:2)
使用这么多MediaPlayer实例是一个坏主意。我的猜测是,创建这么多实例会给你错误。你是没有发布媒体播放器你正在调用release()
来播放声音而你很快就会失去记忆。完成后,在每个实例上调用 geluiden [i] .release()。
我还想告诉你,当你正在播放小音效时,MediaPlayer 不是一个好的选择,因为用户可以点击多个按钮很快,您将不得不为所有这些创建一个MP对象,它不会同步发生。 。转到 SoundPool 类,它允许您将较小的声音保存在内存中,您可以随时播放它们,而不会出现媒体播放器中的任何延迟。 http://developer.android.com/reference/android/media/SoundPool.html这是一个很好的教程:http://www.anddev.org/using_soundpool_instead_of_mediaplayer-t3115.html
答案 1 :(得分:0)
我建议您不要使用这么多nediaplayer实例...由于资源不可用,您可能会因为资源不足而导致Mediaplayer错误(-19,0)错误..因此请使用单个mediapleyer而不是数组媒体播放器..在onclick上创建媒体播放器并开始..检查媒体播放器是否正在播放..
public void onClick(View v) {
....
if(geluiden.isplaying()){
geluiden.stop();
//create mediaplayer player with new resource and start..
}