博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
下载相关的简单实例
阅读量:6189 次
发布时间:2019-06-21

本文共 6473 字,大约阅读时间需要 21 分钟。

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>

转载于:https://www.cnblogs.com/xingmeng/archive/2012/03/26/2417465.html

你可能感兴趣的文章
java多线程-synchronized
查看>>
UVA 11300 Spreading the Wealth
查看>>
我的博客从现在起搬家到CSDN固弘的专栏,欢迎大家继续支持!
查看>>
Dijkstra算法
查看>>
Oracle用户权限分配
查看>>
Oracle查看执行失败的JOB的Sql
查看>>
微信公众平台开发(29)在网页上添加分享到朋友圈,关注微信号等按钮
查看>>
架构搭建学习知识点一
查看>>
通过GitHub Page开通博客啦
查看>>
一步步学习ASP.NET MVC3 (13)——HTML辅助方法
查看>>
c++游戏编程书籍
查看>>
C++面向对象编程初步
查看>>
CentOS6.5下卸载自带的MySQL数据库安装MySQL5.6
查看>>
软件工程——团队答辩
查看>>
solr和solrcloud
查看>>
潜移默化学会WPF(转载篇<一>)--WPF 遍历DataTemplate(获取所有控件)
查看>>
前端面试中常见的算法问题
查看>>
dwr的原理和优缺点
查看>>
Python+OpenCV图像处理(十二)—— 图像梯度
查看>>
2014,为了梦想宁愿破釜沉舟
查看>>