网络视图 - 无法下载文件而不请求两次?



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

我还尝试将自定义WebViewClient分配给WebView,并在请求URL之前使用shouldOverrideUrlLoading捕获URL。要以这种方式下载文件,我在浏览器之前请求每个URL,并根据其内容类型决定是否下载,如果是,则我从已打开的连接下载,否则我关闭连接并指示浏览器加载,浏览器。。。再次请求。另外,在shouldOverrideUrlLoading中,我没有被告知应该使用哪种方法和什么cookie来请求给定的URL。

我如何才能不必要地请求两次,并且仍然能够使用WebView下载文件?

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

为什么不直接使用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;
}

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

你确定吗?

最新更新