java app自动更新_简单实现安卓app自动更新功能

本文详细介绍了如何在安卓应用中实现自动更新功能。包括服务器端提供json接口,客户端解析并判断版本更新,以及使用广播接收器进行更新提示和处理。通过Okhttp请求服务器,解析JSON数据,比较版本号,展示更新对话框,并使用服务(UpdateService)进行后台下载更新文件。整个过程涉及网络请求、数据解析、广播接收器和文件下载等技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单实现安卓自动更新

一般的安卓app都有自动更新功能,实现app的更新,以让用户体验新版本的功能,这里也是项目中用到的,今天就来总结一下,代码应该有点多,还请耐心点哈。

安卓应用实现自动更新比较简单,这里跟大家介绍下:

第一步 服务器端:

服务端提供一个借口,或者网址,我这里就用的服务器是tomcat,这里提供一个网址如下:

//也就是一个json数据接口

public static final String UPDATE_URL = "http://192.168.1.103:8080/update.json";

我们来看下json数据参数:

{

//app名字

appname: "爱新闻1.1",

//服务器版本号

serverVersion: "2",

//服务器标志

serverFlag: "1",

//是否强制更新

lastForce: "1",

//apk下载地址,这里我已经下载了官方的apk,放到了服务器里面

updateurl: "http://192.168.1.103:8080/36Kr.apk",

//版本的更新的描述

upgradeinfo: "V1.1版本更新,你想不想要试一下哈!!!"

}

好了以上的是服务器端的信息,在这里不需要多说了,我们来看下客户端的吧。

第二步 客户端需要实现:

首先我们要去解析服务端给的json,那么我们就要来创建一个model类了(代码过多,这里只有字段,getter和setter方法自己创建):

//app名字

private String appname;

//服务器版本

private String serverVersion;

//服务器标志

private String serverFlag;

//强制升级

private String lastForce;

//app最新版本地址

private String updateurl;

//升级信息

private String upgradeinfo;

在这里使用了一个辅助类,基本和model字段差不多:

public class UpdateInformation {

public static String appname = MyApplication.getInstance()

.getResources().getString(R.string.app_name);

public static int localVersion = 1;// 本地版本

public static String versionName = ""; // 本地版本名

public static int serverVersion = 1;// 服务器版本

public static int serverFlag = 0;// 服务器标志

public static int lastForce = 0;// 之前强制升级版本

public static String updateurl = "";// 升级包获取地址

public static String upgradeinfo = "";// 升级信息

public static String downloadDir = "wuyinlei";// 下载目录

}

我们知道,我们在进入app的时候,这个时候如果检测到服务器端有了新的版本,就回弹出提示框,提示我们更新。这个我们在MainActivity里面处理逻辑(onCreate()方法里面):

OkhttpManager.getAsync(Config.UPDATE_URL, new OkhttpManager.DataCallBack() {

@Override

public void requestFailure(Request request, Exception e) {

}

@Override

public void requestSuccess(String result) {

try {

Log.d("wuyiunlei",result);

JSONObject object = new JSONObject(result);

UpdateInfoModel model = new UpdateInfoModel();

model.setAppname(object.getString("appname"));

model.setLastForce(object.getString("lastForce"));

model.setServerFlag(object.getString("serverFlag"));

model.setServerVersion(object.getString("serverVersion"));

model.setUpdateurl(object.getString("updateurl"));

model.setUpgradeinfo(object.getString("upgradeinfo"));

tmpMap.put(DeliverConsts.KEY_APP_UPDATE, model);

} catch (JSONException e) {

e.printStackTrace();

}

//发送广播

sendBroadcast(new Intent(UpdateReceiver.UPDATE_ACTION));

}

});

当然了,我们也要注册和结束广播:

/**

* 广播注册

*/

private void registerBroadcast() {

mUpdateReceiver = new UpdateReceiver(false);

mIntentFilter = new IntentFilter(UpdateReceiver.UPDATE_ACTION);

this.registerReceiver(mUpdateReceiver, mIntentFilter);

}

/**

* 广播卸载

*/

private void unRegisterBroadcast() {

try {

this.unregisterReceiver(mUpdateReceiver);

} catch (Exception e) {

e.printStackTrace();

}

}

好了,接下来我们看下我们自定义的广播接收者UpdateReceiver .java:

/**

* 版本更新升级 广播接受者

*

*/

public class UpdateReceiver extends BroadcastReceiver {

private AlertDialog.Builder mDialog;

public static final String UPDATE_ACTION = "wuyinlei_aixinwen";

private SharedPreferencesHelper mSharedPreferencesHelper;

private boolean isShowDialog;

public UpdateReceiver() {

}

public UpdateReceiver(boolean isShowDialog) {

super();

this.isShowDialog = isShowDialog;

}

@Override

public void onReceive(Context context, Intent intent) {

mSharedPreferencesHelper = mSharedPreferencesHelper

.getInstance(MyApplication.getInstance());

//当然了,这里也可以直接new处hashmap

HashMap tempMap = MyApplication.getInstance()

.getTempMap();

UpdateInfoModel m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值