Android音板崩溃/ MediaPlayer.stop()

时间:2012-04-02 12:29:33

标签: android media-player

我的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();
        }
    }
}
}

2 个答案:

答案 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..
  }