暂停时获取mediaPlayer.getCurrentPosition和SeekBar到Intial时发生java.lang.illegalStateException

时间:2018-09-14 18:26:56

标签: java android

每次关闭活动时,我的Android Music Player应用程序中都会出现java.lang.IllegalStateException

                mCurrentPosition = mediaPlayer.getCurrentPosition()/1000; // In milliseconds

我已经尝试了几乎所有可用的代码,甚至在java.lang.illegalStateException randomly occurs when getting mediaPlayer.getCurrentPosition都尝试过

这是我正在使用的Java代码:

protected void initializeSeekBar(){
    mSeekBar.setMax(mediaPlayer.getDuration()/1000);

    mRunnable = new Runnable() {
        @Override
        public void run() {
            int mCurrentPosition;
            if(mediaPlayer!=null && mediaPlayer.isPlaying()){
                mCurrentPosition = mediaPlayer.getCurrentPosition()/1000; // In milliseconds
            }
            else    {
                mCurrentPosition = 0;
            }

            if (mSeekBar != null)   {
                mSeekBar.setProgress(mCurrentPosition);
                getAudioStats();
            }
            handler.postDelayed(mRunnable,1000);
        }
    };
    handler.postDelayed(mRunnable,1000);
}

请帮助我。在此先感谢

编辑1 另外,我的Seekbar会在音乐暂停播放时开始播放,从暂停前的位置继续播放

mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                getAudioStats();
                initializeSeekBar();

                if(mediaPlayer != null && fromUser) {
                    mediaPlayer.seekTo(progress * 1000);
                }


            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

protected void getAudioStats(){
        long duration  = mediaPlayer.getDuration()/1000; // In milliseconds
        long due = (mediaPlayer.getDuration() - mediaPlayer.getCurrentPosition())/1000;
        long pass = duration - due;

        String test = DateUtils.formatElapsedTime(pass);
        String test1 = DateUtils.formatElapsedTime(due);

        current_time.setText("" + test);
        //mDuration.setText("" + duration + " seconds");
        total_time.setText("" + test1);
    }

0 个答案:

没有答案