android自动更新软件版本

   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.Handler;

  import android.os.Message;

  import android.util.Log;

  import android.view.LayoutInflater;

  import android.view.View;

  import android.widget.ProgressBar;

  public class UpdateManager {

  private Context mContext;

  private final String updateMsg = "亲,有新版本,要更新吗!"; //下载消息提示

  private Dialog noticeDialog; //下载提示对话框

  private Dialog downloadDialog; //下载进度对话框

  private ProgressBar mProgressBar; //进度条

  private Boolean interceptFlag = false; //标记用户是否在下载过程中取消下载

  private Thread downloadApkThread = null; //下载线程

  private final String apkUrl = "http://www.xxx/xxx.apk"; //apk的URL地址

  private final String savePath = "/sdcard/UpdateDemo/"; //下载的apk存放的路径

  private final String saveFileName = savePath + "xxx.apk"; //下载的apk文件

  private int progress = 0; //下载进度

  private final int DOWNLOAD_ING = 1; //标记正在下载

  private final int DOWNLOAD_OVER = 2; //标记下载完成

  private final String TAG="版本更新";

  //日志打印标签

  private Handler mhandler = new Handler() { //更新UI的handler

  @Override

  public void handleMessage(Message msg) {

  super.handleMessage(msg);

  switch (msg.what) {

  case DOWNLOAD_ING:

  // 更新进度条

  mProgressBar.setProgress(progress);

  break;

  case DOWNLOAD_OVER:

  downloadDialog.dismiss();

  installApk();

  //安装

  break;

  default:

  break;

  }

  }

  };

  /*

  * 构造方法

  */

  public UpdateManager(Context context) {

  this.mContext = context;

  }

  /*

  * 检查是否有需要更新,具体比较版本xml

  */

  public void checkUpdate() {

  // 到服务器检查软件是否有新版本

  //如果有则

  showNoticeDialog();

  }

  /*

  * 显示版本更新对话框

  */

  private void showNoticeDialog() {

  AlertDialog.Builder builder = new Builder(mContext);

  builder.setTitle("版本更新");

  builder.setMessage(updateMsg);

  builder.setPositiveButton("更新", new OnClickListener() {

  public void onClick(DialogInterface dialog, int which) {

  noticeDialog.dismiss();

  showDownloadDialog();

  }

  });

  builder.setNegativeButton("以后再说", new OnClickListener() {

  public void onClick(DialogInterface dialog, int which) {

  noticeDialog.dismiss();

  }

  });

  noticeDialog = builder.create();

  noticeDialog.show();

  }

  /*

  * 弹出下载进度对话框

  */

  private void showDownloadDialog() {

  AlertDialog.Builder builder = new Builder(mContext);

  builder.setTitle("软件更新");

  final LayoutInflater inflater = LayoutInflater.from(mContext);

  View v = inflater.inflate(R.layout.progress, null);

  mProgressBar = (ProgressBar) v.findViewById(R.id.updateProgress);

  builder.setView(v);

  builder.setNegativeButton("取消", new OnClickListener() {

  public void onClick(DialogInterface dialog, int which) {

  downloadDialog.dismiss();

  interceptFlag = true;

  }

  });

  downloadDialog = builder.create();

  downloadDialog.show();

  downloadLatestVersionApk();

  }

  /*

  * 下载最新的apk文件

  */

  private void downloadLatestVersionApk() {

  downloadApkThread = new Thread(downloadApkRunnable);

  downloadApkThread.start();

  }

  //匿名内部类,apk文件下载线程

  private Runnable downloadApkRunnable = new Runnable() {

  public void run() {

  try {

  URL url = new URL(apkUrl);

  HttpURLConnection conn = (HttpURLConnection) url

  .openConnection();

  conn.setConnectTimeout(5*1000);

  conn.connect();

  int length = conn.getContentLength();

  Log.e(TAG, "总字节数:"+length);

  InputStream is = conn.getInputStream();

  File file = new File(savePath);

  if (!file.exists()) {

  file.mkdir();

  }

  File apkFile = new File(saveFileName);

  FileOutputStream out = new FileOutputStream(apkFile);

  int count = 0;

  int readnum = 0;

  byte[] buffer = new byte[1024];

  do {

  readnum = is.read(buffer);

  count += readnum;

  progress = (int) (((float) count / length) * 100);

  Log.e(TAG, "下载进度"+progress);

  mhandler.sendEmptyMessage(DOWNLOAD_ING);

  if (readnum <= 0) {

  // 下载结束

  mhandler.sendEmptyMessage(DOWNLOAD_OVER);

  break;

  }

  out.write(buffer,0,readnum);

  } while (!interceptFlag);

  is.close();

  out.close();

  } catch (MalformedURLException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  };

  /*

  * 安装下载的apk文件

  */

  private void installApk() {

  File file= new File(saveFileName);

  if(!file.exists()){

  return;

  }

  Intent intent= new Intent(Intent.ACTION_VIEW);

  intent.setDataAndType(Uri.parse("file://"+file.toString()), "application/vnd.android.package-archive");

  mContext.startActivity(intent);

  }

  }

时间: 2025-01-21 03:10:53

android自动更新软件版本的相关文章

如何禁止鲁大师自动更新软件?

  一个软件自动更新,虽然给我们的电脑使用提供了便利.但是有时候我们并不想升级,或者在对比完旧版会后悔升级.所以一般人都喜欢手动去升级.下面我们就以鲁大师为例.教大家如何禁止鲁大师自动更新软件?下面方法不仅对于鲁大师,对于多种软件都适用.一起来看看吧! 鲁大师自动升级方法 第一步: 运行鲁大师软件.然后点击右上角的设置按钮 ,选择设置选项,如图所示: 第二步: 在常规设置选项卡中,取消勾选检测到鲁大师有新版本的时候,自动更新的选项 ,然后点击右下角的设置按钮,如图所示: 温馨提示: 小编建议在经

让Xcode自动更新Build版本

我们每天都要打包给测试,每天都要改Build比较麻烦,幸运的是可以通过Shell脚本来省略这个过程. 在Xcode工程里选择对应的Target,在Build Phases里点击"New Run Script Phases": 在下面的窗口中写入类似于如下脚本: buildNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}

Android软件自动更新实现代码_Android

如何实现软件自动更新,下面是具体实例: 效果图:           具体步骤: 1.在服务器上部署更新所用的xml文件:version.xml <update> <version>2</version> <name>baiduxinwen.apk</name> <url>http://gdown.baidu.com/data/wisegame/e5f5c3b8e59401c8/baiduxinwen.apk</url>

Android编程实现应用自动更新、下载、安装的方法_Android

本文实例讲述了Android编程实现应用自动更新.下载.安装的方法.分享给大家供大家参考,具体如下: 我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新.得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单,下面我们就来实践一下. 1. 准备知识 在AndroidManifest.xml里定义了每个Android apk的版本标识: <manifest xmlns:android="http://schemas.android.com/a

Android应用自动更新功能实现的方法_Android

本文给大家分享Android里应用版本更新功能这一块的实现. 一个好的应用软件都是需要好的维护,从初出版本到最后精品,这个过程需要版本不停的更新,那么如何让用户第一时间获取最新的应用安装包呢?那么就要求我们从第一个版本就要实现升级模块这一功能. 自动更新功能的实现原理,就是我们事先和后台协商好一个接口,我们在应用的主Activity里,去访问这个接口,如果需要更新,后台会返回一些数据(比如,提示语:最新版本的url等).然后我们给出提示框,用户点击开始下载,下载完成开始覆盖安装程序,这样用户的应

Android App实现应用内部自动更新的最基本方法示例_Android

这只是初步的实现,并没有加入自动编译等功能.需要手动更改更新的xml文件和最新的apk.    共涉及到四个文件!一.客户端AndroidUpdateTestActivity:程序首页 main.xml:首页布局 Update:更新类 softupdate_progress:更新等待界面 Updage package majier.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOExcept

Android如何实现APP自动更新_Android

先来看看要实现的效果图: 对于安卓用户来说,手机应用市场说满天飞可是一点都不夸张,比如小米,魅族,百度,360,机锋,应用宝等等,当我们想上线一款新版本APP时,先不说渠道打包的麻烦,单纯指上传APP到各大应用市场的工作量就已经很大了,好不容易我们把APP都上传完了,突然发现一个会导致应用闪退的小Bug,这时那个崩溃啊,明明不是很大的改动,难道我们还要再去重新去把各大应用市场的版本再上传更新一次?相信我,运营人员肯定会弄死你的!! 有问题,自然就会有解决问题的方案,因此我们就会想到如果在APP里

Android:友盟的自动更新组件

又好又专业的服务能帮开发者省很多时间.一开始做项目也准备自己来统计数据.自己做自动更新,随着使用友盟服务的时间增加,渐渐放弃了这种想法,转而研究如何更充分的使用,这里分享一下使用自动更新组件的心得. 一.缺少res导致不能升级的问题 由于缺少了解,官网文档也没用提醒,仅仅拷贝了SDK的jar到工程里,一直不知道到底升级功能是否已经实现,关键是也不报错!今天又拿出来测试了一下,监听了一下UmengUpdateListener接口,发现客户端已经检测到了更新,但是没用弹出更新的对话框,然后就注意到了

浅析Android手机卫士关闭自动更新_Android

推荐阅读: 浅析Android手机卫士自定义控件的属性 保存数据的四种方式,网络,广播提供者,SharedPreferences,数据库 获取SharedPreferences对象,通过getSharedPreferences()方法,参数:名称,模式 例如config,MODE_PRIVATE 调用SharedPreferences对象的edit()方法,得到Editor对象 调用Editor对象的putBoolean()方法,放入布尔数据,参数:键值对,"update" false