Android网络(一)Android的简易浏览器--Webview组件

引言

在 Android 开发中,网络通信已经成为不可或缺的一部分。无论是从服务器获取数据、同步用户信息,还是实现实时聊天功能,网络通信都是核心环节,而这个专栏总结成一句话,就是实现手机端使用 HTTP 和服务器进行网络交互。作为开发者,我们需要选择合适的工具和方法来确保网络操作的高效性和可靠性,从而让应用能够顺畅地与外部世界进行互动。掌握这些网络通信的技巧和最佳实践,不仅可以提升应用的性能,还能带来更好的用户体验,使应用在各种网络环境下都能稳定运行。

Webview的应用场景

现在有一个开发需求,要求我们在应用程序里内嵌一些网页,并且还要求我们不能打开系统浏览器,我们应该如何实现呢?

如果工作很闲,也许可以考虑自己编写一个浏览器

或者考虑使用Android提供的Webview控件,Webview相当于一个迷你浏览器,不仅能渲染 HTML 页面,还能执行 JavaScript,甚至能与原生代码进行交互。这样一来,开发者可以方便地将网页内容直接嵌入到应用中,避免让用户在应用和浏览器之间来回切换。

webview的基础用法

Webview的用法也非常简单,首先新建一个项目,切换到project视角,在布局文件中添加 WebView 组件

<LinearLayout
xmlns...
>
 
<WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

然后修改MainActivity,创建一个 WebView 实例,启用 JavaScript 支持,设置 WebViewClient 来处理页面加载,最后加载指定的 URL

class WebViewActivity : AppCompatActivity() {
    private lateinit var webView: WebView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_web_view)

        webView = findViewById(R.id.webView)
        webView.settings.javaScriptEnabled = true
        webView.webViewClient = WebViewClient()
        webView.loadUrl("https://blog.csdn.net/weixin_58719774")
    }
}

当 WebView 被创建时,它会初始化一个渲染引擎,然后在调用 loadUrl() 方法时,WebView 会发起一个网络请求获取网页内容。接收到 HTML、CSS 和 JavaScript 后,渲染引擎会解析这些内容,构建 DOM 树和渲染树。最终渲染好的网页内容被显示在 WebView 中,使得我们能够在应用内直接展示复杂的网页内容。

 到这里就已经通过Webview组件基本实现网页内置的需求了,但在运行之前,我们要确保自己已经在AndroidManifest.xml中添加了访问网络的权限声明,如下所示

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        ... >
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <!-- 添加网络权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

 接下来运行程序

可以看到程序已经完成了内置网页的需求。

扩展

除了基本的网页加载,WebView还有一些高级用法,比如通过WebView的 addJavascriptInterface 方法,将 Android 对象注入到 JavaScript 中,从而实现与网页脚本的双向交互,

webView.addJavascriptInterface(MyJavaScriptInterface(), "AndroidInterface")
public class MyJavaScriptInterface {
    @JavascriptInterface
    public void showToast(String message) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }
}

或者通过继承 WebViewclient,我们可以拦截和处理页面加载、错误和其他事件,并且控制页面加载的行为,比如处理特定的 URL 跳转、重定向、以及错误处理,

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
        // 处理 URL 加载
        return false
    }

    override fun onPageFinished(view: WebView?, url: String?) {
        // 页面加载完成
    }
}

通过自定义 WebChromeClient我们还能调整JavaScript 的对话框、网站视图、图标和进度条,从而实现处理网页中的进度条、全屏视频播放等功能。

这些用法可以帮助我们实现更复杂的功能,不仅能够展示基本的网页,还能处理复杂的网页交互和功能需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值