import java.net.HttpURLConnection;

import java.net.URL;

import java.util.HashMap;

import com.yuxin.mhealth.R;

import com.yuxin.mhealth.http.action.BaseAction;

import com.yuxin.mhealth.ui.BaseActivity;

import com.yuxin.mhealth.utils.DialogUtil;

import com.yuxin.mhealth.utils.SysConstact;

import com.yuxin.mhealth.utils.SysDownloadUtils;

import android.annotation.SuppressLint;

import android.app.AlertDialog;

import android.app.Dialog;

import android.app.AlertDialog.Builder;

import android.content.Context;

import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener;

import android.content.pm.PackageManager.NameNotFoundException;

import android.os.Handler;

import android.os.Message;

/**

 * @description 软件更新





 */

public class UpdateManagerActivity extends BaseActivity {

/* 保存解析的XML信息 */

 HashMap<String, String> mHashMap;

private Context mContext;

@SuppressLint("HandlerLeak")

 private Handler mHandler = new Handler() {

  public void handleMessage(Message msg) {

   switch (msg.what) {

   case 0x003:

    closeProgressDialog();

    // 显示新版本更新对话框

    showNoticeDialog();

    break;

   case 0x004:

    doProgressDialog("当前已经是最新版本!");

    closeProgressDialog();

    break;

   case 0x005:

    doProgressDialog("检查更新失败!");

    closeProgressDialog();

    break;

   default:

    break;

   }

  };

 };

protected void onCreate(android.os.Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  mContext = this;

 };

/**

  * 检测软件更新

  */

 public void checkUpdate() {

  switch (isUpdate()) {

  case 0:

   mHandler.sendEmptyMessage(0x005);

   break;

  case 1:

   // 显示提示对话框

   mHandler.sendEmptyMessage(0x003);

   break;

  case 2:

   mHandler.sendEmptyMessage(0x004);

   break;

  default:

   break;

  }

}

/**

  * 检查软件是否有更新版本

  *

  * @return

  * @throws Exception

  */

 private int isUpdate() {

  // 获取当前软件版本

  int versionCode = getVersionCode(mContext);

  URL url;

// 获取,解析XML文件。 由于XML文件比较小,因此使用DOM方式进行解析

  ParseXmlService service = new ParseXmlService();

  try {

url = new URL(BaseAction.getUploadUrl(this));

   HttpURLConnection con = (HttpURLConnection) url.openConnection();

   mHashMap = service.parseXml(con.getInputStream());

  } catch (Exception e) {

   e.printStackTrace();

  }

  if (null != mHashMap) {

   SysConstact.Log("版本" + mHashMap.get("version"));

   int serviceCode = Integer.valueOf(mHashMap.get("version").trim());

   // 版本判断

   if (serviceCode > versionCode) {

    return 1;

   } else {

    return 2;

   }

  }

  return 0;

 }

/**

  * 获取软件版本号

  *

  * @param context

  *            context

  * @return

  */

 private int getVersionCode(Context context) {

  int versionCode = 0;

  try {

   String packageName = context.getPackageName();

   // 获取软件版本号,对应AndroidManifest.xml下android:versionCode

   versionCode = context.getPackageManager().getPackageInfo(

     packageName, 0).versionCode;

  } catch (NameNotFoundException e) {

   e.printStackTrace();

  }

  return versionCode;

 }

/**

  * 显示软件更新对话框

  */

 private void showNoticeDialog() {

  // 构造对话框

  AlertDialog.Builder builder = new Builder(mContext);

  builder.setTitle(R.string.soft_update_title);

  builder.setMessage(R.string.soft_update_info);

  // 更新

  builder.setPositiveButton(R.string.soft_update_updatebtn,

    new OnClickListener() {

     @Override

     public void onClick(DialogInterface dialog, int which) {

      

      // 显示下载对话框

      DialogUtil.toast(getApplicationContext(), "下载已经开始,可以在通知栏查看进度!");

      SysDownloadUtils.start(getApplicationContext(), mHashMap.get("url").trim(),mHashMap.get("name").trim());

      dialog.dismiss();

     }

    });

  // 稍后更新

  builder.setNegativeButton(R.string.soft_update_later,

    new OnClickListener() {

     @Override

     public void onClick(DialogInterface dialog, int which) {

      dialog.dismiss();

     }

    });

  Dialog noticeDialog = builder.create();

  noticeDialog.show();

 }

}

