我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android应用程序更新并下载实例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android应用程序更新并下载实例

整理文档,搜刮出一个Android应用程序更新并下载实例的代码,稍微整理精简一下做下分享。

创建一个新类,名为UpdateManager,代码如下:


import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import com.af.mobile.R;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
public class UpdateManager
{private URL url=null;
  
  private static final int DOWNLOAD = 1;
  
  private static final int DOWNLOAD_FINISH = 2;
  
  //HashMap<String, String> mHashMap;
  
  private String mSavePath;
  
  private int progress;
  
  private boolean cancelUpdate = false;
  private Context mContext;
  
  private ProgressBar mProgress;
  private Dialog mDownloadDialog;
  private Handler mHandler = new Handler()
  {
    public void handleMessage(Message msg)
    {
      switch (msg.what)
      {
      // 正在下载
      case DOWNLOAD:
        // 设置进度条位置
        mProgress.setProgress(progress);
        break;
      case DOWNLOAD_FINISH:
        // 安装文件
        installApk();
        break;
      default:
        break;
      }
    };
  };
  public UpdateManager(Context context)
  {
    this.mContext = context;
  }
  public void checkUpdate()
  {
    if (isUpdate())
    {
      showNoticeDialog();
    } else
    {
    }
  }
  
  private boolean isUpdate()
  {
    // 获取当前软件版本
    Double versionCode = getVersionCode(mContext);
      Double serviceCode = 1.2;
      // 版本判断
      if (serviceCode > versionCode)
      {
        return true;
      }
    return false;
  }
  // 获取软件版本号
  private Double getVersionCode(Context context)
  {
    Double versionCode = 0.0;
    try
    {
      // 获取软件版本号,对应AndroidManifest.xml下android:versionCode
      versionCode = (double) context.getPackageManager().getPackageInfo("com.af.mobile", 0).versionCode;
    } catch (NameNotFoundException e)
    {
      e.printStackTrace();
    }
    return versionCode;
  }
   //显示软件更新对话框
  private void showNoticeDialog()
  {
    AlertDialog.Builder builder = new Builder(mContext);
    builder.setTitle("软件更新");
    String string=download("http://192.168.0.102:9313/daojuserver/uploads/version.xml");//xml的下载地址
    builder.setMessage(string);
    builder.setPositiveButton("更新", new OnClickListener()
    {
      @Override
      public void onClick(DialogInterface dialog, int which)
      {
        dialog.dismiss();
        // 显示下载对话框
        showDownloadDialog();
      }
    });
    // 稍后更新
    builder.setNegativeButton("稍后更新", new OnClickListener()
    {
      @Override
      public void onClick(DialogInterface dialog, int which)
      {
        dialog.dismiss();
      }
    });
    Dialog noticeDialog = builder.create();
    noticeDialog.show();
  }
  // 显示软件下载对话框
  private void showDownloadDialog()
  {
    // 构造软件下载对话框
    AlertDialog.Builder builder = new Builder(mContext);
    builder.setTitle("djfkjd");//提示信息内容
    // 给下载对话框增加进度条
    final LayoutInflater inflater = LayoutInflater.from(mContext);
    View v = inflater.inflate(R.layout.softupdate_progress, null);
    mProgress = (ProgressBar) v.findViewById(R.id.update_progress);
    builder.setView(v);
    // 取消更新
    builder.setNegativeButton("取消更新", new OnClickListener()
    {
      @Override
      public void onClick(DialogInterface dialog, int which)
      {
        dialog.dismiss();
        // 设置取消状态
        cancelUpdate = true;
      }
    });
    mDownloadDialog = builder.create();
    mDownloadDialog.show();
    // 现在文件
    downloadApk();
  }
  private void downloadApk()
  {
    // 启动新线程下载软件
    new downloadApkThread().start();
  }
  private class downloadApkThread extends Thread
  {
    @Override
    public void run()
    {
      try
      {
        // 判断SD卡是否存在,并且是否具有读写权限
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
        {
          // 获得存储卡的路径
          String sdpath = Environment.getExternalStorageDirectory() + "/";
          mSavePath = sdpath + "download";
          URL url = new URL("http://192.168.0.102:9313/daojuserver/uploads/SpMobile.apk");//apk下载地址地址
          // 创建连接
          HttpURLConnection conn = (HttpURLConnection) url.openConnection();
          conn.connect();
          // 获取文件大小
          int length = conn.getContentLength();
          // 创建输入流
          InputStream is = conn.getInputStream();
          File file = new File(mSavePath);
          if (!file.exists())
          {
            file.mkdir();
          }
          File apkFile = new File(mSavePath, "dhfudh");
          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);
            // 更新进度
            mHandler.sendEmptyMessage(DOWNLOAD);
            if (numread <= 0)
            {
              mHandler.sendEmptyMessage(DOWNLOAD_FINISH);
              break;
            }
            fos.write(buf, 0, numread);
          } while (!cancelUpdate);
          fos.close();
          is.close();
        }
      } catch (MalformedURLException e)
      {
        e.printStackTrace();
      } catch (IOException e)
      {
        e.printStackTrace();
      }
      // 取消下载对话框显示
      mDownloadDialog.dismiss();
    }
  };
  private void installApk()
  {
    File apkfile = new File(mSavePath, "dhfudh");
    if (!apkfile.exists())
    {
      return;
    }
    // 通过Intent安装APK文件
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
    mContext.startActivity(i);
  }
  public String download(String urlString)
  {
    StringBuffer sbBuffer=new StringBuffer();
    String line=null;
    BufferedReader buffer=null;
  try {
    url=new URL(urlString);
    HttpURLConnection urlConn=(HttpURLConnection) url.openConnection();
    buffer=new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
    while((line=buffer.readLine())!=null)
    {
      sbBuffer.append(line);
    }
  } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
  }
  finally
  {
    try {
      buffer.close();
    } catch (Exception e2) {
      // TODO: handle exception
      e2.printStackTrace();
    }
  }
  return sbBuffer.toString();
  }
}

