自动更新替换方案二

由于友盟停止了更新服务、现更改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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值