Android WebView中带download属性的链接点击无响应无法下载如何解决
Android WebView download属性链接适配方案
Android WebView默认未实现
download属性链接的处理逻辑,这类链接点击时会触发DownloadListener回调,未设置监听器时就会出现无响应的情况,按照以下步骤调整即可实现预期效果:
1. 为WebView设置DownloadListener监听器
这是核心配置,用于捕获带download属性的链接点击事件,执行下载逻辑,代码示例如下:
webView.setDownloadListener(new DownloadListener() { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) { // 解析获取文件名(download属性指定的文件名会从contentDisposition中自动提取) String fileName = URLUtil.guessFileName(url, contentDisposition, mimeType); // 调用系统下载管理器执行下载 DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); request.setMimeType(mimeType); request.addRequestHeader("User-Agent", userAgent); request.setTitle(fileName); // 下载中和下载完成后在通知栏展示 request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); // 设置存储路径为系统公共下载目录 request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); downloadManager.enqueue(request); } });
如果使用Kotlin开发,对应逻辑实现一致。
2. 适配高版本Android系统权限
- Android 10(API 29)及以上版本中,
WRITE_EXTERNAL_STORAGE权限已失效,需要在AndroidManifest.xml的application节点添加以下属性:android:requestLegacyExternalStorage="true" - 若目标适配版本为Android 13(API 33)及以上,还需要在
AndroidManifest.xml中新增通知权限声明:
同时在应用运行时动态申请该权限,否则下载完成的通知不会正常展示。<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
3. 普通链接预览兼容(可选)
如果后续出现pdf、doc等格式普通链接无法在WebView内直接预览的情况,可通过拼接预览服务前缀的方式加载,你当前普通链接预览正常可跳过该步骤。
内容的提问来源于stack exchange,提问作者Mr.Gelb
相关产品推荐
相关产品推荐

