监听 WebView 中的按钮点击并在其背后实现某些逻辑

问题描述

我在我的应用程序中显示一个 WebViewWebView 包含一个 "Return" 按钮。如果发生这种情况,我想监听此按钮点击并完成 activity A 并打开 activity B

为了实现这一点,我想出了两个解决方案:

A) 添加 WebViewClient 侦听器并在 shouldOverrideUrlLoading 回调上执行我的逻辑。

B) 使用 Deep Links

这两种解决方案中哪个更正确以及为什么?我认为当您想从 其他移动应用X 目的地 而不是其他方式时,通常会使用深层链接。我在这里弄错了什么吗?

解决方法

据我所知,您必须在 deep 中使用 link shouldOverrideUrlLoadingshouldOverrideUrlLoading 用于:

如果没有提供 WebViewClient,默认情况下 WebView 会询问 活动管理器为 URL 选择合适的处理程序

另一方面,当我们打开一个 web 视图时,我们可以处理一些情况 shouldOverrideUrlLoading fun

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView,request: WebResourceRequest): Boolean {
        val url = request.url.toString()
            if (url.startsWith("intent://")) {
                try {
                    val intent = Intent.parseUri(url,Intent.URI_INTENT_SCHEME)
                    startActivity(intent)
                } catch (error: ActivityNotFoundException) {
                    return false
                }
                return true
            }
        return false
    }
}

那么在你的情况下:

我想听这个按钮点击并完成活动 A 和 如果发生这种情况,请打开活动 B。

您必须在 deep 中使用 link shouldOverrideUrlLoading

当点击的链接或程序化请求调用网络 URI 意图时, Android 系统按顺序尝试以下每个操作 顺序,直到请求成功:

-打开用户首选的可以处理 URI 的应用程序(如果已指定)。

-打开唯一可以处理 URI 的应用。

-允许用户从对话框中选择应用。