在android中处理媒体播放器的seekTo功能

时间:2016-01-13 18:29:58

标签: android media-player android-mediaplayer media

有一个视频活动,我需要处理:

1)第一次进入活动时,从意图中获取位置并播放视频

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);
    }

问题是处理是相互冲突的。

如果第一次输入progess是10s,当我在例如30秒旋转,它仍然是10秒而不是30秒。

它是由onPrepared函数的seekTo(pos)引起的,但我无法删除它,因为它处理第一个要求。

如何解决这个问题?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

旋转屏幕调用onDestroy()。你在onDestroy()中节省了时间进度吗?有关Android生命周期的更多信息,请参阅:https://androidcookbook.com/Recipe.seam?recipeId=2636