博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android WebView文件下载的常用方式
阅读量:5863 次
发布时间:2019-06-19

本文共 2815 字,大约阅读时间需要 9 分钟。

hot3.png

在开发中WebView不会主动去下载文件,但webView提供了下载文件的的接口

webView.setOnDownloadListener(new OnDownloadListener(){    

});

第一种:实现Java代码下载

其中有一个回调方法返回要下载文件的url,我们可以使用该url在native中实现网络下载

class MyDownloadStart implements DownloadListener{            @Override          public void onDownloadStart(String url, String userAgent,                  String contentDisposition, String mimetype, long contentLength) {              // TODO Auto-generated method stub              //调用自己的下载方式  //          new HttpThread(url).start();                 }                }

第二种:使用系统下载器下载

class MyDownloadStart implements DownloadListener{            @Override          public void onDownloadStart(String url, String userAgent,                  String contentDisposition, String mimetype, long contentLength){          AppUtils.LogD(mimetype);        // download file        DownloadManager downloadManager = ((DownloadManager) activity                .getSystemService(Activity.DOWNLOAD_SERVICE));        Request request = new Request(Uri.parse(url));        // set request header, 如session等 www.2cto.com            request.addRequestHeader("Accept",                    "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");            request.addRequestHeader("Accept-Language", "en-us,en;q=0.5");            request.addRequestHeader("Accept-Encoding", "gzip, deflate");            request.addRequestHeader("Accept-Charset",                    "ISO-8859-1,utf-8;q=0.7,*;q=0.7");            request.addRequestHeader("Cache-Control", "max-age=0");            String host = "";            try {                host = new URL(url).getHost();            } catch (MalformedURLException e) {                e.printStackTrace();            }            String cookieStr = CookieManager.getInstance().getCookie(host);            if (!AppUtils.isEmpty(cookieStr)) {                request.addRequestHeader("Cookie", cookieStr + "; AcSe=0");            }            // generate filename dynamically            String fileName = contentDisposition.replaceFirst(                    "attachment; filename=", "");            request.setDestinationInExternalPublicDir(                    Environment.DIRECTORY_DOWNLOADS, fileName);        downloadManager.enqueue(request);});

第三种:使用默认浏览器下载

将获得到的url转为 uri,然后调用系统的浏览器去下载,这种方式可以看见文件下载进度条

class MyDownloadStart implements DownloadListener{            @Override          public void onDownloadStart(String url, String userAgent,                  String contentDisposition, String mimetype, long contentLength) {              // TODO Auto-generated method stub              //调用系统浏览器下载              Uri uri = Uri.parse(url);                Intent intent = new Intent(Intent.ACTION_VIEW, uri);                startActivity(intent);                }                }

 

转载于:https://my.oschina.net/ososchina/blog/361566

你可能感兴趣的文章
[C语言]基本数据类型
查看>>
CSS的工作过程
查看>>
傀儡娃娃作者 李欢:插画艺术IP的商业化之路 | 点评家
查看>>
Ubuntu下安装并配置VS Code
查看>>
面试官问:请拿出一段体现你水平的代码
查看>>
显示在哪咧
查看>>
精通Quartz-01入门介绍和简单示例
查看>>
如何追赶如此之火的大数据AI热潮?
查看>>
基于Shiro,JWT实现微信小程序登录完整例子
查看>>
(五)构建springmvc+mybatis+dubbo分布式平台-dubbo简介
查看>>
柯里化 curry
查看>>
为什么在React Component需要bind绑定事件
查看>>
怎么获得红米手机4A的Root权限
查看>>
PAT1002写出这个数
查看>>
css学习笔记1--半透明边框
查看>>
[小端日记] - 如何理解TCP的四次挥手
查看>>
js 常用函数
查看>>
利用jekyll+github搭建个人博客
查看>>
gitbook 入门教程之主题插件
查看>>
关于“放量”
查看>>