Android网络功能开发(1)——WebView控件使用

WebView控件用来在应用中显示网页,就好比是在应用中嵌入了一个浏览器窗口。有了这个浏览器窗口,还可以实现与HTML5混合式开发,从而使应用具有跨平台、便于更新等优点。

WebView的用法和ImageView等控件的用法基本一样,使用时可以分两个步骤。第一步先把WebView添加到界面中,然后第二步再通过调用某个方法载入网页。下面是一个简单的例子。

这个界面就像一个迷你浏览器,中间显示网页的部分就是一个WebView控件。为了输入网址,在上部又加了一个文本框和按钮。这三个控件通过布局管理器组织起来,这样就把WebView加到了界面中。在文本框中输入一个URL网址,然后点击GO按钮,就会执行载入网页的代码: 

String url = etUrl.getText().toString();
view.loadUrl(url);

载入网页用的是WebView的loadURL方法,参数就是文本框中输入的字符串。代码中用到了两个对象,etUrl就是文本框对象,view就是WebView对象。

这里需要注意从Android9.0(API28)开始,默认情况下禁用http明文通信,也就是说以“http:”开头的url是无法打开的,会报错:net::ERR_CLEARTEXT_NOT_PERMITTED。

使用WebView控件时还有两点需要注意:

  • 一是要设置允许JavaScript,因为现在大部分网页都使用了JavaScript,不允许JavaScript的话显示不完全。
  • 二是要设置WebView控件的WebViewClient属性,才能将网页载入锁定在此控件中。不设置的话载入网页时会另外打开浏览器应用,而不会将网页载入到WebView中。同时,要覆盖WebViewClient的shouldOverrideUrlLoading()方法对WebView不支持的协议进行拦截,否则会报错:net::ERR_UNKNOWN_URL_SCHEME。WebView只支持http和https协议,所以只能加载http和https开头的url,对于一些网站的重定向到自定义协议的链接,是识别不了的。

这两个设置一般在Activity的onCreate方法中,当创建完WebView对象后进行,具体的代码如下:

view.getSettings().setJavaScriptEnabled(true);
view.setWebViewClient(new WebViewClient(){
         @Override
         public boolean shouldOverrideUrlLoading(WebView v, WebResourceRequest request) {
                //  在此方法中可以选择是否对url进行拦截,返回true表示拦截,返回false表示不拦截
                //  WebView只能加载http和https开头的url
                //  加载其他自定义协议开头的url会报错:net::ERR_UNKNOWN_URL_SCHEME
                String url = request.getUrl().toString();
                if(url.startsWith("https:")) {
                    v.loadUrl(url); //  在WebView控件中加载url
                    return true;    //  在本方法中已经对url进行了处理,后续webview不需要再处理
                } else {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);  //  启动能处理的应用去加载url
                    return true;   //  无法识别的协议后续不处理
                }
        }
});

因为需要访问互联网,所以还要添加权限:

<uses-permission android:name="android.permission.INTERNET" />


经测试,这个例子在API31(Android12.0)上能够正确运行。但在API26(Android8.0)上加载某些页面时报错:java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/TracingController,具体原因还不清楚。如果哪位大佬知道原因,还请不吝赐教。

 完整代码下载:

​ ​Android网络功能开发-WebView控件使用的例子

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nanoage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值