admin管理员组

文章数量:1580447

最近浏览器一直报出这样几个问题:

1.信息中心中访问百度地图网页版,无法定位到当前位置
2.浏览器全屏播放卡死,多次点击闪退

我用的webview是腾讯的x5 webview,一直以为很稳定,其实这个内核是需要下载的,可以设置在wifi或者手机流量上下载,然而在测试环境下,下载速度感人,可能下载失败,就需要重新下载。而测试刚刷机联网进去全局搜索,然后二级页面跳浏览器,此时内核大概率是没有下载成功替换的,而且,就算你是直接导入静态内核(操作有些麻烦,需要从微信下载内核,然后导出到电脑,然后把so库和\assets\webkit下的文件统一改成so以及lib前缀,然后导入As,很麻烦,而且体积很大)也需要耗费很多时间去读取so文件,此时就需要我们对webview进行手动支持了。
下面是我重写webview WebChromeClient的两个方法:


                @Override
                public void onShowCustomView(View view, IX5WebChromeClient.CustomViewCallback customViewCallback) {
                    CoolLogger.d(TAG, "onShowCustomView ");
                    super.onShowCustomView(view, customViewCallback);
                    showCustomView(view);

                }

                @Override
                public void onHideCustomView() {
                    CoolLogger.d(TAG, "onHideCustomView ");
                    super.onHideCustomView();
                    hideCustomView();
                }
            });
            ...
            
    
    private void hideCustomView() {
        if (myView != null) {
            ViewGroup parent = (ViewGroup) myView.getParent();
            parent.removeView(myView);
            parent.addView(webView);
            myView = null;
            if (null != webviewActivity) {
                webviewActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                // 取消全屏
                final WindowManager.LayoutParams attrs = webviewActivity.getWindow()
                        .getAttributes();
                attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
                webviewActivity.getWindow().setAttributes(attrs);
                webviewActivity.getWindow().clearFlags(
                        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
                if (null != webviewActivity) {
                    webviewActivity.showStatusbarAndNavigation();
                }
            }
        }
    }

    private void showCustomView(View view) {
        ViewGroup parent = (ViewGroup) webView.getParent();
        parent.removeView(webView);

        // 设置背景色为黑色
        view.setBackgroundColor(webviewActivity.getResources().getColor(R.color.black));
        parent.addView(view);
        myView = view;

        // 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏
        if (null != webviewActivity) {
//            webviewActivity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
//                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            //设置横屏
            webviewActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            //设置全屏
            webviewActivity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            if (null != webviewActivity) {
                webviewActivity.hideStatusbarAndNavigation();
            }

        }
        if (null != webviewActivity) {
            webviewActivity.hideStatusbarAndNavigation();
        }
    }

我这是fragment,外部的Activity还有一些界面需要在全屏的时候进行隐藏,但注意判空。当你重启进程后,这个内核大概率也是下载完了,就能使用x5提供的全屏方案进行处理,而不会调用你写的

本文标签: 首次腾讯全屏内核未完成