使用了官方的云开发中的静态网站,实现了点击链接跳转到微信小程序的功能,在微信浏览器以及常见的浏览器(小米自带浏览器、chrome、百度)都可以跳转到小程序,但是用Android webview时却报错了,报 位于 weixin://dl/business/?t=xxxxxxxx 的网页无法加载,因为:net::ERR_UNKNOWN_URL_SCHEME,这是因为Android webview无法识别自定义的weixin协议(url以weixin:// 开头的),只能识别http和https协议,所以需要自己扩展webview,处理这些自定义的协议。
需要给WebView设置WebViewClient,并重写WebViewClient中的shouldOverrideUrlLoading方法。kotlin代码如下:
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(wv: WebView, url: String?): Boolean {
if (url == null) return false
try {
if (url.startsWith("weixin://") //微信
|| url.startsWith("alipays://") //支付宝
|| url.startsWith("mailto://") //邮件
|| url.startsWith("tel://") //电话
|| url.startsWith("dianping://") //大众点评
//其他自定义的scheme
) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent)
return true
}
} catch (e: Exception) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
return true //没有安装该app时,返回true,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面
}
//处理http和https开头的url
wv.loadUrl(url)
return true
}
}