如果我使用DownloadListener
收听,我会在浏览器已经请求之后获取我需要请求的网址。浏览器已经打开了与URL的连接(这就是它知道这是一个下载的方式),为什么它不能通过我连接?
我还尝试将自定义WebViewClient
分配给WebView
,并在请求之前使用shouldOverrideUrlLoading
来抓取网址。要以这种方式下载文件,我在浏览器之前请求每个URL,然后通过它的Content-Type I决定是否下载它,如果是,那么我从已经打开的连接下载它,否则我关闭连接并指示浏览器加载它,浏览器......再次请求它。另外,在shouldOverrideUrlLoading
我没有被告知我应该使用哪种方法和哪些cookie来请求给定的URL。
我怎样不不必要地请求两次,仍然可以使用WebView下载文件?
答案 0 :(得分:1)
一个简单的解决方案是修改它只是下载它而不要求用户根据内容类型进行确认,而只是在用于监视下载的任何内容上放置一个取消按钮。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
您确定要中断浏览器工作吗?它使用multy-thread来下载多个URL,并且他正在管理自己的文件系统以为该URL创建cookie,并且他知道何时需要删除它们并更新它们。
所以你确定吗?