下面几种方式都能下载,记录的是稍作修改后的结果。
首先
webView.setDownloadListener(new MyWebViewDownLoadListener());
然后
1、浏览器,不能传递cookie
 private class MyWebViewDownLoadListener implements DownloadListener {@Override
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,long contentLength) {            
            Uri uri = Uri.parse(url);Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);
        }}
2、DownloadManager,可传递cookie
http://www.2cto.com/kf/201205/132327.html
 private class MyWebViewDownLoadListener implements DownloadListener {@Override
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,long contentLength) {
//先判断有无权限,否在未授权时app直接跳出
int perm = MainActivity.this.checkCallingOrSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE");
if(perm != PackageManager.PERMISSION_GRANTED){
    Toast.makeText(MainActivity.this,"缺少存储权限:手机-设置-应用管理-权限-存储",Toast.LENGTH_LONG).show();
}
else {
    DownloadManager downloadManager = ((DownloadManager) getSystemService(Activity.DOWNLOAD_SERVICE));
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
    request.setVisibleInDownloadsUi(true);
    //传cookie
    String CookieStr= CookieManager.getInstance().getCookie(url);
    request.addRequestHeader("Cookie",CookieStr);
    //contentDisposition本身带有att...一串字符,中文和非中文还不一样    
    String fileName;
    if(contentDisposition.indexOf("filename*=UTF-8")!=-1) {
fileName = contentDisposition.substring(contentDisposition.indexOf("'") + 2, contentDisposition.length());
   }

    else{
        fileName = contentDisposition.substring(contentDisposition.indexOf("=") + 1, contentDisposition.length());
     }
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
    //过时的,老版用这句,新版用后面那句
    request.setShowRunningNotification(true);
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    downloadManager.enqueue(request);
}

        }}
实际应用中,获取cookie部分是这样写的,这样不必每下一个文件都取一遍
3、thread,这个cookie问题没试过
http://blog.csdn.net/u013210620/article/details/47184511
 private class MyWebViewDownLoadListener implements DownloadListener {@Override
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,long contentLength) {
          new HttpThread(url,contentDisposition).start();
        }}
