VideoView中getDuration()和getCurrentPosition()获取错误的问题

来源:互联网 发布:淘宝优惠券赚佣金 编辑:程序博客网 时间:2024/06/13 18:26

本文地址:VideoView中getDuration()和getCurrentPosition()获取错误的问题

这几天在做一个App内嵌VideoView的工作。

要实现正在播放的时候,按home键到桌面后,再进入该App,视频还在刚才的进度上播放。


实现思路是再onStop()中调用videoView.getCurrentPosition();但是总有几次获取到的值为0,好像不太稳定,而每次getDuration()时,得到的都是-1.

后面查看他们的源码:

 @Override    public int getCurrentPosition() {        if (isInPlaybackState()) {            return mMediaPlayer.getCurrentPosition();        }        return 0;    }

发现都有一个
isInPlaybackState()
判断播放状态的,内部的代码为:
private boolean isInPlaybackState() {
        return (mMediaPlayer != null &&                mCurrentState != STATE_ERROR &&                mCurrentState != STATE_IDLE &&                mCurrentState != STATE_PREPARING);    }
而该类内部总共定义的状态有:

// all possible internal states    private static final int STATE_ERROR              = -1;    private static final int STATE_IDLE               = 0;    private static final int STATE_PREPARING          = 1;    private static final int STATE_PREPARED           = 2;    private static final int STATE_PLAYING            = 3;    private static final int STATE_PAUSED             = 4;    private static final int STATE_PLAYBACK_COMPLETED = 5;

所以,当Activity处于后台时,肯定不是后面三个状态。

也就是说

<pre name="code" class="java">isInPlaybackState()
一定是false,所以在onStop()时一定获取不到正常的毫秒值。
而后,我在onPause()时获取,就可以。
最后总结:在onStop()、onRestart()中都不能正常获取到正常的毫秒值,
在onPause()中可以获取到。
具体内部细节,还需要进一步了解。



0 0
原创粉丝点击