1

ボタンをクリックしてサウンドを再生できるAndroidアプリケーションを作成しました。ボタンをクリックするたびに、新しい MediaPlayer が作成されます。問題は、別のサウンドがまだ再生されているときにボタンを押すと、同時に再生されますが、以前のサウンドが停止したときに停止することです。ボタンを押します。このコードは既に試しましたが、ボタンを押すたびにアプリケーションがクラッシュします。

MediaPlayer mp;
Button button;

button = (Button) findViewById(R.id.button);

button.setOnClickListener(new OnClickListener() {


        @Override
        public void onClick(View v) {

            if(mp.isPlaying()){

                mp.stop();

            }

            mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
            mp.start();

        }});

私の問題を解決する方法はありますか?

4

3 に答える 3

2

「mp」が初期化されていないため、クラッシュしている可能性があります。これを試して:

    @Override
    public void onClick(View v) {
        //if mp exists and is playing...
        if(mp != null && mp.isPlaying()){

            mp.stop();

        }

        mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
        mp.start();

    }});

編集上で宣言するときに「mp」を初期化することにより、nullのチェックを回避することもできます。

たとえば、mp != null かどうかをチェックする代わりに。「mp」の宣言を次から変更します。

MediaPlayer mp;

MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);

onclick メソッドは次のようになります。

public void onClick(View v) {

    if(mp.isPlaying()) {
        mp.stop();
    }

    //start mp from beginning

}
于 2013-02-01T22:15:24.787 に答える
0

ノート

  • 新しいプレーヤーを作成する前にプレーヤーを解放する必要があります
  • プレーヤーを停止するために isPlaying() チェックに賭けるつもりはありません。必要ないので解放してください!

コード

    @Override
    public void onClick(View v) {

       if(mp != null) { 
           mp.release(); 
       }
       mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
       mp.start();

    }});
于 2015-10-28T07:12:48.727 に答える
0

サウンドを数回クリックするとアプリがクラッシュするため、MediaPlayer を起動しすぎるのは良くないようです。すでに mp.start を mp.reset に変更してリリースしました。

于 2013-02-01T22:44:20.693 に答える