首页 > 解决方案 > 使用 webview 打开地图 url 的问题

问题描述

我正在使用 WebView 打开地图 url(我通过 Google 地图与对话框共享)。

val webView = findViewById<WebView>(R.id.webview)
val webSettings: WebSettings = webView.settings
webSettings.javaScriptEnabled = true
webView.webViewClient = WebViewClient()
val url = "https://maps.app.goo.gl/ei5DupR88SYBF8Am8"
webView.loadUrl(url)

但是 url 没有像任何其他 url 一样打开。

看起来,“https://”被替换为“intent://”,WebView 无法打开无效的 url。

知道为什么会发生这种情况以及如何避免它吗?

在此处输入图像描述

标签: androidandroid-webview

解决方案


我通过覆盖“shouldOverrideUrlLoading”解决了这个问题:

companion object {
    const val FALLBACK_URL = "browser_fallback_url="
}


webView.webViewClient = object: WebViewClient() {
    override fun shouldOverrideUrlLoading(webView: WebView?, request: WebResourceRequest):
            Boolean {

        val url = request.url
        val urlString = url.toString()
        val fallbackUrl = urlString.subSequence(
                urlString.indexOf(FALLBACK_URL) + FALLBACK_URL.length,
                urlString.length)
                .toString()
        webView.loadUrl(URLDecoder.decode(fallbackUrl, "UTF-8"))
        return true
    }
}

推荐阅读