0

メディアプレーヤーを使用してサウンドを再生する、シンプルなAndroidアプリケーションを開発しています。タッチすると音が鳴るボタンが付いています。戻るボタンをタッチしたとき;音が鳴っている場合は停止する必要があります。サウンドが再生されていない(再生が終了している)場合は、前のアクティビティに戻る必要がありますが、IllegalStateExceptionでクラッシュしました。前もって感謝します。

ボタンのコードです。

SoundButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

            if (mp != null) {
                mp.stop();
            }
            mp = MediaPlayer.create(getApplicationContext(),
                    R.raw.p3_x1_slow);
            mp.reset();
            try {
                mp.prepare();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            mp.setOnCompletionListener(new OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    // TODO Auto-generated method stub
                    mp.release();
                }
            });

            mp.start();

        }
    });

これで戻るボタンを検出しました

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (mp != null || mp.isPlaying()) {
            Practice_3_detail.this.finish();
        } else if (mp == null) {
            finish();
        } else if(mp != null && mp.isPlaying()){
            //mp.pause();
            finish();
        } else
        {
            finish();
        }

    }
    return true;
}
4

1 に答える 1

1

以下のコードを試してください。現在のアクティビティを終了する前に、メディアプレーヤーを停止し、そのオブジェクトを解放する必要があります。

@オーバーライド

 public boolean onKeyDown(int keyCode, KeyEvent event) 
 {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
        {
             if(mp != null)
             {
                 mp.stop();
                 mp.release();
             }
             finish();
             return true;
        }
        return super.onKeyDown(keyCode, event);
  }
于 2012-09-07T03:24:39.670 に答える