- 浏览: 72798 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (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 713转载: Android自动化测试--Espresso框架 ... -
浅谈android中仅仅使用一个TextView实现高仿京东,淘宝各种倒计时
2016-11-01 09:54 1047转载:http://blog.csdn.net/u0130 ... -
利用apktool等工具发编译android apk
2016-10-25 09:15 706这个是我的csdn中的一篇关于android app反编译的文 ... -
Error:Execution failed for task ':app:mergeDebugResources'. > Some file crunchin
2016-10-08 10:30 993向studio中导入微信支付Demo的时候报错了,具体如图: ... -
android studio实用快捷键收集
2016-09-30 17:51 450本人用android studio刚开始,做一下笔记,只适用于 ... -
android中事件分发机制
2016-09-22 11:52 539转载自:http://www.cnblogs.com/linj ... -
一个对sharedpreferences 数据进行加密的开源库
2016-09-18 14:30 617http://www.cnblogs.com/zhaoyanj ... -
LinerLayout滑动后停在顶部
2016-09-18 12:08 648转载自:http://blog.csdn.net/ff2008 ... -
android studio入门知识
2016-09-06 18:11 685http://blog.csdn.net/jdsjlzx/ar ... -
android图片加载OOM解决方案
2016-08-30 15:17 456转载自:http://www.apkbus.com/blog- ... -
android oom连带问题,以及tag错位问题结局方案
2016-08-30 13:48 636http://www.apkbus.com/blog-8430 ... -
android新手指导
2016-08-30 11:59 366http://www.apkbus.com/forum.php ... -
android app自动化测试
2016-07-12 15:51 484android sdk的lib目录下有个monkeyrunne ... -
利用BadgeView实现数字提醒效果
2016-07-06 16:38 933BadgeView是一个第三方开源库, github地址:ht ... -
android端图片缓存实现,特别适用于listview来回滚动
2016-07-02 10:40 659转载自: http://www.open-open.com/l ... -
android文件存储文本
2016-05-17 17:26 463/** * 写入文本 */ private void ... -
android listView的BaseAdapter的抽取
2016-05-12 11:52 622/** * BaseAdapter的抽取 * @autho ... -
android全局异常捕获并发送异常到邮箱
2016-05-12 11:41 1083public class AppException exten ... -
android第三方框架xutils的使用
2016-05-12 11:35 814这里写一些网络请求的相关 //初始化相关参数和对象 publi ... -
android端从相册或者拍照读取图片
2016-04-16 16:45 791android端从相册或者拍照读取图片,见demo
相关推荐
Android版本更新实用的Demo,主要用到了HttpURLConnection、Xml PULL解析(其中也提供了JSON格式的解析)、丰富的辅助类、多线程下载与断点续传,界面虽然丑点但比较实用。如果你下载了该资源无法运行的话,别急着...
Android增量更新简单描述: http://blog.csdn.net/yangzhaomuma/article/details/50767966 简单的说,就是在有一个旧版本A的情况下,想在这个基础上更新一个新版本B。那么,我们不需要下载整个B,只需要下载A与B的差...
获取服务器端XML文件,解析XML获取到最新版本号,与当前软件版本号进行对比,发现不一样则提示更新。 涉及到内容点: 1.远程获取XML并分析XML内容 2.远程下载文件并打开 3.下载时通知栏显示下载进度
Android应用从服务器获取新版本并更新的小DEMO,主要流程为,获取服务器侧版本信息,获取当前应用版本信息,比较,需要更新则从服务器下载安装包,安装,结束流程,若无需更新直接结束流程
安卓端版本更新的,判断网络连接的工具类,带有demo使用的方法
android版本更新、dom解析xml、新版本下载与安装、web端项目
android端 apk反编译神器 找了好久都没有找到最新的 终于科学上网下载了一个最新版本 跟大家交个朋友 解压直接可用!!! jadx用过都说好 资源持续更新中!!!!! 免费版本 :...
获取服务器端XML文件,解析XML获取到最新版本号,与当前软件版本号进行对比,发现不一样则提示更新。 涉及到内容点: 1.远程获取XML并分析XML内容 2.远程下载文件并打开 3.下载时通知栏显示下载进度
android工程: 为完整的项目工程,eclipse可直接导入 里面包含完整的android版本校验,下载,安装代码 web端应用 为web工程 解压后可把mobilesafe文件夹拷贝到tomcat\webapps目录中
android端 apk反编译神器 超级好用 exe文件打开选中需要反编译的apk即可自动反编译 而且还有反混淆功能 找了好久都没有找到最新的 终于下载了一个最新版本 跟大家交个朋友 解压直接可用!!! jadx用过都说好 资源...
android端 apk反编译神器 超级好用 exe文件打开选中需要反编译的apk即可自动反编译 而且还有反混淆功能 找了好久都没有找到最新的 终于下载了一个最新版本 跟大家交个朋友 解压直接可用!!! jadx用过都说好 资源...
很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新。得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单。用了最简单的技术。包括客户端和服务器端。服务器端的返回可以根据...
android端 apk反编译神器 找了好久都没有找到最新的 终于科学上网下载了一个最新版本 5积分跟大家交个朋友 解压直接可用!!! jadx用过都说好 资源持续更新中!!!!!
O2OA企业信息化办公平台Android端原始码 O2OA平台Android客户端,最低支持Android版本4.4 Android KitKat,编程语言主要使用kotlin。 环境安装 请使用最新版本的Android Studio进行导入编译,编译的Android SDK版本...
android端 apk反编译神器 找了好久都没有找到最新的 终于下载了一个最新版本 跟大家交个朋友 解压直接可用!!! jadx用过都说好 资源持续更新中! 免费版本 :...
justified, 带两端对齐文本的androidsdk或者 EditText 合法的TextView和 EditTextAndroid或者 EditText,具有对 API> = 10 ( Gingerbread 和更新版本)的两端对齐文本。用法使用 justified JustifiedTextView
android端 apk反编译神器 找了好久都没有找到最新的 终于上网下载了一个最新版本 5积分跟大家交个朋友 解压直接可用!!! jadx用过都说好 资源持续更新中!!!!! 免费版本 :...
一个通用的Android端弹窗管理框架,内部维护弹窗优先级队列 具备弹窗管理扩展功能 整合Dialog,PoupoWindow,悬浮Widget,透明Webview,Toast,SnackBar,无需再为繁琐的业务弹窗逻辑所困扰如何添加依赖只需要两行代码轻松...