是在webview已经获取文件之后调用setDownloadListener onDownloadStart吗?

2023-12-03

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

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

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

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

的文档设置下载监听器 say:

注册无法处理内容时使用的接口 渲染引擎,应该下载。这会 替换当前处理程序。

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

并且,一些后续问题:

  1. 这是常见情况吗?大多数从 Web 视图中下载文件的应用程序真的会下载文件两次吗? (这看起来很昂贵,但我认为这可能会发生)
  2. 有没有办法重用第一次请求中已下载的内容而不是再次请求?
  3. 为什么 WebView 在第一个请求上不使用 Http HEAD 方法而不是 GET? (我想这将使每个超链接成为一个两步过程,而且这也会很昂贵)
  4. 有什么办法可以阻止额外的下载吗?也许使用 shouldOverrideUrlLoading() 来拦截请求?

初学者最好能得到你的答案3.问题:

我认为 WebView 对所有资源都使用 GET 方法。并且只有在获取此请求的第一个 http 标头之后,WebView 才会检查是否有标头告诉“下载”

(例如像这样的标题Content-Disposition: Attachment; filename=example.html)

如果不存在指向下载的标头,WebView 将在其视图中显示负载和内容。

onDownload如果存在下载标头(即使其值设置为“内联”),则调用。

回答问题2:

我认为在这种情况下,网络视图不会加载内容的内容。 目前我不知道如何重用现有请求。

回答问题4

如果你覆盖shouldInterceptRequest

就像这个例子一样:https://stackoverflow.com/a/29811280/2377961你可以改变这种行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是在webview已经获取文件之后调用setDownloadListener onDownloadStart吗? 的相关文章

  • 使用匕首柄作为依赖注入来处理多个改造客户端?

    我想在我的 android 应用程序中使用两个不同的后端 具有不同的响应格式 我使用 hilt 作为依赖注入 并对网络调用进行改造 这非常适合工作 因为我已经添加了第二个服务器网络文件和应用程序模块 所以它给了我错误 该错误列在最后 我需要
  • 您的应用中的 Google Analytics SDK

    我按照这里的说明进行操作 https developers google com analytics devguides collection android v3 https developers google com analytics
  • 即使我单击“运行”,Eclipse 也会运行调试模式

    Eclipse 总是在调试模式下启动我的应用程序 即使我单击常规的 运行 按钮 有任何想法吗 我发现我必须重新启动 Xoom 才能使其再次正常工作
  • 配置项目 ':react-native-gesture-handler' 时出现问题

    大家好 我已经尝试了很长时间来解决这个问题 但不幸的是我还没有弄清楚如何解决 希望你们能帮助我 所以我有一个反应本机项目和我的朋友 以及我的一位朋友添加 React native gesture handler 包供我们使用 他对这个包没有
  • 在 Android 中使用 awt

    我有一个绘制图表的 Java Swing 应用程序 它使用 Graphics2D 调用和 awt 对象 例如 Rectangle 等 在某些时候我可能想将其移植到 Android 上 我知道我无法在 Android 上使用 Graphics
  • 如何使用具有三种布局的视图翻转器?

    我目前正在使用ViewFlipper我的主要活动有两种不同的布局 我想使用第三种布局 但我只能找到showNext and showPrevious 命令 有人可以告诉我如何使用来实现第三种布局吗ViewFlipper 为您制作了一个示例
  • 将清除会话标志设置为 FALSE 后,我丢失了已发布的值

    有人有一个合乎逻辑的解释为什么尽管我有clear session flage false当我未连接到经纪商时 我没有收到我订阅的更新的已发布消息 将 aore提到的标志设置为 false 后 我运行了我的应用程序 并且我不断向主题发布一些值
  • 在活动启动期间优雅地处理屏幕方向变化

    我正在尝试找到一种方法来正确处理设置活动 其中活动的方向是根据启动它的意图中的数据确定的 这是一款用户可以选择关卡的游戏 其中一些是纵向的 一些是横向的 我面临的问题是setRequestedOrientation ActivityInfo
  • Android 音乐播放器应用程序:如何为服务中运行的媒体播放器设置完整的侦听器?

    我正在编写一个音乐播放器应用程序 我在服务中有 MediaPlayer 对象 问题是 我不知道如何从服务更新用户界面 例如 我想更新当前歌曲的剩余时间 但是 因为 MediaPlayer 正在服务 我无法设置 MediaPlayer 对象的
  • Android Studio APK META-INF/BCKEY.DSA 中复制的重复文件

    我的代码构建得很好 但是当我尝试在调试中运行它时 出现以下错误 Error Execution failed for task app transformResourcesWithMergeJavaResForDebug com andro
  • 如何从画布中删除路径区域(Android)

    我需要裁剪角落ImageView 不要将它们弄圆 而是擦除每个角上的三角形 似乎唯一的方法就是覆盖onDraw方法并使用从画布上删除这些区域Path 问题是我没有纯色背景 所以我需要擦除这些区域 但不要用某种颜色填充它们 我为此使用以下代码
  • 何时调用 glMatrixMode()

    我所关注的大多数 Android OpenGL ES 教程都有其 onSurfaceChanged 函数 如下所示 public void onSurfaceChanged GL10 gl int width int height gl g
  • 如何在Room的数据库迁移中正确添加索引?

    我在迁移 Room 数据库时遇到问题 在更新的数据库中 我必须将一个字段从整数更改为双精度值 我读到它并不像听起来那么容易 为了做到这一点 我必须使用这个更改后的属性创建新的临时表 复制前一个表中的所有值 删除旧的值 最后重命名临时表 我的
  • 使用 twitter API 1.1 在 Android 应用程序中显示 twitter feed

    基本上我想展示这个提要 https en twitter com epl live https en twitter com epl live在我的应用程序中 由于 twitter 更改了其 api 1 1 每个调用都必须经过授权 我发现的
  • DialogFragment 关闭事件

    我需要处理 DialogFragment 的结尾 在调用 dismiss 之后 例如 我会在关闭后 包含 片段的活动内显示一个 toast 我该如何处理该事件 覆盖onDismiss 在你的DialogFragment中 或者使用setOn
  • Grade Plugin 3-alpha1 输出文件导致错误

    我正在尝试将项目更新到 Android Studio 3 build gradle 文件中不再接受以下代码片段 applicationVariants all variant gt variant outputs each out gt d
  • 活动中列表视图中的粘滞行

    我的列表视图中只有一行应该是粘性的 而不是粘性标题中带有字母的部分或部分 我真的很感激任何关于列表视图在活动中粘性一行而不是片段的帮助 我该怎么做 我真的很感谢任何帮助 提前致谢 使用如下代码 class MyAsyncTask exten
  • Android:选择 EditField 上焦点上的所有文本

    我试图让 Android 在获得焦点时选择 EditText 字段中的所有文本 我在布局中使用此属性 在两个字段上 android selectAllOnFocus true 我不确定这是否相关 但为了将光标移动到第一个可编辑字段 前面 还
  • Android:我的应用程序太大并给出“无法执行 dex:方法 ID 不在 [0, 0xffff]: 65536”?

    我正在尝试将我的应用程序与 Box Dropbox 和 Google Drive 集成 所有这 3 项服务都需要许多第 3 方 jar 此外 我的应用程序已经需要一些第三方 jar 现在 当我尝试从 Eclipse 运行我的应用程序时 出现
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下

