WebView出现net::ERR_UNKNOWN_URL_SCHEME错误

    protected void initView(Bundle savedInstanceState) {
        if (getIntent() != null) {
            String keyValue = getIntent().getStringExtra(UrlUtils.TYPE_KEY);
            if (!TextUtils.isEmpty(keyValue) && keyValue.equals(UrlUtils.TYPE_VALUE)) {
                iv_more.setVisibility(View.VISIBLE);
                view_line.setVisibility(View.VISIBLE);
            }
        }
        if (App.forumEntityList != null && App.forumEntityList.size() > 0 && App.forumEntityList.get(0) != null) {
            if (!TextUtils.isEmpty(App.forumEntityList.get(0).getLink_url())) {
                url = App.forumEntityList.get(0).getLink_url();
            }
        }
        url="http://www.baidu.com/";
        WebSettings webSettings = webview.getSettings();
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
        webSettings.setJavaScriptEnabled(true);

//支持插件
        //webSettings.setPluginsEnabled(true);

//设置自适应屏幕,两者合用
        webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小

//缩放操作
        webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件

//其他细节操作
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
        webSettings.setAppCacheEnabled(true);
        //开启 DOM 存储功能
        webSettings.setDomStorageEnabled(true);
        webSettings.setAllowFileAccess(true); //设置可以访问文件
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            CookieManager.getInstance().setAcceptThirdPartyCookies(webview, true);   //如果大于21开启cookie管理
        }
        //不使用缓存:
        // webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webview.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
            }
        });
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
                    String url = request.getUrl().toString();
                    openUrl(url);
                    return true;
                }
                return super.shouldOverrideUrlLoading(view, request);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                openUrl(url);
                return true;
//                if( url.startsWith("http:") || url.startsWith("https:") ) {
//                    ForumActivity.this.url = url;
//                    return false;//返回false 意思是不拦截,让webview自己处理  
//                }else {
//                    // Otherwise allow the OS to handle things like tel, mailto, etc.
//                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
//                    startActivity( intent );
//                    return true;
//                }
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);

            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }

            @Override
            public void onScaleChanged(WebView view, float oldScale, float newScale) {
                super.onScaleChanged(view, oldScale, newScale);
            }
        });
        webview.loadUrl(url);
        ivPreVBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                scrollToFinishActivity();
            }
        });
    }

    private void openUrl(final String url) {
        App.applicationHandler.post(new Runnable() {
            @Override
            public void run() {
                try {
//                    "openmomeike://"
                    if (!url.startsWith("http://") || !url.startsWith("https://")) {
                        Uri uri = Uri.parse(url);
                        ForumActivity.this.startActivity(new Intent(Intent.ACTION_VIEW, uri));
                    } else {
                        openWeb(url);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    if (url.startsWith("openmomeike://")) {
                    } else {
                    }//openWeb(url);
                }
            }
        });
    }
    private void openWeb(String url) {
        Log.i(TAG, "openWeb: url="+url);
    }

houldOverrideUrlLoading(WebView view, String url)的返回值决定了webview是否自动处理该url,也就是是否加载。当返回true时,由程序处理,当返回false时,webview会自己处理,也就是相当于自动执行了loadUrl方法
https://blog.csdn.net/barryyanggoing/article/details/51848907
https://blog.csdn.net/u013131445/article/details/70632852

你可能感兴趣的:(android)