Android 经验之文件下载
在Android 开发中,我们肯定会接触到下载需求,那么如何通过技术实现呢?
一、简单实现:
通过了解HTTP原理,我们应该可以知道,HTTP学习的时候,可以通过HTTPGET方式来进行文件下载:
new Thread(new Runnable() { @Override
public void run() {
String fileName = url.substring(url.lastIndexOf("/") + 1);
// 如果不是,就加尾缀
if (!fileName.endsWith(MimeUtils.guessExtensionFromMimeType(mimetype))) {
fileName = fileName + "." + MimeUtils.guessExtensionFromMimeType(mimetype);
}
// 限制文件名的长度
if (fileName.length() > 50) {
fileName = fileName.substring(fileName.length() - 50);
}
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 5 * 1000);
HttpConnectionParams.setSoTimeout(params, 5 * 1000);
HttpGet httpGet = new HttpGet(url);
try {
File file = new File(Environment.getExternalStorageDirectory(), fileName);
if (!file.exists()) {
file.createNewFile();
} else {
boolean flag = file.delete();
if (flag) {
file.createNewFile();
} else {
// 目前设定是: 如果删除失败,就不进行下载了
return;
}
}
RandomAccessFile randomFile = new RandomAccessFile(file, "rw");
HttpResponse response = new DefaultHttpClient(params).execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream in = entity.getContent();
randomFile.seek(randomFile.length());
byte[] buffer = new byte[1024];
int lenght = 0;
while ((lenght = in.read(buffer)) > 0) {
randomFile.write(buffer, 0, lenght);
if (randomFile.length() == contentLength) {
// 下载完成
}
}
randomFile.close();
httpGet.abort();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
Android 经验之文件下载的更多相关文章
- Android Webview实现文件下载功能
在做美图欣赏Android应用的时候,其中有涉及到Android应用下载的功能,这个应用本身其实也比较简单,就是通过WebView控制调用相应的WEB页面进行展示.刚开始以为和普通的文件下载实 ...
- Android -- 经验分享(二)
目录 自定义两个View进行画图,让 ...
- Android开发之文件下载,状态时显示下载进度,点击自动安装
在进行软件升级时,需要进行文件下载,在这里实现自定义的文件下载,并在状态栏显示下载进度,下载完成后,点击触发安装. 效果如图: 用于下载文件和显示现在进度的线程类如下: [java] view pl ...
- Android中的文件下载——DownLoadManager
一.问题概述 在android开发中,经常会使用到文件下载的功能,比如app版本更新等.在api level 9之后,android系统为我们提供了DownLoadManager类,这是android ...
- Android实现apk文件下载并自动安装
//下载apk程序代码 protected File downLoadFile(String httpUrl) { // TODO Auto-generated method stub final S ...
- Android -- 经验分享
目录 代码中安装 ...
- 【转】 Android经验: proguard 阻碍 webview 正常工作
转自:http://blog.csdn.net/span76/article/details/9065941 WebView 常识 使用 Alert 提供消息 我在页面经常用 Alert 提供消息, ...
- virtualbox 安装 android 经验总结
装了好多个版本,最终总结一下遇到的问题, 1.直接下载的镜像文件没有找到如何设置分辨率的方法,因此放弃使用 2.在安装过程中,首先创建虚拟机,在virtualbox中创建硬盘的时候一定要选HDD格式, ...
- Android 经验: 5555 端口会被 adb 误认为 emulator
在本机启动 Android, 再用本机的的 adb 去连接 adb connect 127.0.0.1:5555 而后 adb devices 查看 user@ubuntu:~$ adb device ...
随机推荐
- 使用jQuery+huandlebars防止编码注入攻击
兼容ie8(很实用,复制过来,仅供技术参考,更详细内容请看源地址:http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html) & ...
- django中执行py报错Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured
https://blog.csdn.net/heybob/article/details/49684261 django代码下面直接run的时候报错: django.core.exceptions.I ...
- SSM商城项目(四)
1. 学习计划 1.图片服务器 2.图片服务器安装 3.图片服务器的使用 4.图片上传功能 5.富文本编辑器的使用方法 6.商品添加功能实现 2. 图片服务器 1.存储空间可扩展. 2.提供一个统一的 ...
- 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式
开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...
- vi怎么统计查找字符串的个数
vi怎么统计查找字符串的个数 用vi打开一个比较大的文本,用vi查找指定字符串,现在怎么统计该字符串的个数呢?比如我查找ORA字符串,直接输入 /ORA的时候vi会高亮显示.现在怎么统计ORA的个数呢 ...
- 从汇编层面解释switch语句判断快速的原因
源码如下: #include <stdio.h> void main(){ int flag; flag=1; switch (flag){ ...
- AltiumDesigner 查找相似对象
同类器件的集体选中.集体选中的方法是:先选中一个标识符,右击在选项表中选择Find Similar Objects,然后就会出现一个对话框,在这个对话框中,有一些any项,根据自己的需要把一些any改 ...
- [leetcode]17. Letter Combinations of a Phone Number手机键盘的字母组合
Given a string containing digits from 2-9 inclusive, return all possible letter combinations that th ...
- 标志寄存器在Debug中的表示
在Debug中,标志寄存器是按照有意义的各个标志位单独表示的. 下面列出Debug对我们已知的标志位的表示.
- React-router4 第五篇 Preventing Transitions 防止转换
文档地址:https://reacttraining.com/react-router/web/example/preventing-transitions 大概意思就是说:我在这个页面上写东西呢?不 ...