热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android实现检查并下载APK更新、安装APK及获取网络信息的方法

这篇文章主要介绍了Android实现检查并下载APK更新、安装APK及获取网络信息的方法,很实用的功能,需要的朋友可以参考下

本文所述实例为一个天气预报中的android代码,主要包括了下载和安装APK、检查Apk更新、显示'已经是最新'或者'无法获取版本信息'对话框、获取当前客户端版本信息、显示版本更新通知对话框、显示下载对话框、判断是否挂载了SD卡、显示文件大小格式:2个小数点显示等。具体实现代码如下:

import java.io.ByteArrayInputStream;
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 java.text.DecimalFormat;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
import org.lmw.weather.R;
import org.lmw.weather.entity.AppDetail;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
import android.content.pm.PackageInfo;
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.TextView;
import android.widget.Toast;
public class DownloadManager {
  private static final int DOWN_NOSDCARD = 0;
  private static final int DOWN_UPDATE = 1;
  private static final int DOWN_OVER = 2;
  private static final int DOWN_ERROR=3;
  private static final int DIALOG_TYPE_LATEST = 0;
  private static final int DIALOG_TYPE_FAIL = 1;
  private static final int DIALOG_TYPE_INTERNETERROR = 2;
  private static DownloadManager downloadManager;
  private Context mContext;
  // 通知对话框
  private Dialog noticeDialog;
  // 下载对话框
  private Dialog downloadDialog;
  // 进度条
  private ProgressBar mProgress;
  // 显示下载数值
  private TextView mProgressText;
  // 查询动画
  private ProgressDialog mProDialog;
  // '已经是最新' 或者 '无法获取最新版本' 的对话框
  private Dialog latestOrFailDialog;
  // 返回的安装包url
  private String apkUrl = "";
  // 进度值
  private int progress;
  // 下载线程
  private Thread downLoadThread;
  // 终止标记
  private boolean interceptFlag;
  // 提示语
  private String updateMsg = "";
  // 下载包保存路径
  private String savePath = "";
  // apk保存完整路径
  private String apkFilePath = "";
  // 临时下载文件路径
  private String tmpFilePath = "";
  // 下载文件大小
  private String apkFileSize;
  // 已下载文件大小
  private String tmpFileSize;
  private String curVersiOnName= "";
  private int curVersionCode;
  private AppDetail mDownload;
  private String checkUrl="http://192.168.0.133:8080/lmw/androidMarket/SimpleWeather-20130701093349937/update.xml";
  private Handler mHandler = new Handler() {
 public void handleMessage(Message msg) {
   switch (msg.what) {
   case DOWN_UPDATE:
 mProgress.setProgress(progress);
 mProgressText.setText(tmpFileSize + "/" + apkFileSize);
 break;
   case DOWN_OVER:
 downloadDialog.dismiss();
 installApk();
 break;
   case DOWN_NOSDCARD:
 downloadDialog.dismiss();
 Toast.makeText(mContext, "无法下载安装文件,请检查SD卡是否挂载",Toast.LENGTH_SHORT).show();
 break;
   case DOWN_ERROR:
 downloadDialog.dismiss();
 if(msg.arg1==0){
 Toast.makeText(mContext, "网络不给力啊", Toast.LENGTH_SHORT).show();
 }else if(msg.arg1==1||msg.arg1==2){
 Toast.makeText(mContext, "未找到资源",Toast.LENGTH_SHORT).show();
 }
 break;
   }
 };
  };
  public static DownloadManager getDownloadManager() {
 if (downloadManager == null) {
   downloadManager = new DownloadManager();
 }
 downloadManager.interceptFlag = false;
 return downloadManager;
  }
  public void DownLoader(Context context, AppDetail download) {
 this.mCOntext= context;
 this.mDownload = download;
 showDownloadDialog();
  }
  /**
   * 检查App更新
   * @param context
   * @param isShowMsg
   * 是否显示提示消息
   */
  public void checkAppUpdate(Context context, final boolean isShowMsg,final boolean notmain) {
 this.mCOntext= context;
 getCurrentVersion(mContext);
 if (isShowMsg) {
   if (mProDialog == null)
 mProDialog = ProgressDialog.show(mContext, null, "正在检测,请稍后...",true, true);
   else if (mProDialog.isShowing()|| (latestOrFailDialog != null && latestOrFailDialog.isShowing()))
 return;
 }
 final Handler handler = new Handler() {
   public void handleMessage(Message msg) {
 // 进度条对话框不显示 - 检测结果也不显示
 if (mProDialog != null && !mProDialog.isShowing()) {
   return;
 }
 // 关闭并释放释放进度条对话框
 if (isShowMsg && mProDialog != null) {
   mProDialog.dismiss();
   mProDialog = null;
 }
 // 显示检测结果
 if (msg.what == 1) {
   mDownload = (AppDetail) msg.obj;
   if (mDownload != null) {
  if (curVersionCode 


推荐阅读
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文介绍如何通过SSH协议使用Xshell远程连接到Ubuntu系统。为了实现这一目标,需要确保Ubuntu系统已安装并配置好SSH服务器,并保证网络连通性。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文详细介绍了Java Web应用程序中的过滤器(Filter)功能,包括其作用、实现方式及配置方法。过滤器可以在请求到达目标资源之前对其进行预处理,并在响应返回给客户端之前进行后处理。 ... [详细]
author-avatar
mobiledu2502921033
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有