由于友盟停止了更新服务、现更改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~