的WebView - 无法下载文件,而无需请求了两次?(WebView - can't d

2019-06-26 18:20发布

如果我听DownloadListener ,我得到我需要请求后,浏览器已经请求的 URL。 浏览器已经打开URL的连接(这是怎么知道这是一个下载),为什么不能把它传给我的连接?

我也试图自定义分配WebViewClientWebView ,并使用shouldOverrideUrlLoading赶上的URL请求之前。 要下载文件的方式,我的浏览器之前,并通过它的Content-Type我决定是否下载与否,如果是那么我从已经打开的连接下载它要求每一个URL,否则我关闭连接并指示浏览器加载它,并在浏览器...再次请求了。 另外,在shouldOverrideUrlLoading我不是告诉我应该使用来请求给定的URL哪种方法,什么饼干。

我怎样才能避免不必要地要求两次,仍然可以下载使用的WebView文件?

Answer 1:

一个简单的解决方法是修改它只是下载它,而不要求根据内容类型用户进行确认,而只是把取消无论是用来监视下载按钮。



Answer 2:

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


Answer 3:

你确定要打断浏览器的工作? 它使用MULTY线程下载多个URL的,也他管理他自己的文件系统为网址来建立饼干和他知道他什么时候需要将其删除并更新它们。

所以,你确定吗?



文章来源: WebView - can't download file without requesting it twice?