无法停止媒体播放器?

时间:2012-07-19 09:16:47

标签: android

当用户进入此活动时,将播放一首歌曲。当他离开这个活动时,一切都运行良好但是当用户再次进行此活动时,播放新歌而不停止旧歌。当用户再次访问此活动时,我如何能够停止第一首歌?

公共类MediaPlay1扩展了Activity {

private SeekBar seekvolume, seekcontrol;
private TextView txtcrnt, txtremain, txtcrntbig,txttitle;
private ImageButton btnpre, btnnext, btnplay, btnrepeat;
private AudioManager audioManager;
private MediaPlayer mediaPlayer;
private String kg1;
private String MixName1;
private Button btnback, btnplayer;
String MixReplace;
private boolean isDownloading = true;
Handler handler = new Handler();
private boolean isRepeat=false;
private int i = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.media3);

    mediaPlayer = new MediaPlayer();
    initViews();

    if(kg1 != null && MixName1 != null)
    {
    Intent i1 = getIntent();
    kg1 = i1.getStringExtra("Kggg1");
    MixName1 = i1.getStringExtra("mixname1");
    MixReplace=MixName1.replace(".mp3", "  ");
    }else{

    }

}
private void initViews() {

    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    txtcrnt = (TextView) findViewById(R.id.txtcurnt);
    txtremain = (TextView) findViewById(R.id.txtremain);
    txtcrntbig = (TextView) findViewById(R.id.txtcrntbig);
    txttitle=(TextView) findViewById(R.id.title);
    btnpre = (ImageButton) findViewById(R.id.btnpre);
    btnnext = (ImageButton) findViewById(R.id.btnnext);
    btnplay = (ImageButton) findViewById(R.id.btnplay);
    btnrepeat=(ImageButton) findViewById(R.id.btnrepeat);
    btnback = (Button) findViewById(R.id.btnlout);
    btnplayer = (Button) findViewById(R.id.btnedit);
    btnback.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ((MyMixes)getParent()).goBack();
        }
    });

    btnplayer.setClickable(true);
    btnplayer.setEnabled(false);
    btnplayer.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

        }
    });

    if(btnrepeat.isPressed())
    {
        mediaPlayer.setLooping(true);
    }
    txttitle.setText(MixReplace);

    seekcontrol=(SeekBar) findViewById(R.id.seekbarcontrol);

    seekcontrol.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        public void onStopTrackingTouch(SeekBar seekBar) {
        }

        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            if(fromUser){
                mediaPlayer.seekTo(progress);
                seekcontrol.setProgress(progress);
            }

        }
    });

    btnplay.setOnClickListener(new OnClickListener() {

        public void onClick(View paramView) {
                    btnClick();

        }
    });

    new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                Thread.sleep(3000);
                btnplay.setClickable(false);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });
    btnplay.setClickable(true);

    btnnext.setOnClickListener(new OnClickListener() {

        public void onClick(View paramView) {

        }
    });

    btnpre.setOnClickListener(new OnClickListener() {

        public void onClick(View paramView) {



        }
    });

    seekvolume = (SeekBar) findViewById(R.id.seekbarvolume);

    new Thread()
    {
        public void run() 
        {
            while (isDownloading)
            {
                if (Data.filenames != null&& Data.filenames.size() >= (getIntent().getExtras().getInt("index") + 1) && Data.filenames.get(getIntent().getExtras().getInt("index")) != null) 
                {
                    try 
                    {

                        String path = Data.filenames.get(getIntent().getExtras().getInt("index"));
                        mediaPlayer.setDataSource(path);
                        mediaPlayer.prepare();
                        mediaPlayer.start();
                        startPlayProgressUpdater();
                        mediaPlayer.setOnCompletionListener(new OnCompletionListener() 
                        {
                            @Override
                            public void onCompletion(MediaPlayer mp) 
                            {
                                mediaPlayer.seekTo(0);
                            }
                        });
                        mediaPlayer.setOnErrorListener(new OnErrorListener() {

                            @Override
                            public boolean onError(MediaPlayer mp, int what, int extra) {
                                return false;
                            }
                        });
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        isDownloading = false;
                    }

                    if (mediaPlayer != null)
                        seekcontrol.setMax(mediaPlayer.getDuration());

                    int maxvolume = audioManager
                            .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                    int curntvolume = audioManager
                            .getStreamVolume(AudioManager.STREAM_MUSIC);

                    seekvolume.setMax(maxvolume);
                    seekvolume.setProgress(curntvolume);

                    seekvolume
                            .setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

                                public void onStopTrackingTouch(
                                        SeekBar paramSeekBar) {
                                }

                                public void onStartTrackingTouch(
                                        SeekBar paramSeekBar) {
                                }

                                public void onProgressChanged(
                                        SeekBar paramSeekBar, int progress,
                                        boolean paramBoolean) {
                                    audioManager.setStreamVolume(
                                            AudioManager.STREAM_MUSIC,
                                            progress, 0);
                                }
                            });
                    seekcontrol.setMax(mediaPlayer.getDuration());

                    seekcontrol.setOnTouchListener(new OnTouchListener() {
                        public boolean onTouch(View v,
                                MotionEvent paramMotionEvent) {
                            seekChange(v);
                            return false;
                        }
                    });
                }
            }
        };
    }.start();
}

