android apk版本更新
来源:互联网 发布:家庭光纤网络布线 编辑:程序博客网 时间:2024/05/22 15:15
一、更新判断
当每次发布新的版本时,都要把服务器对应该应用的的versionCode和versionName修改成最新的值。
因此从服务器获取的versionCode和versionName一定是最新版本对应的versionCode和versionName。
然后根据从服务器获取本应用的最新版本号与用户使用的当前版本号进行比较,来判断是否需要进行版本更新。
可以通过 versionCode 和versionName来判断是否需要进行版本更新:
versionCode:
versionCode是整型值,可直接进行比较,当服务器获取的versionCode大于本地的versionCode,需进行版本更新。
versionName:
根据versionName进行版本比较,最简单的方法就是直接用equals比较是否相同,不相同,需要进行版本更新。
也可以根据点(.)对versionName进行分隔,转成整数再进行比较。
根据点(.)分隔比较版本:
private boolean isUpdate(String version) { boolean ret = false; int[] num = {0, 0, 0}; int[] numLocal = {0, 0, 0}; //获取本地的versionName String loaclVersion = BuildConfig.VERSION_NAME; if (version.contains("V")||version.contains("v")) { version = version.replace("V", ""); version = version.replace("v", ""); } if (version.contains(".")) { String[] split = version.split("\\."); String[] split1 = loaclVersion.split("\\."); for (int i = 0; i < split.length && i < 3; i++) { num[i] = Integer.parseInt(split[i]); } for (int i = 0; i < split1.length && i < 3; i++) { numLocal[i] = Integer.parseInt(split1[i]); } for (int i = 0; i < num.length; i++) { if (num[i] > numLocal[i]) { ret = true; break; } } } return ret; }
获取本地的版本的versionCode和versionName:
versionCode: BuildConfig.VERSION_CODE
versionName:BuildConfig.VERSION_NAME
二、apk下载
private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { //取消下载 case 0: break; //下载完成,安装apk case 1: installApk(); break; //更新下载进度 case 2: long total = msg.arg1; double progress = total * 1.0 / 1024 / 1024; tv_update.setText(String.format("%.2f", progress) + "M/" + update.getSize() + "M"); double count = Double.parseDouble(update.getSize()); progress = progress * 100 / count; progressBar.setProgress((int) (progress)); tv_progress.setText(String.format("%.2f", progress) + "%"); break; } } };
//下载apk文件private void update() { new Thread(new Runnable() { @Override public void run() { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(update.getUrl()).build(); Response response = null; try { response = client.newCall(request).execute(); if (response.isSuccessful()) { InputStream is = response.body().byteStream(); File file = new File(apkpath); FileOutputStream fos = new FileOutputStream(file); byte[] data = new byte[1024]; int len = 0, total = 0; while ((len = is.read(data)) != -1) { if (isCancel) { //取消下载 mHandler.sendEmptyMessage(0); return; } total += len; fos.write(data, 0, len); Log.i("info", "下载apk=" + total); Message message = new Message(); message.what = 2; message.arg1 = total; mHandler.sendMessage(message); } //apk下载完成 mHandler.sendEmptyMessage(1); } } catch (IOException e) { e.printStackTrace(); } finally { if (response != null) { response.body().close(); } } } }).start(); }
三、apk安装
//安装APK文件 public void installApk() { //apkpath为apk安装的全路径 File apkfile = new File(apkpath); if (!apkfile.exists()) { return; } // 通过Intent安装APK文件 Intent i = new Intent(Intent.ACTION_VIEW); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive"); startActivity(i); }
不足之处,希望各位大神能够进行批评和指正,谢谢!
0 0
- android apk版本更新
- android apk版本更新
- Android apk版本更新
- android apk版本更新
- Android 自动检测更新apk版本
- Android之Apk版本更新
- Android APK版本更新下载
- Android apk版本检测及更新
- Android-async-http下载APK版本更新
- Android关于apk版本更新方法
- android apk版本更新,兼容android7.0
- apk的版本更新
- apk提示版本更新
- 模拟APK版本更新
- Android版本检测,更新,安装及运行APK
- Node.js实现android的apk版本更新服务器
- android 7.0 apk版本更新,下载之后自动安装
- Android----- 版本更新和 服务器下载新版本APK并安装
- MyEclipse 2016 CI 1 破解
- 【CF 702E】Analysis of Pathes in Functional Graph(倍增)
- 全栈开发、全能型程序猿养成系列(一)序言
- poj2492A Bug's Life
- 关于java字符串反转的实现
- android apk版本更新
- struts框架入门的第一小程序
- HttpClientUtil
- c++的POD
- 单链表的逆置-C++实现(ok)
- spring无法读取方案文档的解决办法
- MySQL5.7.15安装教程
- 解决 jquery dialog 弹框destroy销毁方法不能把弹出元素设置成初始状态
- hdu2063过山车