`
zhtch_123
  • 浏览: 84325 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

apk自动下载断点续传,自动安装,卸载

 
阅读更多

直接上代码:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;

import com.iblueyeClient.R;
import com.iblueyeClient.utils.Msg;

public class UpdateManager {

	private Context mContext;

	// 返回的安装包url
	private String apkUrl = "http://www.iblueye.com/client/download/ibePhone.apk";
	private Dialog noticeDialog;
	private Dialog downloadDialog;
	/* 下载包安装路径 */
	private static final String savePath = Environment
			.getExternalStorageDirectory().getPath();
	private static final String saveFileName = savePath + "/" + "ibePhone.apk";
	private Thread downLoadThread;
	private boolean interceptFlag = false;
	public ProgressBar mProgress;/* 进度条与通知ui刷新的handler和msg常量 */
	public int progress;
	private Handler handler;

	public UpdateManager(Context context, Handler h) {
		this.mContext = context;
		handler = h;
	}

	// 外部接口让主Activity调用
	public void confirmUpdate() {
		AlertDialog.Builder builder = new Builder(mContext);
		builder.setTitle(R.string.update_version);
		builder.setMessage(R.string.update_msg);
		builder.setPositiveButton(R.string.download, new OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
				showDownloadDialog();
			}
		});
		builder.setNegativeButton(R.string.next_download,
				new OnClickListener() {
					public void onClick(DialogInterface dialog, int which) {
						dialog.dismiss();
						handler.sendEmptyMessage(Msg.START);
					}
				});
		noticeDialog = builder.create();
		noticeDialog.show();
	}

	private void showDownloadDialog() {
		final LayoutInflater inflater = LayoutInflater.from(mContext);
		View v = inflater.inflate(R.layout.progress, null);
		mProgress = (ProgressBar) v.findViewById(R.id.progress);
		AlertDialog.Builder builder = new Builder(mContext);
		builder.setTitle(R.string.update_version);
		builder.setView(v);
		builder.setNegativeButton(R.string.cancel, new OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
				interceptFlag = true;
				handler.sendEmptyMessage(Msg.START);
			}
		});
		downloadDialog = builder.create();
		downloadDialog.show();

		downloadApk();
	}

	private Runnable mdownApkRunnable = new Runnable() {
		public void run() {
			try {
				URL url = new URL(apkUrl);

				HttpURLConnection conn = (HttpURLConnection) url
						.openConnection();
				conn.connect();
				int length = conn.getContentLength();
				InputStream is = conn.getInputStream();

				File file = new File(savePath);
				if (!file.exists()) {
					file.mkdir();
				}
				String apkFile = saveFileName;
				File ApkFile = new File(apkFile);
				FileOutputStream fos = new FileOutputStream(ApkFile);

				int count = 0;
				byte buf[] = new byte[1024];

				do {
					int numread = is.read(buf);
					count += numread;
					progress = (int) (((float) count / length) * 100);
					/* 更新进度 */
					handler.sendEmptyMessage(Msg.DOWN_UPDATE);
					Log.i("更新测试", "progress=" + progress);
					if (numread <= 0) {
						/* 下载完成通知安装 */
						handler.sendEmptyMessage(Msg.DOWN_OVER);
						break;
					}
					fos.write(buf, 0, numread);
				} while (!interceptFlag);/* 点击取消就停止下载 */

				fos.close();
				is.close();
			} catch (MalformedURLException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
	};

	/**
	 * 下载apk
	 * 
	 * @param url
	 */

	private void downloadApk() {
		downLoadThread = new Thread(mdownApkRunnable);
		downLoadThread.start();
	}

	/**
	 * 安装apk
	 * 
	 * @param url
	 */
	public void installApk() {
		File apkfile = new File(saveFileName);
		if (!apkfile.exists()) {
			return;
		}
		Intent apk = new Intent(Intent.ACTION_VIEW);
		apk.setDataAndType(Uri.parse("file://" + apkfile.toString()),
				"application/vnd.android.package-archive");
		mContext.startActivity(apk);

	}

	public void uninstall(String pakageName) {
		Uri uri = Uri.parse(pakageName);
		Intent intent = new Intent(Intent.ACTION_DELETE, uri);
		mContext.startActivity(intent);
	}
}

 

分享到:
评论

相关推荐

    Android中软件的下载、安装和卸载/Volley

    比如,为下载任务添加暂停和恢复功能,或者处理网络中断后的断点续传。此外,考虑到存储空间问题,可以设定最大下载文件大小,以及在后台进行下载任务以避免影响用户使用应用。 总之,Android应用开发中涉及软件的...

    android应用自动更新

    自动更新时应考虑用户体验,比如在网络状况差时不强制更新,提供断点续传功能,以及在用户不活跃时进行下载以避免占用带宽。 6. ** 安全性:** 自动更新也需要注意安全问题,确保更新服务器的安全性,防止恶意...

    android 在wifi下后台静默下载最新版本apk

    注意处理下载进度、错误重试以及断点续传。 5. **监听下载进度**: 可以通过监听下载流的字节数,实时更新进度,并可能通过BroadcastReceiver通知用户下载进度,但因“静默下载”,所以通常不会打扰用户。 6. **...

    App在线升级(转自jj120522,稍有改动)

    4. **断点续传**:为了应对网络不稳定的情况,很多App支持断点续传功能。即如果下载中断,下次启动下载时可以从上次中断的位置继续,而不是重新开始。 5. **安全验证**:下载完成后,App需要对下载的APK文件进行...

    Android例子源码仿iphone的程序卸载器.zip

    该项目的主要功能是自动扫描并加载设备上非系统的应用程序,允许用户以类似iPhone的方式进行卸载操作。在描述中提到,当用户长按应用图标时,会显示删除按钮,并且图标会呈现来回晃动的效果,增加交互的真实感。一旦...

    轻量化上传的包,我自己研究上传的试一试linux下载机制

    `wget`是网络数据下载工具,支持断点续传,适用于后台下载大文件;`curl`则是一款多功能的命令行工具,不仅可以下载文件,还可以处理HTTP、FTP、SMTP等多种协议。 4. **自定义软件包**:如果你研究的是自己上传的轻...

    codevisionavr

    首先,CodevisionAVR提供了全面的源代码编辑器,支持语法高亮、自动完成和错误检查,极大地提高了程序员的编写效率。用户可以方便地创建、编辑和调试C或汇编语言的项目。此外,它的项目管理功能使开发者能够轻松地...

    传智播客安卓4.0笔记

    - 在下载管理中,可能涉及进度记录、多线程下载、断点续传等问题。 这些笔记内容覆盖了Android开发的基础知识,包括系统架构、资源管理、数据库操作、测试方法以及数据共享,为初学者提供了全面的学习指导。

    adb源码分析源码

    源码分析可以帮助我们理解文件传输的实现细节,如断点续传、错误处理等。 6. **设备控制** adb提供了丰富的shell命令,如`am`(应用管理)、`pm`(包管理)、`input`(模拟用户输入)等,通过这些命令,开发者可以...

    Android工具 adb tools

    - **安装和卸载应用**:使用`adb install`来安装APK,`adb uninstall`来卸载应用。 - **远程 shell**:通过`adb shell`进入设备的命令行环境,执行各种Linux命令。 - **日志记录**:`adb logcat`用于收集和查看...

    adb的全称为Android Debug Bridge

    - **应用安装与调试:** 在开发过程中,开发者通常使用adb快速安装APK文件,同时配合DDMS(Dalvik Debug Monitor Service)进行断点调试,查看变量值、调用堆栈等信息。 - **远程调试:** 当设备无法直接连接到...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--多线程下载及断点续传 |--多线程之AsyncTask的用法 |--多线程之线程池ExecutorService |--字体为粗体 |--安卓下的多线程断点上传 |--对话框与进度条结合用法 |--屏幕之Activity全屏 |--屏幕之横竖屏切换 |--屏幕...

    adb调试工具

    6. 快速安装和卸载应用:开发者可以直接使用adb快速安装apk文件,无需通过Google Play或其他第三方市场。同样,也可以通过adb卸载已安装的应用。 7. 端口转发:adb支持端口转发功能,可以让开发者将设备的网络服务...

    用手机调试应用的软件

    开发者可以通过ADB执行各种操作,如安装应用、卸载应用、查看设备状态、传输文件以及最重要的——调试应用。 无线调试Android应用的优点在于,它摆脱了USB连接的限制,使得远程调试和多设备管理变得更加便捷。以下...

Global site tag (gtag.js) - Google Analytics