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

本文地址: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()中可以获取到。
具体内部细节,还需要进一步了解。



发布了7 篇原创文章 · 获赞 2 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览