我创建了一个活动来播放视频:
初始化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);
}
});
}
如果我单击“暂停/开始”按钮,它将返回正确的位置, 但是,如果单击暂停->单击搜寻栏以更改位置->单击开始,则无法从新位置开始。
再次播放后登录:
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
答案 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();