在Android应用程序Main界面


if(isOpenNetwork())//判断是否有网络
    {
      UpdateManager manager = new  UpdateManager(Main.this);
    // 检查软件更新
    manager.checkUpdate();
    }

判断移动端是否有网络


private boolean isOpenNetwork() {
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
    if (networkInfo != null) {
      // 2.获取当前网络连接的类型信息
      int networkType = networkInfo.getType();
      if (ConnectivityManager.TYPE_WIFI == networkType) {
        // 当前为wifi网络
      } else if (ConnectivityManager.TYPE_MOBILE == networkType) {
        // 当前为mobile网络
      }
      return connManager.getActiveNetworkInfo().isAvailable();
    }
    return false;
  }
您可能感兴趣的文章:android实现通知栏下载更新app示例Android实现检查并下载APK更新、安装APK及获取网络信息的方法Android编程实现应用自动更新、下载、安装的方法Android程序版本更新之通知栏更新下载安装android中DownloadManager实现版本更新,监听下载进度实例Android中使用AsyncTask实现文件下载以及进度更新提示Android 检查更新、下载、安装功能的实现Android Studio下载更新Android SDK网络异常或无法下载Android SDK Manager更新、下载速度慢问题解决办法Android中使用AsyncTask实现下载文件动态更新进度条功能Android编程实现下载时主界面与详细界面一致更新的方法


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android应用程序更新并下载实例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android应用程序更新并下载实例

整理文档,搜刮出一个Android应用程序更新并下载实例的代码,稍微整理精简一下做下分享。 创建一个新类,名为UpdateManager,代码如下:import java.io.BufferedReader; import java.io.
2022-06-06

怎么在Android应用中实现一个程序更新下载功能

这期内容当中小编将会给大家带来有关怎么在Android应用中实现一个程序更新下载功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。创建一个新类,名为UpdateManager,代码如下:import ja
2023-05-31

Android程序版本更新之通知栏更新下载安装

Android应用检查版本更新后,在通知栏下载,更新下载进度,下载完成自动安装,效果图如下:检查当前版本号AndroidManifest文件中的versionCode用来标识版本,在服务器放一个新版本的apk,versioncode大于当前
2022-06-06

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

1.设计思路,使用VersionCode定义为版本升级参数。android为我们定义版本提供了2个属性: 代码如下:
2022-06-06

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

本文实例讲述了Android编程实现应用自动更新、下载、安装的方法。分享给大家供大家参考,具体如下: 我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新。得益于Android系统的软件包管理和安装机制,这一功
2022-06-06

