Android实现下载文件功能的方法

本文所述为Android实现下载文件功能的完整示例代码,对于学习和研究android编程相信会有一定的帮助,尤其是对Android初学者有一定的借鉴价值。

完整功能代码如下:

package com.test; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.webkit.URLUtil; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Main extends Activity { private TextView mTextView01; private EditText mEditText01; private Button mButton01; private static final String TAG = "DOWNLOADAPK"; private String currentFilePath = ""; private String currentTempFilePath = ""; private String strURL=""; private String fileEx=""; private String fileNa=""; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView01 = (TextView)findViewById(R.id.myTextView1); mButton01 = (Button)findViewById(R.id.myButton1); mEditText01 =(EditText)findViewById(R.id.myEditText1); mButton01.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // 文件会下载至local端 mTextView01.setText("下载中..."); strURL = mEditText01.getText().toString(); /*取得欲安装程序之文件名称*/ fileEx = strURL.substring(strURL.lastIndexOf(".") +1,strURL.length()).toLowerCase(); fileNa = strURL.substring(strURL.lastIndexOf("/") +1,strURL.lastIndexOf(".")); getFile(strURL); } } ); mEditText01.setOnClickListener(new EditText.OnClickListener() { public void onClick(View arg0){ mEditText01.setText(""); mTextView01.setText("远程安装程序(请输入URL)"); } }); } /* 处理下载URL文件自定义函数 */ private void getFile(final String strPath) { try { if (strPath.equals(currentFilePath) ) { getDataSource(strPath); } currentFilePath = strPath; Runnable r = new Runnable() { public void run() { try { getDataSource(strPath); } catch (Exception e) { Log.e(TAG, e.getMessage(), e); } } }; new Thread(r).start(); } catch(Exception e) { e.printStackTrace(); } } /*取得远程文件*/ private void getDataSource(String strPath) throws Exception { if (!URLUtil.isNetworkUrl(strPath)) { mTextView01.setText("错误的URL"); } else { /*取得URL*/ URL myURL = new URL(strPath); /*创建连接*/ URLConnection conn = myURL.openConnection(); conn.connect(); /*InputStream 下载文件*/ InputStream is = conn.getInputStream(); if (is == null) { throw new RuntimeException("stream is null"); } /*创建临时文件*/ File myTempFile = File.createTempFile(fileNa, "."+fileEx); /*取得站存盘案路径*/ currentTempFilePath = myTempFile.getAbsolutePath(); /*将文件写入暂存盘*/ FileOutputStream fos = new FileOutputStream(myTempFile); byte buf[] = new byte[128]; do { int numread = is.read(buf); if (numread <= 0) { break; } fos.write(buf, 0, numread); }while (true); /*打开文件进行安装*/ openFile(myTempFile); try { is.close(); } catch (Exception ex) { Log.e(TAG, "error: " + ex.getMessage(), ex); } } } /* 在手机上打开文件的method */ private void openFile(File f) { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); /* 调用getMIMEType()来取得MimeType */ String type = getMIMEType(f); /* 设置intent的file与MimeType */ intent.setDataAndType(Uri.fromFile(f),type); startActivity(intent); } /* 判断文件MimeType的method */ private String getMIMEType(File f) { String type=""; String fName=f.getName(); /* 取得扩展名 */ String end=fName.substring(fName.lastIndexOf(".") +1,fName.length()).toLowerCase(); /* 依扩展名的类型决定MimeType */ if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")|| end.equals("xmf")||end.equals("ogg")||end.equals("wav")) { type = "audio"; } else if(end.equals("3gp")||end.equals("mp4")) { type = "video"; } else if(end.equals("jpg")||end.equals("gif")||end.equals("png")|| end.equals("jpeg")||end.equals("bmp")) { type = "image"; } else if(end.equals("apk")) { /* android.permission.INSTALL_PACKAGES */ type = "application/vnd.android.package-archive"; } else { type="*"; } /*如果无法直接打开,就跳出软件列表给用户选择 */ if(end.equals("apk")) { } else { type += "/*"; } return type; } /*自定义删除文件方法*/ private void delFile(String strFileName) { File myFile = new File(strFileName); if(myFile.exists()) { myFile.delete(); } } /*当Activity处于onPause状态时,更改TextView文字状态*/ protected void onPause() { mTextView01 = (TextView)findViewById(R.id.myTextView1); mTextView01.setText("下载成功"); super.onPause(); } /*当Activity处于onResume状态时,删除临时文件*/ protected void onResume() { /* 删除临时文件 */ delFile(currentTempFilePath); super.onResume(); } }

读者可以在该实例的基础上进行修改与完善,使之更符合自身项目需求。

时间: 2024-11-13 06:54:53

Android实现下载文件功能的方法的相关文章

Android实现下载文件功能的方法_Android

本文所述为Android实现下载文件功能的完整示例代码,对于学习和研究android编程相信会有一定的帮助,尤其是对Android初学者有一定的借鉴价值. 完整功能代码如下: package com.test; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import and

Android调用手机拍照功能的方法_Android

本文实例讲述了Android调用手机拍照功能的方法.分享给大家供大家参考.具体如下: 一.main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" andr

Android调用手机拍照功能的方法

本文实例讲述了Android调用手机拍照功能的方法.分享给大家供大家参考.具体如下: 一.main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" andr

php实现当前页面点击下载文件的简单方法_php实例

php控制器中代码 public function downFile($path = ''){ if(!$path) header("Location: /"); download($path); } download文件下载函数代码 function download($file_url,$new_name=''){ if(!isset($file_url)||trim($file_url)==''){ echo '500'; } if(!file_exists($file_url)

php实现当前页面点击下载文件的简单方法

php控制器中代码 public function downFile($path = ''){ if(!$path) header("Location: /"); download($path); } download文件下载函数代码 function download($file_url,$new_name=''){ if(!isset($file_url)||trim($file_url)==''){ echo '500'; } if(!file_exists($file_url)

Android开发实现拍照功能的方法实例解析

本文实例讲述了Android开发实现拍照功能的方法.分享给大家供大家参考,具体如下: 解析: 1)判断是否有摄像头checkCameraHardware(this) 2)获得相机camera = Camera.open(0); 3)把相机添加到mPreView = new SurfacePreView(this, mCamera); 4)实现拍照 mCamera.autoFocus 5)在拍照后使用mCamera.takePicture(null, null, mPicture);方法把图片保存

