Вы должны переопределить shouldOverrideUrlLoading метод в WebClient.Я использую этот подход с комбинацией намерения и Google Docs в качестве резервной копии:
/* You might want to move this string definition somewhere else */
final String googleDocs = "https://docs.google.com/viewer?url=";
WebView webView = new WebView(getContext());
//webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
if (url.endsWith(".pdf")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "application/pdf");
/* Check if there is any application capable to process PDF file. */
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
/* If not, show PDF in Google Docs instead. */
view.loadUrl(googleDocs + url);
}
} else {
webView.loadUrl(url);
}
return true;
}
});
Возможно, вам придется изменить передачу контекста и доступ к методу startActivity
, но в остальном он должен работать как есть.
Также обратите внимание, что начиная с API 24, существует 2 shouldOverrideUrlLoading
методов, которые вы можете переопределить.Как указано здесь из @CommonsWare, можно переопределить устаревший метод.