Android应用App更新实例详解

前言:现在一般的Android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新。该项目实现的就是这个功能。并且有强制更新和更新提示两种方式,当有更新时,会弹出一个提示框,点击下载,则在通知来创建一
2022-06-06

android中DownloadManager实现版本更新,监听下载进度实例

DownloadManager简介DownloadManager是Android 2.3(API level 9)用系统服务(Service)的方式提供了DownloadManager来处理长时间的下载操作。它包含两个静态内部类Downlo
2022-06-06

Android之RecyclerView轻松实现下拉刷新和加载更多示例

今天研究了下RecyclerView的滑动事件,特别是下拉刷新和加载更多事件,在现在几乎所有的APP显示数据列表时都用到了。自定义RecyclerView下拉刷新和加载更多听上去很复杂,实际上并不难,只要是对滑动事件的监听和处理。 一、自定
2022-06-06

android使用AsyncTask实现多线程下载实例

AsyncTask不仅方便我们在子线程中对UI进行更新操作,还可以借助其本身的线程池来实现多线程任务。下面是一个使用AsyncTask来实现的多线程下载例子。 01 效果图02 核心类 - DownloadTask.classpublic
2022-06-06

Android:下拉刷新+加载更多+滑动删除实例讲解

小伙伴们在逛淘宝或者是各种app上,都可以看到这样的功能,下拉刷新和加载更多以及滑动删除,刷新,指刷洗之后使之变新,比喻突破旧的而创造出新的,比如在手机上浏览新闻的时候,使用下拉刷新的功能,我们可以第一时间掌握最新消息,加
2022-06-06

非常实用的小功能 Android应用版本的更新实例

每一个应用都是具备一个功能,那就是版本更新,我记得我之前在面试的时候,面试官让我介绍一下应用版本更新的一些具体操作。我当时因为做过这个功能,所以回答的还是很流畅,现在我把这个分享给大家,需要能够共同进步。 我当时是这么说的: 首先呢,我们是
2022-06-06

Android 开发程序锁应用简单实例

1.基本思路 ①.创建已加锁应用的数据库(字段:_id,packagename),如果应用已加锁,将加锁应用的包名维护到数据库中②.已加锁+未加锁 == 手机中所有应用(AppInfoProvider) 2.已加锁和未加锁的数据适配器cla
2022-06-06

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

本文实例讲述了Android程序自动更新功能模块的实现方法。分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新。 在程序启动的时候首先调用更新模块检测服务器上存放的版本号跟当前程序
2022-06-06

Uniapp应用程序中如何实现自动更新

随着移动应用的快速发展,每天都有数百万的应用程序从各种应用商店推出。由于安全问题和漏洞,无法保障应用的运行稳定性。为了解决这些问题,开发人员必须经常更新他们的应用程序。这就是为什么我们要实现自动更新的原因之一。Uniapp是个多端的开发框架,开发者只需要编写一次代码,其就可以同时在多个平台上运行。这种跨平台的开发框架对开发者来说是相当有价值的。然而,当我们使用Uniapp开发应
2023-05-14

android实现程序自动升级到安装示例分享(下载android程序安装包)

代码如下://程序下载升级 zhouxiang@JavascriptInterfacepublic void UpdateCAECP(final String path){try{AlertDialog.Builder builder =
2022-06-06

Android程序开发之使用PullToRefresh实现下拉刷新和上拉加载

PullToRefresh是一套实现非常好的下拉刷新库,它支持: 1.ListView 2.ExpandableListView 3.GridView 4.WebView 等多种常用的需要刷新的View类型,而且使用起来也十分方便。 (下载
2022-06-06

Android程序开发之Listview下拉刷新上拉(滑动分页)加载更多

最近做的类似于微博的项目中,有个Android功能要使用到listview的向下拉刷新来刷新最新消息,向上拉刷新(滑动分页)来加载更多。新浪微博就是使用这种方式的典型。 当用户从网络上读取微博的时候,如果一下子全部加载用户未读的微博这将耗费
2022-06-06

Android应用中ADT与SDK Manager出现无法更新下载如何解决

这期内容当中小编将会给大家带来有关Android应用中ADT与SDK Manager出现无法更新下载如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。相信很多人都有在给Eclipse添加ADT插件的时
2023-05-31

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录