Android APP通过浏览器下载最新版本

首先判断app本地的版本和服务器上的版本是否是一样的。如果有新版本,那么就进行更新。
需要服务器端提供两个接口

  1. 获取服务器端apk版本号
  2. apk地址

1.获取当前app的版本号

/*** 获取版本号** @throws PackageManager.NameNotFoundException*/public static String getVersionName(Context context) throws PackageManager.NameNotFoundException {// 获取packagemanager的实例PackageManager packageManager = context.getPackageManager();// getPackageName()是你当前类的包名,0代表是获取版本信息PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);String version = packInfo.versionName;return version;}

2.根据版本号名称判断版本高低
0代表相等,1代表version1大于version2,-1代表version1小于version2

  /*** 版本号比较*0代表相等,1代表version1大于version2,-1代表version1小于version2* @param version1* @param version2* @return*/public static int compareVersion(String version1, String version2) {if (version1.equals(version2)) {return 0;}String[] version1Array = version1.split("\\.");String[] version2Array = version2.split("\\.");int index = 0;// 获取最小长度值int minLen = Math.min(version1Array.length, version2Array.length);int diff = 0;// 循环判断每位的大小while (index < minLen&& (diff = Integer.parseInt(version1Array[index])- Integer.parseInt(version2Array[index])) == 0) {index++;}if (diff == 0) {// 如果位数不一致,比较多余位数for (int i = index; i < version1Array.length; i++) {if (Integer.parseInt(version1Array[i]) > 0) {return 1;}}for (int i = index; i < version2Array.length; i++) {if (Integer.parseInt(version2Array[i]) > 0) {return -1;}}return 0;} else {return diff > 0 ? 1 : -1;}}

3.从服务器获取最新版本号
http工具类(HttpURLTools)可参照Http工具类

Handler handlerapkVersion = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Bundle data = msg.getData();String strRet = data.getString("value");if (strRet == null) {UIHelper.showToast(LoginActivity.this, "服务器异常!");} else {try {JSONObject json = new JSONObject(strRet);String apkVersion = json.getString("versionnumber");String apkVersion1 = UIHelper.getVersionName(LoginActivity.this);//获取当前app的版本号int result = UIHelper.compareVersion(apkVersion1,apkVersion);if (result == -1) { // 不是最新版本showNoticeDialog();}} catch (JSONException | NameNotFoundException e) {e.printStackTrace();}}}};Runnable apkVersionTask = new Runnable() {@Overridepublic void run() {String strRet = null;try {strRet = HttpURLTools.sendHttpGet(GenBDB.strBaseURL+ "apk/apkVersion");//从服务器获取最新版本号(接口)} catch (Exception e) {e.printStackTrace();}Message msg = new Message();Bundle data = new Bundle();data.putString("value", strRet);msg.setData(data);handlerapkVersion.sendMessage(msg);}};

4.弹出dialog提示更新
样式可以根据自己的需求设计,可参照Android Dialog超简单自定义布局

 private void showNoticeDialog() {android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(LoginActivity.this);// Builder,可以通过此builder设置改变AleartDialog的默认的主题样式及属性相关信息builder.setTitle("软件版本更新");String updateMsg = "有最新的软件包,请下载!";builder.setMessage(updateMsg);builder.setPositiveButton("下载", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();openBrowserUpdate(GenBDB.strBaseURL+ "gfjhgl.apk");}});builder.setNegativeButton("以后再说", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});Dialog noticeDialog = builder.create();noticeDialog.show();}

5.调用浏览器下载

/*** 打开浏览器更新下载新版本apk* @param apkUrl    apk地址*/private void openBrowserUpdate(String apkUrl) {Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");Uri apk_url = Uri.parse(apkUrl);intent.setData(apk_url);startActivity(intent);//打开浏览器}

部分内容来自android 实现app内部检测最新版本 自动升级到最新版本
Android中打开浏览器更新App的最新版本

Android APP通过浏览器下载最新版本相关推荐

  1. 下载最新版本火狐浏览器,并且下载geckodriver.exe

    2.在火狐浏览器中执行,需要下载最新版本火狐浏览器,并且下载geckodriver.exe,放入火狐安装目录,把目录加入path变量中即可. 第二种办法当然就是使用限制的selenium3.0的版本, ...

  2. 转载:微信Windows版-无效的wechatwin.dll文件errcode:126,点击“确定”下载最新版本

    昨天更新的微信Windows版本的3.7.5.31,打开微信提示"无效的wechatwin.dll文件errcode:126,点击"确定"下载最新版本". Wi ...

  3. 云服务器linux(centos)系统下载最新版本R语言

    1.从R语言官网下载最新版本的R语言压缩包.这里下载的为R-4.2.2.tar.gz 2.对R-4.2.2.tar.gz进行解压   tar -zxf R-4.2.2.tar.gz    并建立一个文 ...

  4. 淘宝、京东、天猫商品名称数据集下载最新版本。包括中药、化学器材、摄影、动物、酒水、办公事务。

    淘宝.京东.天猫商品名称数据集下载最新版本.包括中药.化学器材.摄影.动物.酒水.办公事务. 第一类 用于工业.科学.摄影.农业.园艺.森林的化学品,未加工人造合成树脂,未加工塑料物质,肥料,灭火用合 ...

  5. typora显示版本过期,请下载最新版本,可是最新版本84块钱,咋办?

    typora显示版本过期,请下载最新版本,可是最新版本84块钱,咋办? 问题一–版本过低 方法有很多种,我就介绍一下我的方法吧 像我电脑的typora就出现了这样的问题,一个是typora版本过低,要 ...

  6. 安卓最新版本_tft云顶之弈下载最新版本下载-tft云顶之弈下载最新版本安卓 v10.20.3376669...

    tft云顶之弈下载最新版本上面的一些内容其实对于很多的玩家来说是十分完美的.当你充分发挥了自己的策略与实力之后,其实最终游戏中所获得的快感享受也是蛮丰富的.这种玩法其实是非常讲究策略的,所以你在对战竞 ...

  7. PROTEUS最新版本下载CSDN_最强大冒险二游戏下载最新版本下载_抖音最强大冒险二测试版游戏下载最新版本 v1.0...

    最强大冒险二游戏下载最新版本是一款趣味冒险的游戏,各种经历的人生,体验到无限的乐趣分享,超刺激的挑战玩法,各种冒险的经历过程,每次都能感受到最佳的刺激表现,界面的功能,对于你们的帮助作用也是相当的大, ...

  8. 2020最新安卓版本是多少_百度浏览器2020最新版本下载,百度浏览器2020官方最新版本下载安装 v7.19.13.0...

    百度浏览器2020官方最新版本是全新的手机浏览器,可为广大用户提供多种个性化服务,一键搜索直达,获取自己想要的信息,各网页消息每日更新,以便于为大家提供更好的信息化服务,还可自由设置多种浏览形式,日间 ...

  9. Visual Studio 2017 RC 下载 最新版本的发行说明

    我们非常荣幸地宣布 Visual Studio 2017 RC 现已推出! 此新版本包括我们最新的功能创新和改进. 注意 这里是 Visual Studio 2017 最新版本的发行说明. 下载:Vi ...

最新文章

  1. struts2漏洞_十大常见web漏洞——命令执行漏洞
  2. RabbitMQ简单队列模式
  3. 【加权并查集】bzoj 4602 齿轮
  4. stylus导入时 报错These relative modules were not found
  5. MSP430F5XXX中的ADC12使用
  6. C#中的is、as及转换
  7. TextView 内容居中
  8. diskgenius 单文件_电脑数据恢复及分区管理软件DiskGenius 英文专业版
  9. gcc可以编译python程序吗_GCC编译C语言程序完整演示
  10. 多分类决策树 r语言_R语言——决策树模型的相关可视化
  11. 京东白条技术架构进化分享,这篇总算是讲清楚了 ~
  12. 网站服务器无法打开ie,internet explorer无法打开站点怎么办
  13. 为什么计算机会出现两个用户,Win7登录时有2个账户|为什么电脑开机时有二个账户...
  14. 网络分层的真实含义是什么
  15. Siege——多线程编程最佳实例
  16. 计算机二类中文核心期刊,我国科学院计算机网络信息中心在学研究生年终考核奖评定办法(试行).doc...
  17. 6、RH850 F1 AD转换功能和配置
  18. 数据集是什么?去哪找?
  19. 如何查看GitHub仓库的创建时间
  20. moco入门到实践,手把手搭建一套全面的moco本地服务

热门文章

  1. 产品经理硬技能——绘制用户旅程图
  2. crtl+alt+up快捷键失效被占用
  3. 联想微型计算机主机怎么打开,联想台式机怎么进入bios【详细步骤】
  4. 每个 Python 开发者必备的5款 VScode 拓展工具包!
  5. 5G/4G/3G无线图传产品的发展历史和技术演进
  6. 四川计算机专业中职学校排名,四川十大中职学校排名
  7. Java顺时针打印矩阵
  8. 鲁大师9月新机流畅榜:OPPO ColorOS 12跑分亮相!
  9. Java学习总结与体会,从小菜开始
  10. SLAM知识点——BA算法原理