随机推荐

  • Java 砖块碰撞 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我一直在开发一款 Breakout 游戏 除了砖块碰撞之外 几乎所有的事情都完成了 球在墙壁和桨上弹跳得很好 但当它碰到砖块时 它会直接穿过它们 我很确定问题出在主类的 chec
  • RestSharp 忽略响应字符集编码

    我正在使用 RestSharp 版本 105 1 0 NET 4 5 1 对我们自己的 API 进行 REST 调用 此 API 发送带有以下特别感兴趣的标头的响应 Content Type application json Charset
  • 在 Java 中截取屏幕截图(机器人,代码可以工作,但不能与外部全屏应用程序一起使用)

    我使用以下代码来截取屏幕截图 Robot robot new Robot BufferedImage image robot createScreenCapture screenRectangle ImageIO write image p
  • 区分联合表中的行

    我正在使用此 sql 查询从两个不同的表中选择没有匹配列的数据 select from SELECT s shout id s user id s time FROM shouts s union all select v post id
  • Visual Studio 相当于 c++11(或更低版本)中的 gcc __attribute__((unused))?

    我正在尝试编写一个宏 以便在用户需要时使用抑制未使用的变量警告 例如 在派生类中 当您尚未实现整个类时 我知道我可以删除变量名称 但为了明确起见 我更喜欢宏 到目前为止我有这个 ifdef WIN32 define UNUSED x x e
  • 在 VS2013 中使用 VS2008 (v90) C++ 工具集?

    微软文档解释如何在 VS2013 中使用 2010 或 2012 工具集 有谁知道 2008 工具集是否也有向后支持 我正在从 2008 年升级到 2013 年的几个项目 但我的团队领导希望我们最初升级项目文件 但仍以与 2008 年相同的
  • Git svn 变基失败

    I use git svn跟踪 SVN 存储库 当我尝试做一个git svn rebase我收到此错误 Incomplete data Delta source ended unexpectedly 这是一个大型仓库 具有悠久的历史 仅仅获
  • MVC4 Windows 身份验证重定向到帐户/登录

    我正在设置Windows 身份验证在 MVC 4 应用程序中使用视觉工作室2013并使用IIS Express 开发服务器 但是 我被重定向到 Account Login 就好像我正在使用表单身份验证一样 我的 bin 文件夹 或任何地方
  • 在 RECEIVE_BOOT_COMPLETED 上通过广播接收器访问数据库

    当手机完成启动后 我想根据数据库中的小时 分钟 信息自动重新注册一些警报 我尝试使用广播接收器来执行此操作 但它不起作用 当尝试在启动时访问数据库 DB 帮助程序类时 它会崩溃 通过应用程序访问数据库帮助程序类时 它工作正常 这是可能的还是
  • boost::spirit::karma 输出引号内的字符串

    我正在尝试使用 boost spirit karma 转义引号中的字符串 如果它只是一个字符串 则效果很好 但是 对于 std vector 中 boost variant 中的字符串 则不然 只是打印字符串确实有效 但是我不太明白为什么
  • 字符串有隐藏字符,无法验证,

    大约2小时前我问了一个问题 不需要看问题 只是一个参考 使用node js存储图像出现错误 给出的解决方案实际上与我的代码相同 我试图找到我的代码和他的代码之间的差异 看看他做了什么修改才能使其工作 但没有任何修改 所以我想到尝试一下在线I
  • 既然“invoke”已被软弃用,那么替代方案是什么?

    rlang invoke 现已软弃用 purrr invoke 退休了 如今 以编程方式调用带有参数列表的函数的简洁方法是什么 tldr Use exec代替invoke use map2 plus exec代替invoke map 示例i
  • UIImagePickerController 如何隐藏翻转相机按钮?

    有没有办法隐藏 UIImagePickerController 内的翻转相机按钮 谢谢阅读 我最终使用 UIImagePickerController 的自定义子类来解决此 和其他 问题 import SMImagePickerContro
  • 将包含十六进制值的字节数组转换为十进制值

    我正在 c 中进行应用程序 这里我想将包含十六进制值的字节数组转换为十进制值 假设我有一个字节数组为 array 0 0X4E array 1 0X5E array 2 0X75 array 3 0X49 在这里 我想将该十六进制数组转换为
  • random_state在train_test_split和分类器中的作用

    基于这个答案 Scikit learn 中的随机状态 伪随机数 如果我使用相同的整数 比如 42 random state 然后每次进行训练 测试分割时 它应该给出相同的分割 即每次运行期间训练中的数据实例相同 测试时的数据实例相同 But
  • XSLT根据父子元素的值删除子元素

    我正在尝试使用这里使用的一些相同的逻辑https stackoverflow com a 10629806 662877 到不同的 XML 但没有得到预期的输出 如果 TERR KHM6 则删除 剥离这两个元素创建付款项目 and 创建支付
  • 一java内存刷新易失性:一个好的程序设计?

    这是与此相关的问题 java 在一个变量上使用 易失性 VS 每个变量 我有一个或多个不同的对象 我想改变其中的某些状态 然后我想让该状态对其他线程可见 出于性能原因 我不想使该对象中的每个成员变量都是易失性的 有时我想在单线程应用程序中使
  • Spring REST 服务:从请求中检索 JSON

    我正在 Spring 3 1 上构建 REST 服务 我正在使用 EnableWebMVC 注释 由于我的服务仅接受 JSON 请求 因此我还想将传入请求转储到 MongoDB 集合中以进行日志记录 以及稍后的数据转换 我想访问原始 JSO
  • 将 Cassandra OrderedMapSerializedKey 转换为 Python 字典

    我在 Cassandra 中有一列由列表映射组成 当使用 Python 驱动程序查询时 它返回一个 OrderedMapSerializedKey 结构 该结构是列表的映射 我想将整个查询放入 pandas 中 要从 OrderedMapS
  • 是在webview已经获取文件之后调用setDownloadListener onDownloadStart吗?

    WebView 是否会执行 Http Get 并下载完整文件 然后调用我的 onDownloadStart 方法 并且我的代码再次下载文件 在 Android 应用程序中使用的 WebView 中 我们需要处理 PDF 文件的下载 我看到的