在android中处理媒体播放器的seekTo功能
有一个视频活动,我需要处理: 1) 第一次进入活动时,从intent获得位置并播放视频 2) 旋转后保持相同的位置 下面是处理第一个需求的代码在android中处理媒体播放器的seekTo功能,android,media-player,android-mediaplayer,media,Android,Media Player,Android Mediaplayer,Media,有一个视频活动,我需要处理: 1) 第一次进入活动时,从intent获得位置并播放视频 2) 旋转后保持相同的位置 下面是处理第一个需求的代码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.video_full_screen); ButterKnife.bind(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_full_screen);
ButterKnife.bind(this);
if (getIntent() != null) {
video_url = getIntent().getStringExtra("video_url");
pos = (int)getIntent().getLongExtra("time", 0);
}
player.setOnPreparedListener(this);
player.setVideoURI(Uri.parse(video_url));
}
@Override
public void onPrepared(MediaPlayer mp) {
player.seekTo(pos);
player.start();
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
outState.putInt("time", (int)player.getCurrentPosition());
player.pause();
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
int last_pos = savedInstanceState.getInt("time");
player.seekTo(last_pos);
player.start();
super.onRestoreInstanceState(savedInstanceState);
}
下面是处理第二个需求的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_full_screen);
ButterKnife.bind(this);
if (getIntent() != null) {
video_url = getIntent().getStringExtra("video_url");
pos = (int)getIntent().getLongExtra("time", 0);
}
player.setOnPreparedListener(this);
player.setVideoURI(Uri.parse(video_url));
}
@Override
public void onPrepared(MediaPlayer mp) {
player.seekTo(pos);
player.start();
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
outState.putInt("time", (int)player.getCurrentPosition());
player.pause();
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
int last_pos = savedInstanceState.getInt("time");
player.seekTo(last_pos);
player.start();
super.onRestoreInstanceState(savedInstanceState);
}
问题是处理方式相互冲突
如果第一次进入进度是10秒,当我以例如30秒的速度玩并旋转时,它仍然会变为10秒而不是30秒
这是由onPrepared函数中的seekTo(pos)引起的,但我不能删除它,因为它处理第一个需求
如何解决这个问题?感谢您的帮助。旋转屏幕调用onDestroy()。是否在onDestroy()中保存时间进度?有关android生命周期的更多信息,请参阅:旋转屏幕调用onDestroy()。是否在onDestroy()中保存时间进度?有关android生命周期的更多信息,请参阅: