WebViewClient

本文详细解析了WebViewClient在Android开发中的作用及其实现方法。通过重写WebViewClient的方法,如shouldOverrideUrlLoading、onPageStarted、onPageFinished等,开发者可以实现网页加载控制、错误处理、资源加载监听等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebViewClient顾名思义,这是webView的客户端,它里面有客户端回调监听,常用的监听方法有失败,验证,加载url控制等,如果只是需要在本webView显示内容的话只需要设置不需要重写方法

 @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //view 加载的布局,url加载的路径,如果想用自己的webView加载改路径可以重写该方法
                if (url.endsWith(".apk") || (!url.startsWith("http") && !url.startsWith("https") && !url.startsWith("ftp"))) {//判断是否是下载和不是http https ftp协议,使用其他应用打开
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    PackageManager packageManager = context.getPackageManager();
                    List<ResolveInfo> activities = packageManager.queryIntentActivities(
                            intent, 0);//获取能处理次任务的应用列表
                    if (activities.size() > 0) {//有可以处理的应用就启动
                        context.startActivity(intent);
                        return true;
                    } else {//没有可以处理的应用
                        if (url.contains("alipays")) {//支付宝相关
                        } else if (url.contains("weixin")) {//微信相关
                        }
                        return true;
                    }
                }
                return super.shouldOverrideUrlLoading(view, url);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return shouldOverrideUrlLoading(view, request.getUrl().toString());
            }

            @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 onLoadResource(WebView view, String url) {//资源加载回调
                super.onLoadResource(view, url);
            }

            @Override
            public void onPageCommitVisible(WebView view, String url) {//加载HTTP响应的body内容回调
                super.onPageCommitVisible(view, url);
            }

            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {//失败回调
                super.onReceivedError(view, errorCode, description, failingUrl);
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {//失败回调
                super.onReceivedError(view, request, error);
            }

            @Override
            public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {//HTTP认证错误回调
                super.onReceivedHttpError(view, request, errorResponse);
            }

            @Override
            public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {//更新浏览历史记录,获取更新的url地址回调
                super.doUpdateVisitedHistory(view, url, isReload);
            }

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {//SSL认证错误回调
                  handler.proceed();    //表示等待证书响应
                  handler.cancel();      //表示挂起连接,为默认方式
                  handler.handleMessage(null);    //可做其他处理
//                super.onReceivedSslError(view, handler, error);
            }


            @Override
            public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {//给予主机应用程序异步处理按键事件的机会
                return super.shouldOverrideKeyEvent(view, event);
            }


            @Override
            public void onScaleChanged(WebView view, float oldScale, float newScale) {//页面大小改变回调
                super.onScaleChanged(view, oldScale, newScale);
            }

            @Override
            public void onReceivedLoginRequest(WebView view, String realm, @Nullable String account, String args) {//请求自动登录回调
                super.onReceivedLoginRequest(view, realm, account, args);
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值