android实现软件自动更新的步骤

本篇文章是直接下载最新的APK安装的方法,并不是增量下载该APk。

想要实现一个android应用,自动更新下载APK软件的方法,我采取的是以下几步方法:

1.每次进入主界面时,获取服务器的数据,看是否是最新版本,是,则无操作,否,则进行以下步骤;

2.弹出是否更新软件的对话框,点击下载后

3.弹出下载的进度条的对话框,开始下载,可以上随时点击按钮,停止下载

4.下载完成后,调用系统安装软件的服务,安装软件

效果图:

 

 

实现过程:  

新建一个UpdateManager方法,具体内容我已经有详细的注释

package lgx.acc.updatedemo; 

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

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView; 

public class UpdateManager {
 // 应用程序Context
 private Context mContext;
 // 是否是最新的应用,默认为false
 private boolean isNew = false;
 private boolean intercept = false;
 // 下载安装包的网络路径
 private String apkUrl = "http://shouji.360tpcdn.com/360sj/tpi/20130201/"
   + "com.flikie.wallpapers.gallery_4.apk";
 // 保存APK的文件夹
 private static final String savePath = "/sdcard/updatedemo/";
 private static final String saveFileName = savePath
   + "UpdateDemoRelease.apk";
 // 下载线程
 private Thread downLoadThread;
 private int progress;// 当前进度
 TextView text;
 // 进度条与通知UI刷新的handler和msg常量
 private ProgressBar mProgress;
 private static final int DOWN_UPDATE = 1;
 private static final int DOWN_OVER = 2; 

 public UpdateManager(Context context) {
  mContext = context;
 } 

 /**
  * 检查是否更新的内容
  */
 public void checkUpdateInfo() {
  //这里的isNew本来是要从服务器获取的,我在这里先假设他需要更新
  if (isNew) {
   return;
  } else {
   showUpdateDialog();
  }
 } 

 /**
  * 显示更新程序对话框,供主程序调用
  */
 private void showUpdateDialog() {
  AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
  builder.setTitle("软件版本更新");
  builder.setMessage("有最新的软件包,请下载!");
  builder.setPositiveButton("下载", new DialogInterface.OnClickListener() { 

   @Override
   public void onClick(DialogInterface dialog, int which) {
    showDownloadDialog();
   } 

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

     @Override
     public void onClick(DialogInterface dialog, int which) {
      dialog.dismiss();
     }
    }); 

  builder.create().show();
 } 

