自动更新替换方案二

来源:互联网 发布:手机对讲机软件哪个好 编辑:程序博客网 时间: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
原创粉丝点击