在 android 中处理媒体播放器的 seekTo 功能
Handle the seekTo function of media player in android
有一个视频activity,我需要处理:
1) 第一次进入activity时,根据intent获取位置并播放视频
2) 旋转后保持原位置
这是处理第一个需求的代码
@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);
}
问题是处理是相互冲突的。
如果第一次进入进度是10s,当我玩的时候30s 和 rotate ,它仍然去 10s 而不是 30s.
这是由 onPrepared 函数中的 seekTo(pos) 引起的,但我无法删除它,因为它处理了第一个要求。
如何解决?感谢您的帮助。
旋转屏幕调用onDestroy()。您是否在 onDestroy() 中保存了时间进度?有关 android 生命周期的更多信息,请参阅:https://androidcookbook.com/Recipe.seam?recipeId=2636
有一个视频activity,我需要处理:
1) 第一次进入activity时,根据intent获取位置并播放视频
2) 旋转后保持原位置
这是处理第一个需求的代码
@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);
}
问题是处理是相互冲突的。
如果第一次进入进度是10s,当我玩的时候30s 和 rotate ,它仍然去 10s 而不是 30s.
这是由 onPrepared 函数中的 seekTo(pos) 引起的,但我无法删除它,因为它处理了第一个要求。
如何解决?感谢您的帮助。
旋转屏幕调用onDestroy()。您是否在 onDestroy() 中保存了时间进度?有关 android 生命周期的更多信息,请参阅:https://androidcookbook.com/Recipe.seam?recipeId=2636