android 打开url 下载apk,Android 从零开始撸一个应用内更新Demo

原标题:Android 从零开始撸一个应用内更新Demo

对于Android app来说,应用内更新几乎成了一个标配的功能了。原理其实不难,今天我们就从零开始撸一个自己的应用内更新的demo出来。

先看看最终实现的效果:

04297616bfba5b1062b536d7206f955d.gif

Picture

上图的效果,稍微将功能拆分一下,可以总结为以下几点。

1.检查更新;

2.最新apk下载;

3.apk下载成功后应用内跳转安装;

1.检查更新

为了检验检查更新的效果,我们需要一个tomcat服务器。至于tomcat怎么搭建,这里就不花篇幅去讲了,网上资料还是很多的。

Tomcat部署完成后,在Tomcat ROOT目录上新建一个本次demo的目录,并且将新版的apk文件和一个保存了新版apk相关信息的json文件放在demo目录下。如下图所示:

3abed7602123618d1daedf802069fbb5.png

各位应该已经想到检查更新的原理了,其实就是解析保存了新版apk信息的json文件,然后根据json中新版apk的版本信息来判断当前apk是否有可以更新。

我们这里模拟一个新版apk相关信息的json文件内容。

{ "data":{ "content": "更新内容如下:n 1.xxxxxx;n 2.xxxxxx;n 3.xxxxxx;n", "id": "1", "api_key": "android", "version_code": "2", "version_name": "1.0.2"}, "msg": "获取成功", "status": 1}

可以看到,对于检查更新来说,最重要的几个信息都包含在data字段中,包括了更新内容,新版apk版本号,新版apk版本名称等。当然,根据实际需求,这个json可能会有所不同,具体项目中可以做一些修改,届时解析的时候稍作改动就好了。

接下来完成检查更新相关代码:

/**

* 检查更新

*/

public void checkUpdate(OnCheckUpdateListener onCheckUpdateListener) {

mOnCheckUpdateListener = onCheckUpdateListener;

HttpUtils.sendOkHttpRequest(mUpdateHelper.getNewestApkVersionInfoUrl(), new Callback() {

@Override

public void onFailure(Call call, IOException e) {

ToastUtils.showToast( "check update failed.");

}

@Override

public void onResponse(Call call, Response response) throws IOException {

String strJson = response.body().string();

Log.e( "onResponse", "response.body().string() = "+ strJson);

if(parseJson(strJson).getVersionCode() > AppUtils.getAppVersionCode()) {

sendMessage(MSG_ON_FIND_NEW_VERSION, parseJson(strJson));

} else{

sendMessage(MSG_ON_NEWEST, null);

}

}

});

}

/**

* 解析json数据

*

* @param jsonData json数据

* {

* "data": {

* "content": "更新内容如下:1.xxxxxx;/n 2.xxxxxx;/n 3.xxxxxx;/n",

* "id": "1",

* "api_key": "update test",

* "version_code": "2"

* },

* "msg": "获取成功",

* "status": 1

* }

* @ returndataBean

*/

private DataBean parseJson(String jsonData) {

DataBean dataBean = new DataBean();

try{

JSONObject jsonObject = new JSONObject(jsonData);

JSONObject dataObject = jsonObject.getJSONObject( "data");

dataBean.setContent(dataObject.getString( "content"));

dataBean.setId(dataObject.getInt( "id"));

dataBean.setApiKey(dataObject.getString( "api_key"));

dataBean.setVersionCode(dataObject.getInt( "versi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值