自动更新替换方案二
来源:互联网 发布:手机对讲机软件哪个好 编辑:程序博客网 时间:2024/05/21 22:44
由于友盟停止了更新服务、现更改APP的更新方案
1、服务端代码 Update.jsp
<span style="font-size:14px;"><%@page import="org.json.JSONObject"%><%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path;response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");String useragent = request.getHeader("user-agent");String host = request.getRequestURL().toString();%><%String v = request.getParameter("version");String channel = request.getParameter("channel");if (v == null)v = "0";double dv = 0; try {dv = Double.parseDouble(v);dv = ((int) Math.round(dv * 100)) / (double) 100;} catch (Exception e) {}System.out.println(dv);String downloadUrl = basePath+"/app/aaa4.0.apk"; double curVersion = 4.00;HashMap map1 = new HashMap();map1.put("code", "0");map1.put("msg", "成功");HashMap map = new HashMap();if (dv < curVersion) {map.put("desc", "发现***,版本号4.00,是否立即安装" + " \n\n更新列表:" + "\n【新增】**配送模块;" + "\n【优化】程序稳定性功能;");map.put("forceUpdate", 1); // 1不强制 2强制map.put("type", 1); //1 三方更新 2自己服务器下载map.put("isUpdate", 2); // 1不更新 2更新} else {map.put("isUpdate", 1);}map.put("url", downloadUrl);map1.put("data", map);out.print(new JSONObject(map1));%></span>
注意事项:javaweb 服务需要在web.xml中添加以下内容
<mime-mapping><extension>apk</extension><mime-type>application/vnd.android.package-archive</mime-type> </mime-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.apk</url-pattern> </servlet-mapping>
2、接口文档说明
接口方式:HTTP协议GET方式
接口地址:appMgr/Update.jsp
请求参数:
参数名称
字段类型
说明
是否必须
version
double
版本
√
channel
Long
渠道号
√
响应参数:json格式
参数名称
说明
code
0:成功 -1:失败
msg
提示信息
data
订单:jsonObject格式
data:json格式
参数名称
字段类型
说明
desc
String
更新内容
forceUpdate
integer
1不强制 2强制
type
integer
1三方更新 2自己服务器下载
url
String
下载链接
isUpdate
integer
1不更新 2更新
3、本地处理
1、获取渠道
/** * 获取渠道信息 友盟 DeviceCommon.getChannelName(ctx,"UMENG_CHANNEL") */ public static String getChannelName(Context ctx, String key) { if (ctx == null) { return null; } String channelName = null; try { PackageManager packageManager = ctx.getPackageManager(); if (packageManager != null) { ApplicationInfo applicationInfo = packageManager .getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA); if (applicationInfo != null) { channelName = applicationInfo.metaData.getString(key); } } } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return channelName; }
2、获取版本
/** * 获取app版本名 */ public static String getAppVersion(Context ctx) { PackageInfo info = getPackageInfo(ctx); if (info == null) return ""; return info.versionName; }
3、使用网络请求获取更新对象
public class AppUpdateBean extends Return { /** * desc : 发现***,版本号4.00,是否立即安装 更新列表: 【新增】***配送模块; 【优化】程序稳定性功能; * forceUpdate : 1 * type : 1 * url : http://app.***.com/aaa.apk * isUpdate : 2 */ private AppFile data; public AppFile getData() { return data; } public void setData(AppFile data) { this.data = data; } public static class AppFile { private String desc; private int forceUpdate;// 1不强制 2强制 private int type;// 1:三方更新 2:自己服务器下载 private String url; private int isUpdate; //1:不更新 2:更新 public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public int getForceUpdate() { return forceUpdate; } public void setForceUpdate(int forceUpdate) { this.forceUpdate = forceUpdate; } public int getType() { return type; } public void setType(int type) { this.type = type; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getIsUpdate() { return isUpdate; } public void setIsUpdate(int isUpdate) { this.isUpdate = isUpdate; } }}
4、更新处理 这里三方使用了百度更新
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case GET_SUCCESS:// 有新版本 AppUpdateBean.AppFile mentity = (AppUpdateBean.AppFile) msg.obj; int type = mentity.getType(); if (type == 1) {// 第三方更新 BaiDuUpdate.getInstance().updateByBaiDu(context, mentity.getForceUpdate()); } else {// 通过本地服务器更新 ServerUpdate.updateByMyServer(context, mentity); } break; case GET_FAIL:// 没有新版本 if (!isCheckBySys) { ToastUtil.showShortToast("暂无更新!"); } break; } } };
其它代码由于非我编写、暂不公布. 本地下载可调用系统下载、也可使用框架下载;百度更新可参考官方demo~
0 0
- 自动更新替换方案二
- 友盟更新 自动更新替换方案
- 移动应用(Android,IOS)自动更新替换方案
- VS 程序自动更新——(方案二)
- Batch 自动更新替换文件
- APP自动更新技术方案
- android自动更新实现方案
- win32 自动更新的一种方案
- Windows自动更新API (二)
- 自动更新系统(二)
- 友盟自动更新的替换-android开发自动更新
- Cache替换方案
- WebView控件替换方案
- UIPageViewController替换方案
- Firemonkey ios app自动更新方案及细节
- SylixOS下DBUS替换方案
- getDrawable()过时替换方案.md
- 自动更新
- hls之m3u8、ts流格式详解
- redis 启动脚本
- 当一进入到搜索界面就弹出软键盘
- Postgresql SQL 选择每组的前面几条记录
- 关于JComboBox触发事件总是执行两次的问题
- 自动更新替换方案二
- java 集合体系结构以及集合和数组的区别
- Linux下的常用命令(6.ls)
- Retrofit+RxJava
- qcom platform 子系统(7)
- HDFS挂载到本地硬盘
- XStream使用详解
- Linux内核之mmc子系统-sdio
- cloud39怎么去掉UART0的打印功能,用作串口通讯使用