需求
在 APP 首页轮播图点击跳转到 WebView ,在 webView 中点击链接下载新版 APP
问题
如果直接传递 APP 在应用宝上的网址,在 WebView 中加载完之后点击网页上的按钮没有反应,不跳浏览器也不提示下载应用宝或者跳转应用宝。原因是:为 WebView 重新设置了 WebViewClient 之后会导致 WebView 自身支持网页唤起的功能失效。
针对下载需要设置一个 setDownloadListener 来监听获取到的链接是否是下载链接!但测试发现监听只能获取到 APP 的下载动作,无法监听到应用宝的监听动作,需要后续再查找原因吧。
由于在应用中需要设置 WebView 加载页面的标题,所以必须设置 WebViewClient。为避免 WebView 自身唤起浏览器的功能失效,改用 WebChromeClient 实现头部标题设置,不再设置 WebViewClient。
方法
方法1
捕获链接跳转应用市场
mWebView.setWebViewClient(new WebViewClient() {//监听webview的链接点击
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.e("Url", "Url ===" + url);
if ("https://a.app.qq.com/o/simple.jsp?pkgname=yourpkgname".equals(url)){//此处记得替换对应包名
try {
Uri uri = Uri.parse("market://details?id=yourpkgname");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch (Exception e) {
ToastUtils.showToast("检测不到应用市场");
e.printStackTrace();
}
}else {
view.loadUrl(url);
}
return true;
}
}
方法2
设置下载监听,跳转浏览器下载
mWebView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse(url);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(uri);
startActivity(intent);
}
});
方法3
不设置WebViewClient,使用webview自带的功能唤起浏览器,将下载工作交给浏览器完成。
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
titleTv.setText(view.getTitle());
}
});
至此,问题算是解决啦。这里先记录下解决的方法,感觉关于webview的认识有了更进一步的了解,不过还有一些需要补充了解的知识。