protected void btnClick() {
    i++;
    i = i % 2;
    startSong(i);
}

private void startSong(int i) {
    if (i == 0) {
        System.out.println("11111" + i);
        btnplay.setImageResource(R.drawable.pause);
        try {
            System.out.println("start try chech------");
            mediaPlayer.start();
            startPlayProgressUpdater();
        } catch (Exception e) {
            mediaPlayer.pause();
        }
    }
    if (i == 1) {
        btnplay.setImageResource(R.drawable.play);
        mediaPlayer.pause();
        System.out.println("00000" + i);
    }
}



private Handler my_handler = new Handler() {
    public void handleMessage(Message msg) {
        seekcontrol.setProgress(msg.arg1);
        super.handleMessage(msg);
    }
};

public void startPlayProgressUpdater()
  {
   Message objmessage =  my_handler.obtainMessage();

    boolean isPlaying = mediaPlayer.isPlaying();

    if (isPlaying) {

         objmessage.obj = mediaPlayer.getCurrentPosition();
        Runnable notification = new Runnable() {
            public void run() {
                startPlayProgressUpdater();

                int curtimeplay = mediaPlayer.getCurrentPosition();
                int curntseconds = (int) (curtimeplay / 1000) % 60;
                int curntminutes = (int) ((curtimeplay / (1000 * 60)) % 60);
                txtcrnt.setText(curntminutes + ":" + curntseconds);
                txtcrntbig.setText(curntminutes + ":" + curntseconds);

                int duratplay = mediaPlayer.getDuration();
                int totaldurationseconds = (int) (duratplay / 1000) % 60;
                int totaldurationminutes = (int) ((duratplay / (1000 * 60)) % 60);
                int remianingtime = duratplay - curtimeplay;
                int remianingtimeseconds = (int) (remianingtime / 1000) % 60;
                int remianingtimeminutes = (int) ((remianingtime / (1000 * 60)) % 60);
                txtremain.setText(remianingtimeminutes + ":"    + remianingtimeseconds);
            }
        };
        handler.postDelayed(notification, 1000);
    }
    else 
    {

        mediaPlayer.pause();

        btnplay.setImageResource(R.drawable.play);

    }

    objmessage.arg1 = mediaPlayer.getCurrentPosition();
    my_handler.sendMessage(objmessage);
}

protected void seekChange(View v) {
        if (mediaPlayer.isPlaying()) {
            SeekBar sb = (SeekBar) v;
            mediaPlayer.seekTo(sb.getProgress());
        }
    }
@Override
public void onBackPressed() {
    ((MyMixes)getParent()).goBack();
}

}

1 个答案:

答案 0 :(得分:1)

您正在呼叫mediaPlayer.start()以启动mediaPlayer。你在哪里打电话mediaPlayer.stop()来阻止它?根据需要,或按活动的onStop()onPause()方法,在按钮点击或某处停止呼叫。