android - 无法停止媒体播放器?

标签 android

当用户进行此 Activity 时,会播放一首歌曲。当他离开这个 Activity 时,一切正常,但是当用户再次进入这个 Activity 时,会播放一首新歌而不停止旧歌。当用户再次访问此 Activity 时,我如何停止播放第一首歌曲?

公共(public)类 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();
}

最佳答案

您正在调用 mediaPlayer.start() 来启动 mediaPlayer。你在哪里调用 mediaPlayer.stop() 来停止它?在单击按钮或根据需要在某处调用停止,或者在 Activity 的 onStop()onPause() 方法中调用停止。

关于android - 无法停止媒体播放器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11557624/

相关文章:

android - 如何在 laravel for android 中创建 API?

java - 是否可以通过编程方式更改 PieRenderer?

android - 如何在 django 中从 android 接收图像文件?

android - 在没有网络访问的本地 wifi 上强制 Android 使用 3G

android - 我可以在我的 webview 中添加一个按钮以获得额外的功能吗?

java - AndEngine、PhysicsWorld 没有更新?

android - 捕获 ListView 屏幕

Android:带有示例的 ActivityGroup 教程

android - 逃跑。 gradle 字符串中的(点)

android - 将 Xcode 键绑定(bind)导入 IntelliJ IDEA