网上有人说去掉webView.setWebViewClient方法保留webView.setWebChromeClient(new WebChromeClient())就可以,但是又会出现一个问题,当该APP不存在时,又会报出该错误。
解决办法是重写webView.setWebViewClient的shouldOverrideUrlLoading方法:
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (request.getUrl().toString().startsWith("http:") || request.getUrl().toString().startsWith("https:")) {
return false;
}
try {
Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
startActivity(intent);
} catch (Exception e) {
Log.e(TAG, "ERROR1 : " + e.toString());
}
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("http:") || url.startsWith("https:")) {
return false;
}
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
} catch (Exception e) {
Log.e(TAG, "ERROR2 : " + e.toString());
}
return true;
}
});
这样就可以了,因为如果不处理,webview默认走的是http或https协议通道。