9

如果我听,我会在浏览器已经请求它之后DownloadListener获得我需要请求的 URL 。浏览器已经打开了到 URL 的连接(这就是它知道这是下载的方式),为什么它不能将连接传递给我?

我还尝试在请求 URL 之前将自定义分配给并使用来捕获WebViewClientURL WebViewshouldOverrideUrlLoading要以这种方式下载文件,我在浏览器之前请求每个 URL,并通过它的 Content-Type 我决定是否下载它,如果是,那么我从已经打开的连接下载它,否则我关闭连接并指示浏览器加载它,并且浏览器......再次请求它。另外,shouldOverrideUrlLoading我没有被告知应该使用哪种方法和哪些 cookie 来请求给定的 URL。

我怎样才能避免不必要地请求两次并且仍然能够使用 WebView 下载文件?

4

3 回答 3

1

为什么不直接使用 url 使用 outputstream 下载呢?这是一个例子:

private class DownloadFile extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... sUrl) {
    try {
        URL url = new URL(sUrl[0]);
        URLConnection connection = url.openConnection();
        connection.connect();

        // download the file
        InputStream input = new BufferedInputStream(url.openStream());
        OutputStream output = new FileOutputStream("/sdcard/file_name.extension");

        byte data[] = new byte[1024];
        long total = 0;
        int count;
        while ((count = input.read(data)) != -1) {
            total += count;
            output.write(data, 0, count);
        }

        output.flush();
        output.close();
        input.close();
    } catch (Exception e) {
    }
    return null;
}
于 2012-09-14T22:18:37.550 回答
1

一个简单的解决方案是将其修改为仅下载它而不要求用户根据内容类型进行确认,而是只需在用于监视下载的任何内容上放置一个取消按钮。

于 2012-09-14T20:49:03.853 回答
0

您确定要中断浏览器工作吗?它使用多线程下载多个 URL,并且他正在管理自己的文件系统来为这些 url 创建 cookie,并且他知道何时需要删除它们并更新它们。

那你确定吗?

于 2012-09-14T11:46:18.277 回答