WebView 里点“下载报表”链接没有任何反应,logcat 里只有一行 DownloadManager 未启动,页面也不报错,长按链接另存为却可以。日志里能对上时间点,这种反而好排。

WebView 默认不处理下载链接,没有设置 DownloadListener,点击被当成普通导航丢弃。文件是 blob 或需要 Cookie 时还要额外处理。这一点先确认清楚,后面就不用反复试。

webView.setDownloadListener((url, ua, cd, mime, len) -> {
  DownloadManager.Request r = new DownloadManager.Request(Uri.parse(url));
  r.addRequestHeader('Cookie', cookie);
  dm.enqueue(r);
});

「WebView 下载」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

处理上按这个顺序:设置 DownloadListener 接管下载 URL;用系统 DownloadManager 入队并带上 Cookie 和 UA;blob 链接改用 JS 桥接取二进制;点三种格式的下载链接各测一次。

结果对不对很好判断,点击下载后通知栏出现下载任务,文件能保存到 Downloads 并正常打开。

作者 9823189