public class HttpThread extends Thread {private String url;private String contentDisposition;public HttpThread(String url,String contentDisposition) {super();this.url = url;this.contentDisposition=contentDisposition;}@Override
    public void run() {super.run();try {URL httpUrl = new URL(url);HttpURLConnection connection = (HttpURLConnection) httpUrl.openConnection();connection.setDoInput(true);connection.setDoOutput(true);InputStream inputStream = connection.getInputStream();File downFile = null;File sdFile = null;FileOutputStream out = null;String filename;Log.e("TAG", "sddd");
            //下面的if有点问题,到这就不执行了,没仔细研究,注释后能过去//if (Environment.getExternalStorageState().equals(Environment.MEDIA_CHECKING)) {
                Log.e("TAG", "sd");downFile = Environment.getExternalStorageDirectory();                
    //contentDisposition本身带有att...一串字符,中文和非中文还不一样    
    fileName;
    if(contentDisposition.indexOf("filename*=UTF-8")!=-1) {
fileName = contentDisposition.substring(contentDisposition.indexOf("'") + 2, contentDisposition.length());
   }

    else{
        fileName = contentDisposition.substring(contentDisposition.indexOf("=") + 1, contentDisposition.length());
     }
                sdFile = new File(downFile, filename);                out = new FileOutputStream(sdFile);           // }            byte[] b = new byte[6 * 1024];            int len;            while ((len = inputStream.read(b)) != -1) {                if (out != null) {                    out.write(b, 0, len);                }            }            if (out != null) {                out.close();            }            if (inputStream != null) {                inputStream.close();            }            Log.e("TAG", "scca");        } catch (Exception e) {            e.printStackTrace();        }    }}
contentDisposition是为了修改文件名后加的
private String CookieStr;
private class MyWebViewClient extends WebViewClient {@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}public void onPageFinished(WebView view, String url) {CookieStr =  CookieManager.getInstance().getCookie(url);super.onPageFinished(view, url);}
}
												

android webview下载附件几种方法相关推荐

  1. android webview capturepicture,android webView截图的4种方法

    android 在webView里面截图大概有四种方式,具体内容如下 1.获取到DecorView然后将DecorView转换成bitmap然后写入到文件里面. View view = getWind ...

  2. 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法

    将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...

  3. Android webview 写入cookie的解决方法以及一些属性设置

    Android webview 写入cookie的解决方法以及一些属性设置 参考文章: (1)Android webview 写入cookie的解决方法以及一些属性设置 (2)https://www. ...

  4. Android SDK下载失败的解决方法

    Android SDK下载失败的解决方法 图1 在下载过程中,Android SDK Manager Log中出现下面出错信息: Preparing toinstall archives Downlo ...

  5. Android 更新UI的两种方法——handler和runOnUiThread()

    Android 更新UI的两种方法--handler和runOnUiThread() 在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外 ...

  6. 数据导出到excel文件给客户端下载的几种方法

    (原创)datagrid数据导出到excel文件给客户端下载的几种方法 看到这个觉得这个人很厉害,mvp啊. 我就改成这个样子了.  Response.Clear();         Respons ...

  7. Android结束进程的几种方法

    Android 结束进程的几种方法 在开发过程中,遇到了测试的说关闭应用的时候出现了闪一下黑屏的情况,后面发现闪黑屏和杀掉进程有关系,这里就简单总结一下结束进程的几种方法,以及闪黑屏是如何解决的,防止 ...

  8. SRA数据下载的3种方法

    第一步如何找到sra? 先去看文章 文章有对应的gse号,在geo里输入gse号.          翻页到最下面找到srp号         ####在sra网站搜索srp号 https://tra ...

  9. android 动画方式,Android Activity进出动画三种方法

    Android Activity进出动画三种方法 实现activity的进出场动画总共有3种方式,下面会一一列出,首先给出示例的动画xml文件. 动画的xml文件 android:fromYDelta ...

  10. Android启动服务的两种方法

    Android启动服务的两种方法 第一种方法 第二种方法 Android 5.0开始,只能使用显式Intent启动服务.其中,启动服务有2种方式,第一种是直接指定想要启动的服务:第二种是使用AIDL的 ...

最新文章

  1. SVN 钩子操作-同步更新web目录
  2. echart 多柱图只显示部分数据标签_2分钟上手、3小时学会无代码软件开发---Echarts数据可视化...
  3. linux中用截取一些信息,Linux如何使用cut命令截取文件信息
  4. Opengl-面剔除(一种优化方式)
  5. 文件流下载到本地 - 待完成
  6. 【Python】选择数组中的数,拼接成一个最大字符串数(易错题,cmp_to_key举例)
  7. idea文件头信息设置
  8. 清空mysql一个库中的所有表_mysql怎样清空一个数据库中的所有表_MySQL
  9. python写网络调试助手_Qt开源作品4-网络调试助手
  10. 关于SAP CRM One Order状态(Status)和Status Profile的处理逻辑
  11. PYPL 4 月排行:Python 最流行,Java 还行不行?
  12. Java 1.8 HashMap源码探究
  13. 误删path怎么办(已重启)
  14. android 本地地址转换为url,android本地mipmap图片转url、绝对路径转URL URL URI File Path 转换...
  15. intel32指令中文版
  16. 学习:网络接口RJ45
  17. Win7 Python3.5安装Scrapy
  18. zend framwork黑箱测试
  19. 计算机系学霸表白,高级暗语表白 学霸隐藏式表白
  20. windows资源管理器关闭了怎么打开

热门文章

  1. Qt QLabel详解
  2. 为什么HierachyViewer无法连接真机调试
  3. 视频剪辑素材哪里找?这个几个网站就够了。
  4. 萤石开放平台——摄像头画面怎么完成一键分享?
  5. zte服务器安装linux,ZTE MF637U 在linux下安装全攻略
  6. 2020vue面试题汇总
  7. 东芝Toshiba e-STUDIO4515AC 一体机驱动
  8. Linux 程序 动态库 静态库依赖关系
  9. python flask服务器_flask应用部署到服务器
  10. matlab插值与拟合例题_[转载]MATLAB插值与拟合(1)