Android实现上传文件功能的方法_Android

本文所述为一个Android上传文件的源代码,每一步实现过程都备有详尽的注释,思路比较清楚,学习了本例所述上传文件代码之后,你可以应对其它格式文件的上传.实例中主要实现上传文件至Server的方法,允许Input.Output,不使用Cache,使Androiod上传文件变得轻松. 主要功能代码如下: package com.test; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.

百度云Android版避免上传和下载文件消耗流量方法

给各位百度云软件的用户们来详细的解析分享一下百度云Android版避免上传和下载文件消耗流量的方法. 方法分享: 百度云Android版上传下载会消耗流量,因此请尽量选择在Wi-Fi环境下进行操作.您也可以在设置界面中选择"仅在Wi-Fi下上传下载"选项,当您的网络环境在非Wi-Fi环境下,不会对传输列表中的文件进行传输,请您放心.   好了,以上的信息就是小编给各位百度云的这一款软件的用户们带来的详细的百度云Android版避免上传和下载文件消耗流量的方法解析分享的全部内容了,各位看

Silverlight实现下载文件功能

最近一直在做Siverlight的有关的项目,今天做了一个下载功能,也是经过 网上找的各种办法才得到以下的结果,我来总结一下.如果哪有不对的或者哪块 有错误的还请各位进行指出来!谢谢! 在sl中的下载,我认为很难做到像c#中的下载.可以弹出一个对话框进行保 存或者另存为的样子. 下面是通过:WebClientDownHandler文件进行的! using System; using System.Collections.Generic; using System.Linq; using Syst