android 检查软件是否有更新版本的更多相关文章

  1. [转] Android SDK manager 无法获取更新版本列表

      打开这个网址(LINK)就可以看到adt的详细信息. 或者直接在你的eclipse的Help > Install New Software里面add,地址直接输入 https://dl-ss ...

  2. android SDK manager 无法获取更新版本列表【转载】

    http://mirrors.neusoft.edu.cn/eclipse/releases/luna/打开这个网址就可以看到adt的详细信息:  http://developer.android.c ...

  3. android SDK manager 无法获取更新版本的解决办法

    http://mirrors.neusoft.edu.cn/eclipse/releases/luna/打开这个网址就可以看到adt的详细信息:  http://developer.android.c ...

  4. android SDK manager 无法获取更新版本列表

    打开SDK Manager---Tools---Options,填入如下代理和端口,勾选选项也如下. 网址:mirrors.neusoft.edu.cn 端口:80 99%是成功的 参考:http:/ ...

  5. Android Studio实现APK的更新、下载、安装

    先不讲那么多看效果图: 下面来讲解一些更新CODE,原理大家都知道,不废话,直接上代码.里面有一些是我自己做的测试例子,所以大家可以直接删掉就好了 第一个:activity_main.xml < ...

  6. android 更新版本

    1.UpdateManager package com.rfid.util; import java.io.File; import java.io.FileOutputStream; import ...

  7. Android 6.0 7.0 8.0 一个简单的app内更新版本-okgo app版本更新

    登陆时splash初始页调用接口检查app版本.如有更新,使用okGo的文件下载,保存到指定位置,调用Android安装apk. <!-- Android 8.0 (Android O)为了针对 ...

  8. 近期会放出tlplayer for android的更新版本

    tlplayer for android的一次重大更新在近期将会放出,自从去年初的时候放出tlplayer android版本后,一直都没有更新tlplayer,而tlplayer for windo ...

  9. PDF 补丁丁 0.6.0.3413 版发布(修复提取图片问题,增加自动检查软件更新功能)

    新的测试版修复了提取图片旋转方向错误.遇到格式错误的图片后无法继续提取的问题. 另外增加了自动检查软件版本更新的功能(该功能不上传关于用户的任何个人信息,仅向本博客请求静态的版本信息文件,可在“帮助- ...

随机推荐

  1. 使用Aspose将DataTable转Excel

    0.准备工作   1.下载并引入Aspose.Cells 下载Aspose Cells并引入using Aspose.Cells 下面示例中用的是.net 3.0版本的Aspose Cells,编译环 ...

  2. Readis For Windows安装及密码、IP限制

    一.下载与安装Readis Github下载地址:https://github.com/MicrosoftArchive/redis/tags 下载.MSI后下一步安装即可 二.验证安装 1. 在&q ...

  3. Stanford CS224N 第二课: word2vec详细介绍

    word2vec模型 word2vec 模型有两种: Continuous Skip-gram Model 和 Continuous Bag of Words Model (CBOW). 本文主要讲解 ...

  4. poj-3169Layout

    题意 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们的编号是相同的.因为奶牛相当 ...

  5. CANopen--基于DS402协议的伺服电机原点回零模式实现

    硬件:Copley 驱动器ACJ-055-18+Maxon DCX-35L电机 1.原点回零方式简介: 有几种原点回零方法,每种方法建立:原点参考(限位或原点开关转换或编码器索引脉冲)运动方向以及索引 ...

  6. FJUT16级第一周寒假作业题解D题

    题目链接:http://210.34.193.66:8080/vj/Contest.jsp?cid=160#P3 第八集,体能训练 TimeLimit:1000MS  MemoryLimit:128M ...

  7. GeoJSON C#判断某一点是否在某一区域范围之内

    GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式.GeoJSON对象可以表示几何.特征或者特征集合.GeoJSON支持下面几何类型:点 ...

  8. C++中 #include<>与#include""

    #include<> 使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找: #include"" 使用双引号则表示首先在 ...

  9. 仿QQ发语音、图片选择、表情选择demo

    一款仿QQ发语音.图片选择.调用拍照.表情选择的demo git地址:https://github.com/PureLovePeter/pic.git.  喜欢的请 star  star star,共 ...

  10. python爬微信公众号前10篇历史文章(4)-正则表达式RegularExpressionPattern

    正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. Pytho ...