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

问题描述

在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 功能或提出您的想法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)