重新启动后,为什么MediaPlayer重设位置?

时间:2018-09-05 08:44:36

标签: android

我创建了一个活动来播放视频:

初始化MediaPlayer并自动开始播放视频

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
    Surface surface = new Surface(surfaceTexture);

    try {
        // AssetFileDescriptor afd = getAssets().openFd(FILE_NAME);
        mMediaPlayer = new MediaPlayer();
        // mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        mMediaPlayer.setDataSource(FILE_NAME);
        mMediaPlayer.setSurface(surface);
        mMediaPlayer.setLooping(true);
        mMediaPlayer.prepareAsync();

        // Play video when the media source is ready for playback.
        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mediaPlayer.start();

                initializeSeekBar();
            }
        });

    } catch (IllegalArgumentException e) {
        Log.d(TAG, e.getMessage());
    } catch (SecurityException e) {
        Log.d(TAG, e.getMessage());
    } catch (IllegalStateException e) {
        Log.d(TAG, e.getMessage());
    } catch (IOException e) {
        Log.d(TAG, e.getMessage());
    }
}

oncreate的代码:

seekBar = (SeekBar) findViewById(R.id.seekBar);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(mMediaPlayer != null && fromUser){
                    mMediaPlayer.seekTo(progress );
                }
            }   

        });
        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mMediaPlayer.isPlaying())
                {
                    mMediaPlayer.pause();
                    btnPlay.setBackgroundResource(android.R.drawable.ic_media_play);
                }
                else
                { 

Log.d("daitran",String.valueOf(mMediaPlayer.getCurrentPosition()));
                        int currentpos=mMediaPlayer.getCurrentPosition();
                        mMediaPlayer.start();        
 Log.d("daitran",String.valueOf(mMediaPlayer.getCurrentPosition()));          
               btnPlay.setBackgroundResource(android.R.drawable.ic_media_pause);
                    }
                }
            });

更新搜寻栏的值:

protected void initializeSeekBar(){
        seekBar.setMax(mMediaPlayer.getDuration());
        //Make sure you update Seekbar on UI thread
        E045.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                if(mMediaPlayer != null && mMediaPlayer.isPlaying()){ 
                    Log.d("daitran",String.valueOf(mMediaPlayer.getCurrentPosition()));
                    int mCurrentPosition = mMediaPlayer.getCurrentPosition() ;
                    seekBar.setProgress(mCurrentPosition);
                    if(mCurrentPosition==100)
                    {
                        btnPlay.setBackgroundResource(android.R.drawable.ic_media_play);
                    }
                }
                mHandler.postDelayed(this, 1000);
            }
        });
    }

如果我单击“暂停/开始”按钮,它将返回正确的位置, 但是,如果单击暂停->单击搜寻栏以更改位置->单击开始,则无法从新位置开始。

为什么MediaPlayer在重新启动后重设位置? enter image description here

再次播放后登录:

09-05 17:27:03.936 27287-27287/com.example.android.camera2video D/daitran: 12000
09-05 17:27:03.949 27287-27287/com.example.android.camera2video D/daitran: 128
09-05 17:27:04.231 27287-27287/com.example.android.camera2video D/daitran: 150
09-05 17:27:05.312 27287-27287/com.example.android.camera2video D/daitran: 1232
09-05 17:27:06.318 27287-27287/com.example.android.camera2video D/daitran: 2239
09-05 17:27:07.362 27287-27287/com.example.android.camera2video D/daitran: 3282

2 个答案:

答案 0 :(得分:1)

如果您想从特定位置恢复工作,应该这样做:

Mediaplayer.seekTo(targetPosition);
Mediaplayer.start();

所以targetPosition是您要从那里恢复的职位

答案 1 :(得分:1)

参考:How to resume the mediaplayer?

暂停我使用的Mediaplayer:

Mediaplayer.pause();
length=Mediaplayer.getCurrentPosition();

要从最近停止的位置恢复播放器,可以执行以下操作:

Mediaplayer.seekTo(length);
Mediaplayer.start();