下载相关的简单实例
Main.java
package src.com;
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 = "";
/** Called when the activity is first created. */
@Override
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(){
@Override
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(){
@Override
public void onClick(View v) {
mEditText01.setText("");
mEditText01.setText("远程安装程序(请输入URL)");
}
});
}
/* 处理下载URL文件自定义函数 */
private void getFile(final String strPath){
try{
if( strPath.equals(currentFilePath) ){
getDataSource(strPath);
}
currentFilePath = strPath;
Runnable r = new Runnable(){
@Override
public void run() {
try{
getDataSource(strPath);
}catch(Exception e){
Log.e(TAG, e.getMessage(), e);
}
}
};
}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);
}
}
}
private void openFile(File f) {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
/* 调用getMIMEType()来取得MimeType */
String type = getMimeType(f);
/* 设置intent的file与MimeType */
intent.setDataAndType(Uri.fromFile(f), type);
startActivity(intent);
}
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") ){
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();
}
}
download Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="src.com"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name" >
<activity
android:name=".Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>"
</manifest>
layout目录下的main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/widget27" >
<TextView
android:id="@+id/myTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/str_text" />
<EditText
android:id="@+id/myEditText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/str_url"
android:textSize="18sp" />
<Button
android:id="@+id/myButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/str_button" />
</LinearLayout>
values目录下的xml
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="str_button">开始安装</string>
<string name="str_text">远程安装程序(请输入URL)</string>
<string name="str_url">http://127.0.0.1:8080/android/hello.apk</string>
<string name="app_name">远程下载安装程序</string>
</resources>
color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable name="darkgray">#808080</drawable>
<drawable name="white">#FFFFFF</drawable>
<drawable name="blue">#0000FF</drawable>
</resources>