android webview 下载的文件在哪里,android – 在webview已经获取文件后调用setDownloadListener onDownloadStart吗?...

WebView是否会执行Http获取并下载完整文件然后调用我的onDownloadStart()方法并且我的代码再次下载文件?

在Android应用程序中使用的WebView中,我们需要处理下载PDF文件.我看到了我认为有意义的行为,但看起来很奇怪,所以我希望有人能为我验证.

设置WebView后,我们调用setDownloadListener()并创建一个新的DownloadListener来处理onDownloadStart()方法调用.在onDownloadStart()方法中,我们使用HttpURLConnection从我们的Web服务器获取资源.

在网络跟踪中,我看到为同一资源执行了两个Http Get请求.我假设这是因为webview首先对资源进行了Get,然后webview执行自己的处理并确定它无法呈现资源.然后webview调用onDownloadStart()方法,我们第二次检索资源.

Register the interface to be used when content can not be handled by

the rendering engine, and should be downloaded instead. This will

replace the current handler.

webview不知道它是否可以呈现资源,直到它从服务器获得响应并且可以读取返回的内容类型.因此,它必须首先执行GET或HEAD来读取响应头.因此,双重下载行为似乎是有道理的.

并且,一些跟进问题:

>这是一种常见情况吗?大多数从webview中下载文件的应用程序是否真的下载了两次文件? (这看起来很贵,但我认为可能会发生)

>有没有办法重新使用第一个请求中已下载的内容而不是再次请求它?

>为什么WebView在第一个请求而不是GET上使用Http HEAD方法? (我想这会使每个超链接都是一个两步过程,这也会很昂贵)

>有没有办法阻止额外的下载?也许使用shouldOverrideUrlLoading()来拦截请求?

解决方法:

当你开始回答你的3.问题时,它会更好:

我认为WebView对所有Ressources使用GET方法.只有在获得此请求的第一个http标头后,WebView才会检查是否有标题告诉“执行下载”

(例如Content-Disposition:Attachment; filename = example.html等标题)

如果没有指向下载的标头,WebView将在其视图中显示加载和内容.

如果有下载标题,则调用onDownload(即使其值设置为“inline”).

对问题2的回答:

我认为在这种情况下,webview不会加载内容的内容.

目前我不知道重用现有请求的方法.

回答问题4

如果你覆盖了shouldInterceptRequest

标签:android,android-webview

来源: https://codeday.me/bug/20191006/1859255.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值