- 浏览: 75927 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (101)
- Android (45)
- java中多线程的实现 (1)
- Runnable (2)
- Thread (1)
- TCP网络编程 (1)
- PHP (1)
- java (4)
- JDBC (1)
- oauth登录 (1)
- 中文乱码 (1)
- Ajax (1)
- web (2)
- Mysql (2)
- HTML5 (0)
- HTML5 (1)
- entity not found (1)
- JQuery (2)
- 使用jsp和Servlet实现一个验证码 (1)
- 验证码 (1)
- 异常 (1)
- webService (2)
- not insert异常 (1)
- JAVAmail (1)
- 选中分享 (1)
- 控件 (1)
- 方法 (1)
- listView (1)
- android控件 (1)
- jqueryMobile (1)
- servlet开发中文乱码解决方案 (1)
- servlet开发中文乱码解决方案 (1)
- web文本框初始提示 (1)
- web文本框初始提示 (0)
- xml (1)
- java中的加密技术 (1)
- 互联网 (1)
- mysql数据库 (1)
- java单例模式 (1)
- gson转json (1)
最新评论
整个思路,先判断服务端当前版本是不是高于本地版本,高的话可以选择更新,如果没有新版本,则提示用户当前是最新版本
/**
* getVersionName(获取app版本号)
*
* @Title: getVersionName
* @Description: TODO
* @param @param ct
* @param @return 设定文件
* @return String 返回类型
* @throws
*/
public static String getVersionName(Context ct) {
String versionName = null;
PackageManager packageManager = ct.getPackageManager();
try {
PackageInfo packInfo = packageManager.getPackageInfo(
ct.getPackageName(), 0);
versionName = packInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return versionName;
}
/**
* isUpdate(是否更新)
*
* @Title: isUpdate
* @Description: TODO
* @param @param oldVersionName
* @param @param newVersionName
* @param @return 设定文件
* @return boolean 返回类型
* @throws
*/
public static boolean isUpdate(String newVersionName, String oldVersionName) {
boolean result = false;
try {
String n[] = newVersionName.split("\\.");
String o[] = oldVersionName.split("\\.");
for (int i = 0; i < n.length; i++) {
if (Integer.parseInt(n[i]) > Integer.parseInt(o[i])) {
return true;
}
if (Integer.parseInt(n[i]) < Integer.parseInt(o[i])) {
return false;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
这里用xutils做的网络请求
public void checkUpdate() {
new HttpUtils().send(HttpMethod.POST, RequestPath.ACTION_UPDATE,
new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
try {
JSONObject jsonObject = new JSONObject(arg0.result);
if (jsonObject.getInt("code") == 1) {
Gson gson = new Gson();
final VersionUpdateDTO version = gson.fromJson(
jsonObject.getJSONObject("message")
.toString(),
VersionUpdateDTO.class);
String oldVersion = Utils
.getVersionName(ctx);
if (Utils.isUpdate(version.getBanbenNum(),
oldVersion)) {
update(version.getDownLoadUrl());
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
private AppUpdateDialog appUpdateDialog;
private ProgressBar progressBar;
private TextView progressText;
/**
* @param url
* 更新APP
*/
public void update(String url) {
String target = Utils.getSDPath() + "/download";
String log = Utils.getSDPath() + "/log";
File file = new File(target);
File fileLog = new File(log);
if (fileLog.exists()) {
Utils.deleteFile(fileLog);
}
if (!file.exists()) {
file.mkdirs();
} else {
Utils.deleteFile(file);
file.mkdirs();
}
target = target + "/" + Utils.getFileName(url);
if (appUpdateDialog == null) {
appUpdateDialog = new AppUpdateDialog(ctx);
progressBar = (ProgressBar) appUpdateDialog
.findViewById(R.id.progress);
progressText = (TextView) appUpdateDialog
.findViewById(R.id.progressText);
}
try {
appUpdateDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
new HttpUtils().download(url, target, true, true,
new RequestCallBack<File>() {
@Override
public void onStart() {
super.onStart();
DebugTools.d("开始下载");
}
@Override
public void onLoading(long total, long current,
boolean isUploading) {
super.onLoading(total, current, isUploading);
progressBar.setMax((int) total);
progressBar.setProgress((int) current);
progressText.setText("正在更新"
+ String.valueOf((int) (((double) current / total) * 100))
+ "%");
}
@Override
public void onSuccess(ResponseInfo<File> arg0) {
appUpdateDialog.dismiss();
File file = arg0.result;
Utils.install(ctx, file.toString());
}
@Override
public void onFailure(HttpException arg0, String arg1) {
if (appUpdateDialog != null) {
if (appUpdateDialog.isShowing()) {
appUpdateDialog.dismiss();
}
}
UIHelper.toastBar(ctx, "更新失败!errorcode="
+ arg0.getExceptionCode());
}
});
}
/**
* getVersionName(获取app版本号)
*
* @Title: getVersionName
* @Description: TODO
* @param @param ct
* @param @return 设定文件
* @return String 返回类型
* @throws
*/
public static String getVersionName(Context ct) {
String versionName = null;
PackageManager packageManager = ct.getPackageManager();
try {
PackageInfo packInfo = packageManager.getPackageInfo(
ct.getPackageName(), 0);
versionName = packInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return versionName;
}
/**
* isUpdate(是否更新)
*
* @Title: isUpdate
* @Description: TODO
* @param @param oldVersionName
* @param @param newVersionName
* @param @return 设定文件
* @return boolean 返回类型
* @throws
*/
public static boolean isUpdate(String newVersionName, String oldVersionName) {
boolean result = false;
try {
String n[] = newVersionName.split("\\.");
String o[] = oldVersionName.split("\\.");
for (int i = 0; i < n.length; i++) {
if (Integer.parseInt(n[i]) > Integer.parseInt(o[i])) {
return true;
}
if (Integer.parseInt(n[i]) < Integer.parseInt(o[i])) {
return false;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
这里用xutils做的网络请求
public void checkUpdate() {
new HttpUtils().send(HttpMethod.POST, RequestPath.ACTION_UPDATE,
new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
try {
JSONObject jsonObject = new JSONObject(arg0.result);
if (jsonObject.getInt("code") == 1) {
Gson gson = new Gson();
final VersionUpdateDTO version = gson.fromJson(
jsonObject.getJSONObject("message")
.toString(),
VersionUpdateDTO.class);
String oldVersion = Utils
.getVersionName(ctx);
if (Utils.isUpdate(version.getBanbenNum(),
oldVersion)) {
update(version.getDownLoadUrl());
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
private AppUpdateDialog appUpdateDialog;
private ProgressBar progressBar;
private TextView progressText;
/**
* @param url
* 更新APP
*/
public void update(String url) {
String target = Utils.getSDPath() + "/download";
String log = Utils.getSDPath() + "/log";
File file = new File(target);
File fileLog = new File(log);
if (fileLog.exists()) {
Utils.deleteFile(fileLog);
}
if (!file.exists()) {
file.mkdirs();
} else {
Utils.deleteFile(file);
file.mkdirs();
}
target = target + "/" + Utils.getFileName(url);
if (appUpdateDialog == null) {
appUpdateDialog = new AppUpdateDialog(ctx);
progressBar = (ProgressBar) appUpdateDialog
.findViewById(R.id.progress);
progressText = (TextView) appUpdateDialog
.findViewById(R.id.progressText);
}
try {
appUpdateDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
new HttpUtils().download(url, target, true, true,
new RequestCallBack<File>() {
@Override
public void onStart() {
super.onStart();
DebugTools.d("开始下载");
}
@Override
public void onLoading(long total, long current,
boolean isUploading) {
super.onLoading(total, current, isUploading);
progressBar.setMax((int) total);
progressBar.setProgress((int) current);
progressText.setText("正在更新"
+ String.valueOf((int) (((double) current / total) * 100))
+ "%");
}
@Override
public void onSuccess(ResponseInfo<File> arg0) {
appUpdateDialog.dismiss();
File file = arg0.result;
Utils.install(ctx, file.toString());
}
@Override
public void onFailure(HttpException arg0, String arg1) {
if (appUpdateDialog != null) {
if (appUpdateDialog.isShowing()) {
appUpdateDialog.dismiss();
}
}
UIHelper.toastBar(ctx, "更新失败!errorcode="
+ arg0.getExceptionCode());
}
});
}
发表评论
-
Android自动化测试--Espresso框架使用
2016-11-01 10:02 759转载: Android自动化测试--Espresso框架 ... -
浅谈android中仅仅使用一个TextView实现高仿京东,淘宝各种倒计时
2016-11-01 09:54 1090转载:http://blog.csdn.net/u0130 ... -
利用apktool等工具发编译android apk
2016-10-25 09:15 748这个是我的csdn中的一篇关于android app反编译的文 ... -
Error:Execution failed for task ':app:mergeDebugResources'. > Some file crunchin
2016-10-08 10:30 1036向studio中导入微信支付Demo的时候报错了,具体如图: ... -
android studio实用快捷键收集
2016-09-30 17:51 492本人用android studio刚开始,做一下笔记,只适用于 ... -
android中事件分发机制
2016-09-22 11:52 587转载自:http://www.cnblogs.com/linj ... -
一个对sharedpreferences 数据进行加密的开源库
2016-09-18 14:30 655http://www.cnblogs.com/zhaoyanj ... -
LinerLayout滑动后停在顶部
2016-09-18 12:08 685转载自:http://blog.csdn.net/ff2008 ... -
android studio入门知识
2016-09-06 18:11 713http://blog.csdn.net/jdsjlzx/ar ... -
android图片加载OOM解决方案
2016-08-30 15:17 489转载自:http://www.apkbus.com/blog- ... -
android oom连带问题,以及tag错位问题结局方案
2016-08-30 13:48 676http://www.apkbus.com/blog-8430 ... -
android新手指导
2016-08-30 11:59 403http://www.apkbus.com/forum.php ... -
android app自动化测试
2016-07-12 15:51 520android sdk的lib目录下有个monkeyrunne ... -
利用BadgeView实现数字提醒效果
2016-07-06 16:38 975BadgeView是一个第三方开源库, github地址:ht ... -
android端图片缓存实现,特别适用于listview来回滚动
2016-07-02 10:40 698转载自: http://www.open-open.com/l ... -
android文件存储文本
2016-05-17 17:26 504/** * 写入文本 */ private void ... -
android listView的BaseAdapter的抽取
2016-05-12 11:52 658/** * BaseAdapter的抽取 * @autho ... -
android全局异常捕获并发送异常到邮箱
2016-05-12 11:41 1123public class AppException exten ... -
android第三方框架xutils的使用
2016-05-12 11:35 849这里写一些网络请求的相关 //初始化相关参数和对象 publi ... -
android端从相册或者拍照读取图片
2016-04-16 16:45 827android端从相册或者拍照读取图片,见demo
相关推荐
在Android应用开发中,版本更新是必不可少的一部分,它确保用户能够及时获取到应用程序的最新功能和修复的安全漏洞。本文将详细解析如何实现一个Android APP版本更新功能,特别是结合进度条来实时显示下载进度。 ...
在Android平台上,实现应用的版本自动更新是一项重要的功能,它能确保用户始终使用到最新、最安全的软件版本。这个过程通常涉及到服务器端的更新管理、客户端的检测和下载以及安装流程。以下将详细讲解这一过程中的...
在Android开发中,版本更新是确保用户始终使用最新、最安全的应用程序的重要环节。这个"Android版本更新项目源码"提供了一个自动更新代码的解决方案,开发者可以将其集成到自己的应用中,实现无缝的后台更新过程。...
Android应用的版本更新通常涉及到两个主要部分:客户端(用户手机上的应用程序)和服务器端(提供更新信息的服务器)。当客户端检测到有新版本可用时,会提示用户下载并安装。 二、XML配置文件的作用 在这个方案中...
在Android应用开发中,消息推送和版本更新是两个至关重要的功能。消息推送允许开发者与用户保持实时互动,而版本更新则确保用户始终使用最新、最安全的软件版本。本文将详细探讨这两个主题,并提供实现它们的基本...
因此,增量更新Android端SO库成为了解决这个问题的有效方案。 增量更新的基本思想是只下载和替换自上次版本以来发生变化的部分,而不是重新下载整个库。这一过程涉及到多个步骤和技术: 1. **版本控制**:首先,每...
在Android平台上,版本更新是一个重要的功能,它允许用户获取应用的最新修复、增强性能和新特性。本篇文章将深入探讨如何实现从服务器到客户端的Android版本自动更新机制。 首先,我们要理解版本更新的基本流程,这...
在Android平台上,版本更新是确保应用始终具备最新特性和安全性的关键环节。在这个过程中,开发者通常需要编写服务(Service)来检测当前应用的版本,并与服务器进行通信,以获取最新的软件版本信息。当有新版本可用...
本文将详细探讨如何实现“android 使用服务器进行版本更新”的功能,包括关键的技术点和步骤。 首先,我们要理解版本更新的基本流程。当用户打开应用时,我们需要检查服务器上是否存在新版本。这通常通过HTTP或...
在Android应用开发中,版本更新是维持应用活力和安全性的关键环节。本文将详细探讨如何在Android系统中实现版本检测、下载以及安装的过程,确保用户能够及时获取到最新的应用版本。 首先,我们要实现版本检测。这...
下面我们将详细介绍如何在Android不更新版本的情况下修改应用图标。 1. **动态加载图标** - **使用自定义启动器**: 开发者可以创建一个自定义的Activity启动器,该启动器会在应用程序启动时动态加载并设置新的图标...
Android版本更新实用的Demo,主要用到了HttpURLConnection、Xml PULL解析(其中也提供了JSON格式的解析)、丰富的辅助类、多线程下载与断点续传,界面虽然丑点但比较实用。如果你下载了该资源无法运行的话,别急着...
总结起来,这个DEMO涵盖了Android应用自动更新的整个流程,包括与服务器交互、版本比较、下载安装等关键步骤。开发者可以通过这个示例学习如何在自己的应用中实现这一功能,从而提高应用的更新效率和用户体验。同时...
在IT行业中,版本更新是软件开发过程中的一个重要环节,它涉及到新功能的添加、错误修复、性能优化等。本Demo主要展示了如何实现一个简洁而有效的版本更新、下载和安装流程,这对于任何应用程序的持续改进和用户体验...
综上所述,通过使用JSON解析的在线版本更新系统,开发者可以方便地为Android应用提供及时的更新,确保用户始终运行最新、最稳定的应用版本。同时,要注意安全性和签名问题,确保更新过程的可靠性和用户体验。
这个过程需要在Android端实现,通常涉及C/C++编写的SO(Shared Object)库,因为处理二进制级别的操作可能需要更高的效率和性能。 在Android项目中,开发者会封装一个本地库(SO库),这个库包含了合并差分包的逻辑...
这通常会发送当前应用的版本号,服务器端会比较此版本号与最新可用版本,返回更新信息。 2. **下载更新包**:一旦检测到新版本,应用会提示用户下载更新。下载过程可以在后台进行,以便用户可以继续使用应用。通常...
Android增量更新简单描述: http://blog.csdn.net/yangzhaomuma/article/details/50767966 简单的说,就是在有一个旧版本A的情况下,想在这个基础上更新一个新版本B。那么,我们不需要下载整个B,只需要下载A与B的差...
12. **版本更新接口设计**:设计良好的API接口可以使服务器端轻松地更新和推送版本信息。 通过分析这个压缩包,开发者可以学习如何在Android应用中实现版本检测和自动更新功能,从而提升应用的更新率和用户体验。...
在Android应用开发中,服务器端交互是至关重要的一个环节,它涉及到客户端与服务器之间的数据交换,使得用户可以在移动设备上实现各种功能,如登录、注册、数据同步等。本资源提供的"Android服务器端交互服务器端...