0

非常に単純な Android アプリケーションを作成する必要がありますが、深刻な問題があります。

これが私のクラスです:

package com.music.playa;

import java.util.Random;

import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class PlayMusic extends Activity {

    MediaPlayer mediaPlayer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void playSound() {

        try {
            mediaPlayer.stop();
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;         
        } catch (Exception ex) {

        }

        String[] sounds = { "sound1", "sound2", "sound3" };
        mediaPlayer = null;
        int path = getResources().getIdentifier(
                sounds[new Random().nextInt(sounds.length)], "raw",
                getPackageName());
        mediaPlayer = MediaPlayer.create(this, path);

        mediaPlayer
                .setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        // do something...
                    }
                });

        mediaPlayer.setVolume(1, 1);
        mediaPlayer.start();

    }

}

問題は、ボタンを押し続けて PlaySound 関数を呼び出すと、しばらくすると (ボタンを約 40 ~ 50 回押すと)、コンソールが多くのエラーをスローすることです。

05-28 12:56:00.202: E/MediaPlayer(755): error (-38, 0)
05-28 12:56:01.153: E/MediaPlayer(755): error (-19, 0)
05-28 12:56:01.153: E/MediaPlayer(755): Error (-19,0)

と音の再生が停止します。

私は何をすべきか?

Android SDK 2.3.3

4

1 に答える 1

0

メディア プレーヤーのインスタンスを PlayMedia クラスのフィールドとして作成し、ボタンの onClick リスナーを設定する前に初期化する必要があります。

onResume() で準備し、onPause() で解放します。ボタンが行う必要があるのは、停止/開始だけです。

于 2012-05-28T14:26:01.793 に答える