Android Webview默认无法自行处理Deeplink链接,需要shouldOverrideUrlLoading处理URL过滤出链接后显示调用跳转
具体代码实现如下:
/**
* 系统可以处理的url正则
*/
private static final Pattern ACCEPTED_URI_SCHEME = Pattern.compile("(?i)"
+ // switch on case insensitive matching
'('
+ // begin group for scheme
"(?:http|https|ftp|file)://" + "|(?:inline|data|about|javascript):" + "|(?:.*:.*@)"
+ ')' + "(.*)");
/**
* 该url是否属于浏览器能处理的内部协议
*/
private boolean isAcceptedScheme(String url) {
//正则中忽略了大小写,保险起见,还是转成小写
String lowerCaseUrl = url.toLowerCase();
Matcher acceptedUrlSchemeMatcher = ACCEPTED_URI_SCHEME.matcher(lowerCaseUrl);
if (acceptedUrlSchemeMatcher.matches()) {
return true;
}
return false;
}
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(!isAcceptedScheme(url)){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
}
}