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 ...
随机推荐
- Delphi中Chrome Chromium、Cef3学习笔记(一)
原文 http://blog.csdn.net/xtfnpgy/article/details/46635225 官方下载地址:https://cefbuilds.com/ CEF简介: 嵌入 ...
- [C语言]进阶|图形库
---------------------------------------------------------------------- // main.c // Created by weich ...
- Ado.net之连接数据库
一.Ado.net的核心 Ado.net的核心为两组重要的类,一个负责处理软件内部的实际数据(DataSet),另一个负责与外部数据系统通信(DataProvider) DataSet:包含一个或多个 ...
- linux下配置redis4.0.2主从复制以及高可用
一.环境 三台服务器分别为: 172.28.18.75/172.28.18.103/172.28.18.104 在三台服务器上分别部署一个redis节点以及一个sentinel节点 二.主从复制配置 ...
- vw, vh视区覆盖和自适应图片
CSS .wrap{width:100vw;height:100vh;background: rgba(0,0,0,0.3);position: fixed;top:0;left:0;text-a ...
- 深入JVM之类的加载过程
类的加载—连接—初始化 加载:查找并加载类的字节码文件,从硬盘到内存. 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.la ...
- Linux redhat 7 进入单用户模式
redhat 7 进入单用户模式修复系统故障 1.启动机器,grub界面选择第一个,按e 2.往下翻,找到Linux16 开头的那一行 3.将ro改为"rw init=/sysroot/b ...
- python argparse(参数解析)模块学习(二)
转载自:http://www.cnblogs.com/fireflow/p/4841389.html(我去..没转载功能,ctrl + c 和 ctrl + v 得来的,格式有点问题,可去原版看看) ...
- 小强学渲染之OpenGL的CPU管线
读到这里,应该对OpenGL渲染管线有了初步简单了解.下面着重分析CPU管线,即逻辑控制中心做了什么,这部分还是容易理解的.如下图: 一,将数据加载到显存中. 这是由GPU是访问显存中的数据决定的.因 ...
- java正则积累
1. [.]点:再分割的时候不可以直接使用点,需要加上 \\ 转义才可以得到想要的结果,否则输出的时候会报异常 数据下标越界 String[] split = "output.txt&quo ...