Android 实现文件的下载
文件的上传其实就是自己组合成Post表单的形式进行Http的Post发送,这一篇要实现的是文件的下载,其实下载文件与打开网页是一样的,打开网页是将内容显示出来,保存文件就是保存到文件中即可。
实现的代码基本如下:
代码
public void downFile(String url, String path, String fileName) throws IOException { if (fileName == null || fileName == "") this.FileName = url.substring(url.lastIndexOf("/") + 1); else this.FileName = fileName; // 取得文件名,如果输入新文件名,则使用新文件名 URL Url = new URL(url); URLConnection conn = Url.openConnection(); conn.connect(); InputStream is = conn.getInputStream(); this.fileSize = conn.getContentLength();// 根据响应获取文件大小 if (this.fileSize <= 0) { // 获取内容长度为0 throw new RuntimeException("无法获知文件大小 "); } if (is == null) { // 没有下载流 sendMsg(Down_ERROR); throw new RuntimeException("无法获取文件"); } FileOutputStream FOS = new FileOutputStream(path + this.FileName); // 创建写入文件内存流,通过此流向目标写文件 byte buf[] = new byte[1024]; downLoadFilePosition = 0; int numread; while ((numread = is.read(buf)) != -1) { FOS.write(buf, 0, numread); downLoadFilePosition += numread } try { is.close(); } catch (Exception ex) { ; } }
通过此代码就可以实现将内容保存到SD卡等设备上,当然要使用网络,必须得有网络的访问权限。这个需要自己添加,在这里不再添加!
上面的代码没有实现进度条功能,如果要实现进度条功能,我现在考虑到的就是使用消息进行发送提示,首先实现一个消息。
代码
private Handler downloadHandler = new Handler() { // 用于接收消息,处理进度条 @Override public void handleMessage(Message msg) { // 接收到的消息,并且对接收到的消息进行处理 if (!Thread.currentThread().isInterrupted()) { switch (msg.what) { case DOWN_START: pb.setMax(fileSize); //设置开始长度 case DOWN_POSITION: pb.setProgress(downLoadFilePosition); // 设置进度 break; case DOWN_COMPLETE: Toast.makeText(DownLoadFileTest.this, "下载完成!", 1).show(); // 完成提示 break; case Down_ERROR: String error = msg.getData().getString("下载出错!"); Toast.makeText(DownLoadFileTest.this, error, 1).show(); break; } } super.handleMessage(msg); } };
这样,在下载的时候只要发送相应的消息,即可有相应的提示!不再细写,希望对你的思路有帮助!在这里仅仅提供一个思路,如果你有更好的想法,欢迎交流!
//下载apk程序代码
protected File downLoadFile(String httpUrl) {
// TODO Auto-generated method stub
final String fileName = "updata.apk";
File tmpFile = new File("/sdcard/update");
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
final File file = new File("/sdcard/update/" + fileName);
try {
URL url = new URL(httpUrl);
try {
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
InputStream is = conn.getInputStream();
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[256];
conn.connect();
double count = 0;
if (conn.getResponseCode() >= 400) {
Toast.makeText(Main.this, "连接超时", Toast.LENGTH_SHORT)
.show();
} else {
while (count <= 100) {
if (is != null) {
int numRead = is.read(buf);
if (numRead <= 0) {
break;
} else {
fos.write(buf, 0, numRead);
}
} else {
break;
}
}
}
conn.disconnect();
fos.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return file;
}
//打开APK程序代码
private void openFile(File file) {
// TODO Auto-generated method stub
Log.e("OpenFile", file.getName());
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
startActivity(intent);
}
安装:
String str = "/CanavaCancel.apk";
String fileName = Environment.getExternalStorageDirectory() + str;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);
卸载:
Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
Environment拥有一些可以获取环境变量的方法
package:com.demo.CanavaCancel 这个形式是 package:程序完整的路径 (包名+程序名).
分享到:
相关推荐
根据提供的文件信息,我们可以深入探讨如何在Android平台上实现文件下载功能。这涉及到多个技术要点,包括但不限于使用HTTP请求、处理网络连接、管理线程以及更新用户界面等。 ### Android 文件下载实现 #### 1. ...
"Android 实现文件下载功能" Android 实现文件下载功能是 Android 应用程序中一个非常重要的功能,通过这篇文章,我们将详细介绍如何在 Android 平台上实现文件下载功能。 什么是文件下载 文件下载是指从网络上...
在Android平台上,实现从网络下载APK文件并自动执行安装是一个常见的需求,尤其在更新应用或者分发非市场应用时。这个过程涉及到多个步骤,包括网络请求、文件下载、权限处理以及安全检查。下面我们将详细讲解如何...
综上所述,实现Android文件的断点续传下载主要依赖于Java的RandomAccessFile类和多线程技术,通过精确控制文件的读写位置和下载范围,确保下载的连续性和可靠性。这种技术不仅提高了用户的下载体验,也在一定程度上...
在Android平台上,多线程下载是一项重要的技术,它允许应用程序同时从服务器获取数据,从而显著提高了文件下载的速度和效率。本教程将深入讲解如何在Android环境中实现多线程下载功能,以及涉及的相关知识点。 首先...
Android 使用 FTP 方式实现文件上传和下载 Android 使用 FTP 方式实现文件上传和下载是移动应用开发中的一项重要功能,特别是在 OTA 在线升级项目中,文件上传和下载是一个关键步骤。下面就 Android 使用 FTP 方式...
其实在网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,所以这篇文章在此记录一下下载zip文件并直接解压的方法,直接上代码,文末有源码下载。 下载: import java.io.BufferedInputStream; ...
3. **实现文件下载的步骤**: - 在后台线程中初始化Http请求,获取到文件的总大小。 - 创建本地文件并打开文件输出流,准备写入下载的数据。 - 使用循环读取Http响应的输入流,每次读取一定量的数据,写入到文件...
在Android开发中,实现多文件下载并展示进度条是一项常见的需求。这涉及到网络编程、线程管理、数据存储以及UI更新等多个方面的知识。下面将详细解释如何在Android中实现这一功能。 1. **网络编程**:Android中进行...
在Android平台上,文件下载是一项常见的任务,特别是在处理大型文件或多媒体资源时,为了提升用户体验,开发者通常会采用多线程下载并实现断点续传功能。断点续传允许用户在下载过程中暂停、恢复,避免因网络问题或...
在Android开发中,构建一个网盘Demo,实际上就是创建一个能够实现文件上传、下载、查看、管理的应用。这个项目通常涉及网络编程、文件操作、用户界面设计等多个方面。下面我们将深入探讨这个主题。 首先,我们来...
在Android平台上实现多线程下载是一项常见的任务,尤其在处理大文件时,为了提高下载速度和用户体验,通常会采用多线程技术。本教程将详细解释如何在Android中实现这一功能。 首先,我们需要理解多线程下载的基本...
在Android平台上,开发一个应用程序以实现下载Word文档并顺利打开是一项常见的需求。下面将详细讲解这一过程中的关键知识点,以及如何结合给定的资源进行操作。 1. **Android权限管理**: 在Android中,访问网络和...
Android API文档是开发者在进行Android应用开发时的重要参考资料,它详尽地介绍了Android系统的各种接口、类库和功能。这份“Android API文档完整版”包含了官方文档和具有搜索功能的版本,使得开发者能够更高效地...
综上所述,实现Android基于Http协议的文件下载,需要理解Http请求、多线程、文件操作、服务和事件监听等技术,并合理组织代码结构,确保功能的稳定性和用户体验。提供的文件名列表中的类分别对应了下载的核心组件,...
本教程将详细介绍如何使用Android Service来实现文件下载,并在前台显示进度,同时通过通知栏同步更新下载进度。 首先,我们需要创建一个服务类(Service)来处理下载任务。在Android Studio中,可以通过右键点击...
接下来,我们将关注如何实现文件下载。在Android中,我们通常需要在后台线程执行文件下载操作,以避免阻塞UI。可以使用IntentService或者AsyncTask来实现这一目标。当用户点击下载按钮时,启动服务或异步任务,传递...
本文将详细讲解如何实现一个Android应用,利用TCP协议从PC服务器下载文件到Android设备。 首先,理解TCP(Transmission Control Protocol)是网络传输层的一个协议,提供了面向连接的、可靠的数据传输服务。在...
在Android平台上,与U盘进行文件的读写操作并不像在桌面系统中那样直接,因为Android设备通常不直接支持USB主机模式(Host Mode)。然而,借助第三方库如libaums,我们可以实现这一功能。libaums是Android上一个用于...
本示例“android应用下载安装apk升级版本实现demo适配Android10”聚焦于如何在Android 10(API级别29)及更高版本中实现这一过程。以下是关于这一主题的详细知识: 1. **安全下载APK**:在Android 10中,为了保障...