 /**
  * 显示下载进度的对话框
  */
 private void showDownloadDialog() {
  AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
  builder.setTitle("软件版本更新");
  LayoutInflater inflater = LayoutInflater.from(mContext);
  View v = inflater.inflate(R.layout.progress, null);
  mProgress = (ProgressBar) v.findViewById(R.id.progress); 

  builder.setView(v);
  builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 

   @Override
   public void onClick(DialogInterface dialog, int which) {
    intercept = true;
   }
  });
  builder.show();
  downloadApk();
 } 

 /**
  * 从服务器下载APK安装包
  */
 private void downloadApk() {
  downLoadThread = new Thread(mdownApkRunnable);
  downLoadThread.start();
 } 

 private Runnable mdownApkRunnable = new Runnable() { 

  @Override
  public void run() {
   URL url;
   try {
    url = new URL(apkUrl);
    HttpURLConnection conn = (HttpURLConnection) url
      .openConnection();
    conn.connect();
    int length = conn.getContentLength();
    InputStream ins = conn.getInputStream();
    File file = new File(savePath);
    if (!file.exists()) {
     file.mkdir();
    }
    File apkFile = new File(saveFileName);
    FileOutputStream fos = new FileOutputStream(apkFile);
    int count = 0;
    byte[] buf = new byte[1024];
    while (!intercept) {
     int numread = ins.read(buf);
     count += numread;
     progress = (int) (((float) count / length) * 100); 

     // 下载进度
     mHandler.sendEmptyMessage(DOWN_UPDATE);
     if (numread <= 0) {
      // 下载完成通知安装
      mHandler.sendEmptyMessage(DOWN_OVER);
      break;
     }
     fos.write(buf, 0, numread);
    }
    fos.close();
    ins.close(); 

   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }; 

 /**
  * 安装APK内容
  */
 private void installAPK() {
  File apkFile = new File(saveFileName);
  if (!apkFile.exists()) {
   return;
  }
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.setDataAndType(Uri.parse("file://" + apkFile.toString()),
    "application/vnd.android.package-archive");
  mContext.startActivity(intent);
 }; 

 private Handler mHandler = new Handler() {
  public void handleMessage(android.os.Message msg) {
   switch (msg.what) { 

   case DOWN_UPDATE:
    mProgress.setProgress(progress);
    break; 

   case DOWN_OVER:
    installAPK();
    break; 

   default:
    break;
   }
  } 

 };
} 

还有progressBar.xml的具体代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical" > 

 <ProgressBar
  android:id="@+id/progress"
  style="?android:attr/progressBarStyleHorizontal"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" />
</LinearLayout> 

之后在MainActivity的onCreate方法中,调用一下代码即可

UpdateManager manager=new UpdateManager(MainActivity.this);
  manager.checkUpdateInfo(); 

一定要记得在manifest里面加权限哈,

<uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

最后效果就出来了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Android实现APP自动更新功能
  • 基于Retrofit2+RxJava2实现Android App自动更新
  • Android应用APP自动更新功能的代码实现
  • Android如何实现APP自动更新
  • Android程序自动更新功能模块的实现方法【附完整demo源码下载】
  • Android应用自动更新功能实现的方法
  • Android App实现应用内部自动更新的最基本方法示例
  • Android编程实现应用自动更新、下载、安装的方法
  • Android 软件自动更新功能实现的方法
  • android实现通知栏下载更新app示例
(0)

相关推荐

  • Android应用APP自动更新功能的代码实现

    由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必要给我们的Android应用增加自动更新的功能. 既然实现自动更新,我们首先必须让我们的应用知道是否存在新版本的软件,因此我们可以在自己的网站上放置配置文件,存放软件的版本信息: <update> <version>2</version> <name>baidu

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

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

  • 基于Retrofit2+RxJava2实现Android App自动更新

    本文实例为大家分享了Retrofit2 RxJava2实现Android App自动更新,具体内容如下 功能解析 自动更新可以说已经是App的标配了,很多第三方平台也都支持这个功能,最近手头上的项目需要加入这个App自动更新,考虑到项目里有用到Retrofit2和RxJava2,于是打算使用它俩自己实现这个功能. 分析App自动更新,可以分为以下三个功能点: 1.APK文件的下载 2.下载进度的实时更新显示 3.下载完成后的自动安装 其中比较难的一点是下载进度的实时更新显示,更难的是如何优雅的进

  • Android程序自动更新功能模块的实现方法【附完整demo源码下载】

    本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更新模块检测服务器上存放的版本号跟当前程序的版本号如果大于当前版本号,弹出更新对话框,如果用户选择更新,则显示当前更新状态,然后替换当前程序. 程序调用版本更新检测: private UpdateManager updateMan; private ProgressDialog updateProgr

  • Android如何实现APP自动更新

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

  • Android实现APP自动更新功能

    现在一般的android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新.该小程序实现的就是这个功能. 该小程序的特点是,当有更新时,会弹出一个提示框,点击确定,则在通知来创建一个进度条进行下载,点击取消,则取消更新. 以下是详细代码: 1.创建布局文件notification_item.xml,用于在通知栏生成一个进度条和下载图标. <?xml version="1.0" encoding="utf-8"?>

  • Android 软件自动更新功能实现的方法

    相信所有的用户都遇到过软件提醒更新的情况,下面就将实现此功能 首先看一下程序目录结构    步骤: 1.新建一个类UpdateManger,用于显示提示更新 复制代码 代码如下: public class UpdateManger { // 应用程序Context private Context mContext; // 提示消息 private String updateMsg = "有最新的软件包,请下载!"; // 下载安装包的网络路径 private String apkUrl

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

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

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

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

  • android实现通知栏下载更新app示例

    1.设计思路,使用VersionCode定义为版本升级参数.android为我们定义版本提供了2个属性: 复制代码 代码如下: <manifest package="com.cnblogs.tianxia.subway"android:versionCode="1" <!--Integer类型,系统不显示给用户-->android:versionName="1.0"<!--String类型,系统显示用户-->>

随机推荐