android中支持多种文件类型的下载类
来源:互联网 发布:mac的dare you试色 编辑:程序博客网 时间:2024/06/06 01:44
String directoryName = Environment.getExternalStorageDirectory().toString() + "/filename";////文件保存路径///传入参数:Context对象,下载地址, 文件保存路径;DownloadTask downloadTask = new DownloadTask (this, mDownloadUrl, directoryName); new Thread(downloadTask ).start();///////启动线程进行下载
////下载类public class DownloadTask implements Runnable { private long mDownloadedSize = 0; private long mTotalSize;private int mDownloadPercent; private String mLocalPath; private String mURL; private Context mContext; public DownloadTask (Context context, String url, String localPath) { this.mLocalPath = localPath; this.mURL = url; this.mContext = context; } @Override public void run() { download(); };////下载方法 protected boolean download() { File file = new File(mLocalPath); if (file.exists()) { mDownloadedSize = file.length(); } else { mDownloadedSize = 0; } Log.d(TAG, "mURL, " + mURL + " downloadedSize, " + mDownloadedSize); HttpURLConnection httpConnection = null; URL url = null; try { url = new URL(mUpgradeURL); httpConnection = (HttpURLConnection) url.openConnection(); mTotalSize = httpConnection.getContentLength(); Log.d(TAG, "totalSize, " + mTotalSize); if (mDownloadedSize == mTotalSize ) { ////////已下载到本地 return true; } else if (mDownloadedSize > mTotalSize) { if (!file.delete()) { return false; } } httpConnection.disconnect(); } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (httpConnection != null) { httpConnection.disconnect(); } } catch (Exception e) { } } InputStream inStream = null; RandomAccessFile randomAccessFile = null; try { httpConnection = (HttpURLConnection) url.openConnection(); httpConnection.setRequestProperty("Accept", "image/gif, " + "image/jpeg, " + "image/pjpeg, " + "image/pjpeg, " + "application/x-shockwave-flash, " + "application/xaml+xml, " + "application/vnd.ms-xpsdocument, " + "application/x-ms-xbap, " + "application/x-ms-application, " + "application/vnd.ms-excel, " + "application/vnd.ms-powerpoint, " + "application/msword, " + "*/*"); httpConnection.setRequestProperty("Accept-Language", "zh-CN"); httpConnection.setRequestProperty("Referer", mUpgradeURL); httpConnection.setRequestProperty("Charset", "UTF-8"); httpConnection.setRequestProperty("Range", "bytes=" + mDownloadedSize + "-"); httpConnection.setRequestProperty("Connection", "Keep-Alive"); inStream = httpConnection.getInputStream(); File saveFile = new File(mLocalPath); randomAccessFile = new RandomAccessFile(saveFile, "rwd"); randomAccessFile.seek(mDownloadedSize); int offset = 0; int count = 0; int perUnit = (int) mTotalSize / 1024 / 100; byte[] buffer = new byte[1024]; while ((offset = inStream.read(buffer, 0, 1024)) != -1) { randomAccessFile.write(buffer, 0, offset); count++; if (count == perUnit && mDownloadedSize < mTotalSize) { mDownloadPercent = (int) (mDownloadedSize * 100 / mTotalSize); ////////下载百分百mDownloadPercent count = 0; } mDownloadedSize += offset; } if (mDownloadedSize == mTotalSize ) { /////////下载完成 } Log.d(TAG, "download finished."); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (inStream != null) { inStream.close(); } if (httpConnection != null) { httpConnection.disconnect(); } if (randomAccessFile != null) { randomAccessFile.close(); } } catch (Exception e) { } } }}
0 0
- android中支持多种文件类型的下载类
- Android 支持的文件类型
- 一款轻量级的文件选择器,支持多种文件类型
- sqlite3支持的文件类型
- android支持多种分辨率的方法
- android设备支持多种屏幕的方法
- Qt中实现多种语言的支持
- 修改Android系统 支持的蓝牙传输的文件类型
- Android 支持多种前缀
- android支持多种屏幕
- 支持多种浏览器下载的文件名处理方案
- android-支持多种屏幕[支持的屏幕范围] 二
- 在你的Android App中支持多种主题 ( Part 2 )
- Tomcat中配置下载文件类型
- 从SQL取出二进制文件并下载(多种文件类型)
- JBuilder4支持的文件类型列表
- vc所支持的文件类型
- VC所支持的文件类型
- Xcode无法选择模拟器运行
- Objective-C基础之权限修饰符private, protected和public
- ★ HDU 3667 费用与流量平方成正比的最小流
- POJ 1611 The Suspects(并查集)
- 二分图最大匹配总结
- android中支持多种文件类型的下载类
- listView分页加载数据
- Codeforces 52C Circular RMQ 线段树+从字符串读数字 sscanf
- 4 Maya模型基础--创建多边形工具、连接表面、补洞
- window2003 应用程序正常初始化失败(0xc0000135)
- 贝叶斯分类算法
- Qt浅谈之十四:文件操作
- DeNA/上海纵游通过使用AWS大量缩短新款游戏和服务的上线时间
- 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读