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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值