Android实现下载文件功能的方法
本文所述为Android实现下载文件功能的完整示例代码,对于学习和研究android编程相信会有一定的帮助,尤其是对Android初学者有一定的借鉴价值。
完整功能代码如下:
packagecom.test;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.InputStream;
importjava.net.URL;
importjava.net.URLConnection;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.net.Uri;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.View;
importandroid.webkit.URLUtil;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.TextView;
publicclassMainextendsActivity{
privateTextViewmTextView01;
privateEditTextmEditText01;
privateButtonmButton01;
privatestaticfinalStringTAG="DOWNLOADAPK";
privateStringcurrentFilePath="";
privateStringcurrentTempFilePath="";
privateStringstrURL="";
privateStringfileEx="";
privateStringfileNa="";
publicvoidonCreate(BundlesavedInstanceState)
{
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(newButton.OnClickListener()
{
publicvoidonClick(Viewv)
{
//文件会下载至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(newEditText.OnClickListener()
{
publicvoidonClick(Viewarg0){
mEditText01.setText("");
mTextView01.setText("远程安装程序(请输入URL)");
}
});
}
/*处理下载URL文件自定义函数*/
privatevoidgetFile(finalStringstrPath){
try
{
if(strPath.equals(currentFilePath))
{
getDataSource(strPath);
}
currentFilePath=strPath;
Runnabler=newRunnable()
{
publicvoidrun()
{
try
{
getDataSource(strPath);
}
catch(Exceptione)
{
Log.e(TAG,e.getMessage(),e);
}
}
};
newThread(r).start();
}
catch(Exceptione)
{
e.printStackTrace();
}
}
/*取得远程文件*/
privatevoidgetDataSource(StringstrPath)throwsException
{
if(!URLUtil.isNetworkUrl(strPath))
{
mTextView01.setText("错误的URL");
}
else
{
/*取得URL*/
URLmyURL=newURL(strPath);
/*创建连接*/
URLConnectionconn=myURL.openConnection();
conn.connect();
/*InputStream下载文件*/
InputStreamis=conn.getInputStream();
if(is==null)
{
thrownewRuntimeException("streamisnull");
}
/*创建临时文件*/
FilemyTempFile=File.createTempFile(fileNa,"."+fileEx);
/*取得站存盘案路径*/
currentTempFilePath=myTempFile.getAbsolutePath();
/*将文件写入暂存盘*/
FileOutputStreamfos=newFileOutputStream(myTempFile);
bytebuf[]=newbyte[128];
do
{
intnumread=is.read(buf);
if(numread<=0)
{
break;
}
fos.write(buf,0,numread);
}while(true);
/*打开文件进行安装*/
openFile(myTempFile);
try
{
is.close();
}
catch(Exceptionex)
{
Log.e(TAG,"error:"+ex.getMessage(),ex);
}
}
}
/*在手机上打开文件的method*/
privatevoidopenFile(Filef)
{
Intentintent=newIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
/*调用getMIMEType()来取得MimeType*/
Stringtype=getMIMEType(f);
/*设置intent的file与MimeType*/
intent.setDataAndType(Uri.fromFile(f),type);
startActivity(intent);
}
/*判断文件MimeType的method*/
privateStringgetMIMEType(Filef)
{
Stringtype="";
StringfName=f.getName();
/*取得扩展名*/
Stringend=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";
}
elseif(end.equals("3gp")||end.equals("mp4"))
{
type="video";
}
elseif(end.equals("jpg")||end.equals("gif")||end.equals("png")||
end.equals("jpeg")||end.equals("bmp"))
{
type="image";
}
elseif(end.equals("apk"))
{
/*android.permission.INSTALL_PACKAGES*/
type="application/vnd.android.package-archive";
}
else
{
type="*";
}
/*如果无法直接打开,就跳出软件列表给用户选择*/
if(end.equals("apk"))
{
}
else
{
type+="/*";
}
returntype;
}
/*自定义删除文件方法*/
privatevoiddelFile(StringstrFileName)
{
FilemyFile=newFile(strFileName);
if(myFile.exists())
{
myFile.delete();
}
}
/*当Activity处于onPause状态时,更改TextView文字状态*/
protectedvoidonPause()
{
mTextView01=(TextView)findViewById(R.id.myTextView1);
mTextView01.setText("下载成功");
super.onPause();
}
/*当Activity处于onResume状态时,删除临时文件*/
protectedvoidonResume()
{
/*删除临时文件*/
delFile(currentTempFilePath);
super.onResume();
}
}
读者可以在该实例的基础上进行修改与完善,使之更符合自身项目需求。