You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:24:02