问题描述
我在我的应用程序中显示了一个 WebView
。 WebView
包含一个 "Return"
按钮。如果发生这种情况,我想监听此按钮点击并完成 activity A
并打开 activity B
。
为了实现这一点,我想出了两个解决方案:
A) 添加 WebViewClient
侦听器并在 shouldOverrideUrlLoading
回调上执行我的逻辑。
B) 使用 Deep Links
这两种解决方案中哪个更正确以及为什么?我认为当您想从 其他移动应用 到 X 目的地 而不是其他方式时,通常会使用深层链接。我在这里弄错了什么吗?
解决方法
据我所知,您必须在 deep
中使用 link
shouldOverrideUrlLoading
,shouldOverrideUrlLoading
用于:
如果没有提供 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 的应用。
-允许用户从对话框中选择应用。