0

少し問題があります。基本的に、現在、さまざまなサウンドを再生するための単一のボタン設定があり、クリックするたびにランダムなサウンドが再生されます。それは正常に機能しますが、再生しているサウンドファイルの量に等しいボタンを一定量クリックすると、再生が停止します。なぜそれが起こっているのか、それを回避する方法についてかなり困惑しています。

private final int SOUND_CLIPS = 11;
private int mfile[] = new int[SOUND_CLIPS];
private Random rnd = new Random();
MediaPlayer mpButtonOne;

    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //I list all my sounds files here, removed for sake of saving space.        

    Button bButtonOne = (Button) findViewById(R.id.button1);
    bButtonOne.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mpButtonOne = MediaPlayer.create(myMenu.this, mfile[rnd.nextInt(SOUND_CLIPS)]);
            mpButtonOne.seekTo(0);
            mpButtonOne.start();
            }
    });
    }
 }

このコードはすべて、ボタンをクリックするたびにクリップのリストからランダムなサウンド クリップを再生するという、私がやりたいことを実行しますが、一定の回数しか実行せず、再生を停止するようです。どんな助けでも大歓迎です。

4

1 に答える 1

1

MediaPlayer はいつリリースしますか? クリックするたびに新しいものを作成しているようで、決して解放していないようです。最終的にリソースが不足する可能性があります。

MediaPlayer のリリースに関するセクションをお読みください。

http://developer.android.com/guide/topics/media/mediaplayer.html

基本的に、onCompletionListener を実装して MediaPlayer に登録し、そこでクリーンアップを行います。

mpButtonOne.setOnCompletionListener(new SoundCompletionListener());


    private class SoundCompletionListener implements OnCompletionListener{

    @Override
    public void onCompletion(MediaPlayer mp) {
        if(mp!=null){
            mp.release();
            mp=null;
        }   
    }
}
于 2013-09-07T04:00:51.090 に答える