webview中下载地址变化,求解救

在webview中实现下载,在setDownloadListener的public void onDownloadStart(String arg0, String arg1, String arg2,String arg3, long arg4)函数,参数arg0是下载的地址,为什么这个下载地址不是唯一的,是会变化的。如我扫描金山wps安卓版的二维码,下载的时候打印arg0的内容,有时是http://kad.www.wps.cn/wps/download/android/kingsoftoffice_2052/moffice_2052_wpscn.apk,有时是http://120.198.233.13/videoplayer/moffice_2052_wpscn.apk?ich_u_r_i=687a44106a1e58403c9d4ae5c165567d&ich_s_t_a_r_t=0&ich_e_n_d=0&ich_k_e_y=1345078924750263372456&ich_t_y_p_e=1&ich_d_i_s_k_i_d=4&ich_u_n_i_t=1,而且它们的出现是没有规律的,担都能正常下载,求教,为什么会这样子~~~~我希望得到的是第一个地址那种形式,或者有没有得转换的

在 setDownloadListener 的 onDownloadStart 函数中,参数 arg0 是下载的地址,这个地址可能会发生变化的原因是,在下载过程中,服务器可能会返回一个重定向的 HTTP 响应,这个响应告诉客户端浏览器(或者是 webview)新的地址,浏览器(或者是 webview)会自动按照新的地址进行下载。


如果你希望得到的是第一种形式的地址,或者有一个方法可以将变化的地址转换成你希望的地址,那么你可以通过使用 HTTP 头中的 Location 字段来解决这个问题。


你可以在下载过程中,通过程序解析 HTTP 头中的 Location 字段,然后将这个字段的值记录下来,最后在下载完成之后使用这个地址来获取下载的文件。


下面是一个示例代码,可以帮助你理解如何解析 HTTP 头中的 Location 字段:

URL url = new URL(arg0);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setInstanceFollowRedirects(false);
connection.connect();

// 获取 HTTP 头中的 Location 字段
String location = connection.getHeaderField("Location");

// 使用新的地址进行下载
URL newUrl = new URL(location);
InputStream inputStream = newUrl.openStream();

// 将下载的文件保存到本地
// 代码省略