播放器视图被另一个窗口遮挡

时间:2020-08-15 17:41:12

标签: android android-youtube-api

在android youTubePlayerView播放Youtube视频时,只要状态栏展开或长按Android设备的电源按钮,播放器就会引发错误UNAUTHORIZED_OVERLAY并显示以下警告,并且视频会暂停:

W / YouTubeAndroidPlayerAPI(2987):由于播放器顶部未经授权的覆盖,视频播放停止。播放器视图被另一个窗口遮挡。

如果这是一项功能,则可以,欢迎使用。但是,当移除叠加层时(例如,状态栏再次缩小时),我们应该收到通知,以便我们可以恢复暂停的视频。如果没有通知,那么我们应该能够(以编程方式)手动检查是否已清除障碍物。

我尝试过的是在几毫秒后播放视频。但这不是一个好主意,因为如果没有消除障碍物并且我播放了视频,那么视频将播放几毫秒,然后再次暂停并抛出UNAUTHORIZED_OVERLAY。请参见以下代码段:

@Override
protected void onDestroy() {
    youTubePlayer = null;

    super.onDestroy();
}
    
private final class MyPlayerStateChangeListener implements PlayerStateChangeListener {

    @Override
    public void onLoading() {
    }

    @Override
    public void onLoaded(String videoId) {
    }

    @Override
    public void onAdStarted() {
    }

    @Override
    public void onVideoStarted() {
    }

    @Override
    public void onVideoEnded() {
    }

    @Override
    public void onError(ErrorReason reason) {
        if(reason == ErrorReason.UNAUTHORIZED_OVERLAY)
        {
            //try again after a few mill secs
            delayedPlay();

        }
    }
}


private void delayedPlay()
{
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if(youTubePlayer != null)
            {
                youTubePlayer.play();
            }
        }
    }, 300);

}

所需的代码应为:

@Override
protected void onDestroy() {
    youTubePlayer = null;

    super.onDestroy();
}
    
private final class MyPlayerStateChangeListener implements PlayerStateChangeListener {

    @Override
    public void onLoading() {
    }

    @Override
    public void onLoaded(String videoId) {
    }

    @Override
    public void onAdStarted() {
    }

    @Override
    public void onVideoStarted() {
    }

    @Override
    public void onVideoEnded() {
    }

    @Override
    public void onError(ErrorReason reason) {
        if(reason == ErrorReason.UNAUTHORIZED_OVERLAY)
        {
            //try again after a few mill secs
            delayedPlay();

        }
    }

}


private void delayedPlay()
{
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            
            if(isActivityCovered())
            {
                delayedPlay();
            }
            else{
                if(youTubePlayer != null)
                {
                    youTubePlayer.play();
                }
            }
        }
    }, 300);

}

private boolean isActivityCovered()
{
    //Code to be implemented
}

我的活动扩展了 YouTubeBaseActivity 。请帮助实现 isActivityCovered 功能或提出您的想法。

0 个答案:

没有答案
相关问题