android webview下载附件几种方法
下面几种方式都能下载,记录的是稍作修改后的结果。
首先
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);//传cookieString 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下载附件几种方法相关推荐
- android webview capturepicture,android webView截图的4种方法
android 在webView里面截图大概有四种方式,具体内容如下 1.获取到DecorView然后将DecorView转换成bitmap然后写入到文件里面. View view = getWind ...
- 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法
将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...
- Android webview 写入cookie的解决方法以及一些属性设置
Android webview 写入cookie的解决方法以及一些属性设置 参考文章: (1)Android webview 写入cookie的解决方法以及一些属性设置 (2)https://www. ...
- Android SDK下载失败的解决方法
Android SDK下载失败的解决方法 图1 在下载过程中,Android SDK Manager Log中出现下面出错信息: Preparing toinstall archives Downlo ...
- Android 更新UI的两种方法——handler和runOnUiThread()
Android 更新UI的两种方法--handler和runOnUiThread() 在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外 ...
- 数据导出到excel文件给客户端下载的几种方法
(原创)datagrid数据导出到excel文件给客户端下载的几种方法 看到这个觉得这个人很厉害,mvp啊. 我就改成这个样子了. Response.Clear(); Respons ...
- Android结束进程的几种方法
Android 结束进程的几种方法 在开发过程中,遇到了测试的说关闭应用的时候出现了闪一下黑屏的情况,后面发现闪黑屏和杀掉进程有关系,这里就简单总结一下结束进程的几种方法,以及闪黑屏是如何解决的,防止 ...
- SRA数据下载的3种方法
第一步如何找到sra? 先去看文章 文章有对应的gse号,在geo里输入gse号. 翻页到最下面找到srp号 ####在sra网站搜索srp号 https://tra ...
- android 动画方式,Android Activity进出动画三种方法
Android Activity进出动画三种方法 实现activity的进出场动画总共有3种方式,下面会一一列出,首先给出示例的动画xml文件. 动画的xml文件 android:fromYDelta ...
- Android启动服务的两种方法
Android启动服务的两种方法 第一种方法 第二种方法 Android 5.0开始,只能使用显式Intent启动服务.其中,启动服务有2种方式,第一种是直接指定想要启动的服务:第二种是使用AIDL的 ...
最新文章
- SVN 钩子操作-同步更新web目录
- echart 多柱图只显示部分数据标签_2分钟上手、3小时学会无代码软件开发---Echarts数据可视化...
- linux中用截取一些信息,Linux如何使用cut命令截取文件信息
- Opengl-面剔除(一种优化方式)
- 文件流下载到本地 - 待完成
- 【Python】选择数组中的数,拼接成一个最大字符串数(易错题,cmp_to_key举例)
- idea文件头信息设置
- 清空mysql一个库中的所有表_mysql怎样清空一个数据库中的所有表_MySQL
- python写网络调试助手_Qt开源作品4-网络调试助手
- 关于SAP CRM One Order状态(Status)和Status Profile的处理逻辑
- PYPL 4 月排行:Python 最流行,Java 还行不行?
- Java 1.8 HashMap源码探究
- 误删path怎么办(已重启)
- android 本地地址转换为url,android本地mipmap图片转url、绝对路径转URL URL URI File Path 转换...
- intel32指令中文版
- 学习:网络接口RJ45
- Win7 Python3.5安装Scrapy
- zend framwork黑箱测试
- 计算机系学霸表白,高级暗语表白 学霸隐藏式表白
- windows资源管理器关闭了怎么打开