0

私はアンドロイドプログラミングの初心者です。メディアプレーヤーを使用した次のコードがあります。ユーザーが戻るキーを押すか、別のアクティビティに移動しても、サウンドは止まりません。

どうしたの?私は onDestory メソッドを持っていますが、私の問題は存在します!

    public class Elementary1Activity extends Activity implements Runnable, OnClickListener, OnSeekBarChangeListener{
        private SeekBar seekBar;
        private ImageButton startMedia;
        private ImageButton pauseMedia;
        private MediaPlayer mp;

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


            AudioControl();    

        }

        public void AudioControl(){
            seekBar = (SeekBar) findViewById(R.id.seekBarnew2);
            startMedia = (ImageButton) findViewById(R.id.playbuttonnew2);
            pauseMedia = (ImageButton) findViewById(R.id.pausebuttonnew2);
            seekBar.setOnSeekBarChangeListener(this);
            startMedia.setOnClickListener(this);
            pauseMedia.setOnClickListener(this); 
        }    

        public void run() {
            int currentPosition= 0;
            int total = mp.getDuration();
            while (mp!=null && currentPosition<total) {
                try {
                    Thread.sleep(1000);
                    currentPosition= mp.getCurrentPosition();
                } catch (InterruptedException e) {
                    return;
                } catch (Exception e) {
                    return;
                }            
                seekBar.setProgress(currentPosition);
            }
        }

        public void onClick(View v) {
            pauseMedia.setVisibility(View.VISIBLE);
            seekBar.setVisibility(View.VISIBLE);
            startMedia.setVisibility(View.INVISIBLE);
            if (v.equals(startMedia)) {
                if (mp != null && mp.isPlaying()) return;
                if(seekBar.getProgress() > 0) {
                    mp.start();
                    return;
                }
                mp = MediaPlayer.create(Elementary1Activity.this, R.raw.e1);
                mp.start();            

                seekBar.setProgress(0);
                seekBar.setMax(mp.getDuration());
                new Thread(this).start();
            }

            if (v.equals(pauseMedia) && mp!=null) {
                mp.pause();
                pauseMedia.setVisibility(View.INVISIBLE);
                startMedia.setVisibility(View.VISIBLE);

            }       

        }

        @Override
        public void onDestroy() {
           super.onStop();
           mp= MediaPlayer.create(Elementary1Activity.this,R.raw.e1);
           if(mp.isPlaying())
           {
             mp.stop();
             mp.release();
             finish();
           }
          }


        public void onStartTrackingTouch(SeekBar seekBar) {
        }

        public void onStopTrackingTouch(SeekBar seekBar) {
        }

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            if(fromUser) mp.seekTo(progress);

        }


    }
4

2 に答える 2

0

できることは 2 つあります。戻るボタンを押したときに MediaPlayer を停止し、アプリを閉じたい場合、最適なオプションは次のとおりです。

@Override
public void onDestroy(){
    if(mp != null){    
        if(mp.isPlaying()){
            mp.stop
        }
        mp.release();
    }
    super.onDestroy();
}

また、アクティビティを変更したときにその MediaPlayer を停止させたい場合は、次のようにします。

@Override
public void onPause(){
    if (mp != null && mp.isPlaying()){
        mp.pause();
    }
}

それとは別に、アプリを閉じたいときに新しい MediaPlayer を作成しないでください。

于 2013-08-22T07:39:50.310 に答える