Android 版本更新
来源:互联网 发布:进入淘宝 编辑:程序博客网 时间:2024/06/03 13:15
项目地址「AppUpdateDemo」
Android 版本更新
目录
- 功能介绍
- 效果图与示例 apk
- Gradle 依赖
- 自定义接口协议
- 使用默认的接口协议
- License
功能介绍
- [x] 实现app版本更新
- [x] 自定义接口协议,可以不改变现有项目的协议就能使用
- [x] 支持get,post请求
- [x] 支持进度显示,对话框进度条,和通知栏进度条展示
- [x] 支持后台下载
- [x] 支持强制更新
- [x] 支持简单主题色配置(可以自动从顶部图片提取主色)
- [x] 完美支持android7.0
效果图与示例 apk
点击下载 Demo.apk 或扫描下面的二维码安装
Gradle 依赖
dependencies { compile 'com.qianwen:update-app:3.2.3'}
自定义接口协议
自定义接口协议,根据自己项目的接口,自己实现 parseJson 方法
Map<String, String> params = new HashMap<String, String>(); params.put("key1", "value1"); params.put("key2", "value2"); params.put("key3", "value3"); params.put("key4", "value4"); new UpdateAppManager .Builder() //当前Activity .setActivity(this) //实现httpManager接口的对象 .setHttpManager(new UpdateAppHttpUtil()) //设置请求方式 默认get, .setPost(false) //更新地址 .setUpdateUrl("https://raw.githubusercontent.com/WVector/AppUpdateDemo/master/json/json.txt") //添加自定义参数 .setParams(params) //设置头部 .setTopPic(R.mipmap.top_5) //设置主题色 .setThemeColor(0xff034ea0) .build() //检测是否有新版本 .checkNewApp(new UpdateCallback() { /** * 解析json,自定义协议 * * @param json 服务器返回的json * @return UpdateAppBean */ @Override protected UpdateAppBean parseJson(String json) { UpdateAppBean updateAppBean = new UpdateAppBean(); try { JSONObject jsonObject = new JSONObject(json); updateAppBean //是否更新Yes,No .setUpdate(jsonObject.getString("update")) //新版本号 .setNew_version(jsonObject.getString("new_version")) //下载地址 .setApk_file_url(jsonObject.getString("apk_file_url")) //大小 .setTarget_size(jsonObject.getString("target_size")) //更新内容 .setUpdate_log(jsonObject.getString("update_log")) //是否强制更新 .setConstraint(jsonObject.getBoolean("constraint")); } catch (JSONException e) { e.printStackTrace(); } return updateAppBean; } /** * 有新版本 * * @param updateApp 新版本信息 * @param updateAppManager app更新管理器 */ @Override public void hasNewApp(UpdateAppBean updateApp, UpdateAppManager updateAppManager) { updateAppManager.showDialog(); } /** * 网络请求之前 */ @Override public void onBefore() { CProgressDialogUtils.showProgressDialog(MainActivity.this); } /** * 网路请求之后 */ @Override public void onAfter() { CProgressDialogUtils.cancelProgressDialog(MainActivity.this); } /** * 没有新版本 */ @Override public void noNewApp() { Toast.makeText(MainActivity.this, "没有新版本", Toast.LENGTH_SHORT).show(); } });
使用默认的接口协议
接口说明
1,和服务器交互请求参数
1,appkey app的唯一标志appkey可以在manifest文件中配置,也可以在代码中添加xml配置如下:
<meta-data android:name="UPDATE_APP_KEY" android:value="ab55ce55Ac4bcP408cPb8c1Aaeac179c5f6f"/>
2,version 版本号,工具自动添加(服务器判断客户端传过来的version和服务器存的最新的version,决定是否更新)
3, 服务器app后台管理界面(下次放出服务器的代码)
2, 服务器的返回json格式
1,有新版本
{ "update": "Yes",//有新版本 "new_version": "0.8.3",//新版本号 "apk_file_url": "https://raw.githubusercontent.com/WVector/AppUpdateDemo/master/apk/app-debug.apk", //apk下载地址 "update_log": "1,添加删除信用卡接口\r\n2,添加vip认证\r\n3,区分自定义消费,一个小时不限制。\r\n4,添加放弃任务接口,小时内不生成。\r\n5,消费任务手动生成。",//更新内容 "target_size": "5M",//apk大小 "constraint": false//是否强制更新}
2,没有新版本
{ "update": "No",//没有新版本}
1,根据自己项目使用的网络框架,自己实现HttpManager接口,
class UpdateAppHttpUtil implements HttpManager { /** * 异步get * * @param url get请求地址 * @param params get参数 * @param callBack 回调 */ @Override public void asyncGet(@NonNull String url, @NonNull Map<String, String> params, @NonNull final Callback callBack) { OkHttpUtils.get() .url(url) .params(params) .build() .execute(new StringCallback() { @Override public void onError(Call call, Response response, Exception e, int id) { callBack.onError(validateError(e, response)); } @Override public void onResponse(String response, int id) { callBack.onResponse(response); } }); } /** * 异步post * * @param url post请求地址 * @param params post请求参数 * @param callBack 回调 */ @Override public void asyncPost(@NonNull String url, @NonNull Map<String, String> params, @NonNull final Callback callBack) { OkHttpUtils.post() .url(url) .params(params) .build() .execute(new StringCallback() { @Override public void onError(Call call, Response response, Exception e, int id) { callBack.onError(validateError(e, response)); } @Override public void onResponse(String response, int id) { callBack.onResponse(response); } }); } /** * 下载 * * @param url 下载地址 * @param path 文件保存路径 * @param fileName 文件名称 * @param callback 回调 */ @Override public void download(@NonNull String url, @NonNull String path, @NonNull String fileName, @NonNull final FileCallback callback) { OkHttpUtils.get() .url(url) .build() .execute(new FileCallBack(path, fileName) { @Override public void inProgress(float progress, long total, int id) { super.inProgress(progress, total, id); callback.onProgress(progress, total); } @Override public void onError(Call call, Response response, Exception e, int id) { callback.onError(validateError(e, response)); } @Override public void onResponse(File response, int id) { callback.onResponse(response); } @Override public void onBefore(Request request, int id) { super.onBefore(request, id); callback.onBefore(); } }); } }
3,客户端检测是否有新版本,并且更新下载
String updateUrl = "https://raw.githubusercontent.com/WVector/AppUpdateDemo/master/json/json.txt"; new UpdateAppManager .Builder() //当前Activity .setActivity(this) //实现httpManager接口的对象 .setHttpManager(new UpdateAppHttpUtil()) //更新地址 .setUpdateUrl(updateUrl) .build() //检测是否有新版本 .checkNewApp(new UpdateCallback() { /** * 有新版本 * @param updateApp 新版本信息 * @param updateAppManager app更新管理器 */ @Override public void hasNewApp(UpdateAppBean updateApp, UpdateAppManager updateAppManager) { updateAppManager.showDialog(); } /** * 网络请求之前 */ @Override public void onBefore() { CProgressDialogUtils.showProgressDialog(MainActivity.this); } /** * 网路请求之后 */ @Override public void onAfter() { CProgressDialogUtils.cancelProgressDialog(MainActivity.this); } /** * 没有新版本 */ @Override public void noNewApp() { Toast.makeText(MainActivity.this, "没有新版本", Toast.LENGTH_SHORT).show(); } });
项目地址「AppUpdateDemo」
本项目进度条使用的是代码家的「NumberProgressBar」
阅读全文
0 0
- Android版本更新
- Android SDK版本更新
- Android软件版本更新
- Android 检测版本更新
- Android之版本更新
- Android版本更新实现
- android版本更新问题
- android apk版本更新
- android版本更新
- Android 版本的更新
- Android版本更新
- Android提示版本更新
- android 版本更新
- Android应用版本更新
- android版本更新
- Android检测版本更新
- Android中版本更新
- Android 更新升级版本
- 2015湖南省赛 CSU 1783 :聊天止于呵呵(模拟)
- Intent大全
- 网络流系列
- 学习Java有没有什么捷径
- 关于Make File 看了这两篇博客就足够了!
- Android 版本更新
- 英文文献及论文写作中的一些技巧
- SPOJ QTree5 [点分治][堆]
- BZOJ 4872 [Shoi2017] 分手是祝愿
- jedis连接linux集群失败,单个可以连接
- 【NOIP2013模拟11.7B组】道路覆盖(cover)
- 使用Nginx实现反向代理
- c3p0连接池
- JZOJ1297.【USACO题库】4.1.1 Beef McNuggets麦香牛块