0

ボタンを押したときに音を鳴らそうとしています。そうするために、私はいくつかの方法を試しました:

1 : 下に MediaPlayer を作成し、ボタンが押されたときに次のように再生しました。

MediaPlayer mp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mp = MediaPlayer.create(MainActivity.this, R.raw.bell);
    mp.setLooping(false);
    Button b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            mp.seekTo(0);
            mp.start();
        }
    });
}

この方法は魅力的に機能しました。しかし、その後、メモリを節約したいと考え、アクティビティがバックグラウンドにあるときに MediaPlayer を解放したいと考えました。だから私はこれを追加しました

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    mp.release();
    super.onPause();
}

しかし、アクティビティがフォアグラウンドに戻ると、エラーがスローされます (MediaPlayer が OnCreate の下に作成されるため)。そこで、常に呼び出される onResume の下に作成することにしました。

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    mp = MediaPlayer.create(MainActivity.this, R.raw.bell);
    mp.setLooping(false);
    super.onResume();
}

出来た。

完全なコードは次のようになります。

package com.example.learn;

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

public class MainActivity extends Activity implements OnClickListener {

    MediaPlayer mp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(this);
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        mp.release();
        super.onPause();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        mp = MediaPlayer.create(MainActivity.this, R.raw.bell);
        mp.setLooping(false);
        super.onResume();
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.button1: {
            mp.seekTo(0);
            mp.start();
        }
        }

    }

}

私はそれを正しくやったのだろうか?より良い簡単な方法はありますか?

4

1 に答える 1

0

あなたのコードを見ると、あなたは正しい方法でそれを行ったと思います。常に呼び出されるため、onResume で作成できます。作成時は初回のみ呼び出されます。はい、常に電話します

mediaPlayer.relaese();

それ以外の

mediaPlayer.stop();

コード内のすべてが正しく見えます。より正確にするには、このLINKを一目で確認できます

于 2013-10-09T04:13:27.540 に答える