網上有人說去掉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協議通道。