package com.test;
//Download by http://ww.codefans.net
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();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一个Android文件下载Download程序示例,文件会下载至local端,远程安装程序(请输入URL),取得远程文件,取得URL,创建连接,InputStream 下载文件,创建临时文件,取得站存盘案路径,将文件写入暂存盘,在手机上打开文件的method ,调用getMIMEType()来取得MimeType,设置intent的file与MimeType ,判断文件MimeType的method,取得扩展名,依扩展名的类型决定MimeType,如果无法直接打开,就跳出软件列表给用户选择.
资源推荐
资源详情
资源评论
收起资源包目录
download.zip (25个子文件)
download
AndroidManifest.xml 959B
res
layout
main.xml 835B
drawable-ldpi
icon.png 2KB
drawable-mdpi
icon.png 3KB
drawable-hdpi
icon.png 4KB
values
color.xml 208B
strings.xml 323B
src
com
test
Main.java 6KB
bin
com
test
R.class 461B
Main.class 6KB
Main$2.class 995B
R$layout.class 364B
R$attr.class 310B
Main$3.class 904B
R$id.class 459B
R$string.class 465B
R$drawable.class 459B
Main$1.class 2KB
classes.dex 8KB
download.apk 17KB
resources.ap_ 11KB
.classpath 280B
assets
default.properties 449B
.project 844B
gen
com
test
R.java 1KB
共 25 条
- 1
android168
- 粉丝: 10
- 资源: 90
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 没用333333333333333333333333333333
- 基于Vue和SpringBoot的企业员工管理系统2.0版本设计源码
- 【C++初级程序设计·配套源码】第2期-基本数据类型
- 基于Java和Vue的kopsoftKANBAN车间电子看板设计源码
- 影驰战将PS3111 东芝芯片TT18G23AIN开卡成功分享,图片里面画线的选项很重要
- 【C++初级程序设计·配套源码】第1期-语法基础
- 基于JavaScript、CSS、HTML的简易DOM版飞机游戏设计源码
- 基于Java开发的日程管理FlexTime应用设计源码
- SM2258XT-BGA144-4BGA180-6L-R1019 三星KLUCG4J1CB B0B1颗粒开盘工具 , EC, 3A, 94, 43, A4, CA 七彩虹SL300这个固件有用
- GJB 5236-2004 军用软件质量度量
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页