2023年11月26日发(作者:)

Android如何实现APP⾃动更新

先来看看要实现的效果图:

对于安卓⽤户来说,⼿机应⽤市场说满天飞可是⼀点都不夸张,⽐如⼩⽶,魅族,百度,360,机锋,应⽤宝等等,当我们想上线⼀

款新版本APP时,先不说渠道打包的⿇烦,单纯指上传APP到各⼤应⽤市场的⼯作量就已经很⼤了,好不容易我们把APP都上传完

了,突然发现⼀个会导致应⽤闪退的⼩Bug,这时那个崩溃啊,明明不是很⼤的改动,难道我们还要再去重新去把各⼤应⽤市场的版

本再上传更新⼀次?相信我,运营⼈员肯定会弄死你的!!

有问题,⾃然就会有解决问题的⽅案,因此我们就会想到如果在APP⾥内嵌⾃动更新的功能,那么我们将可以省去很多⿇烦,当然

关于这⽅⾯功能的第三⽅SDK有很多。

好了,⾔归正传,今天我们⾃⼰来实现下关于APP⾃动更新。

流程其实并不复杂:当⽤户打开APP的时候,我们让APP去发送⼀个检查版本的⽹络请求,或者利⽤服务端向APP推送⼀个透传消

息来检查APP的版本,如果当前APP版本⽐服务器上的旧,那么我们就提醒⽤户进⾏下载更新APP,当然在特定的情况下,我们也

可以强制的让⽤户去升级,当然这是很不友好的,尽可能的减少这样的做法。

好了,来梳理下流程,⾸先既然是⼀个APP的更新,那么我们就需要去下载新的APP,然后我们需要⼀个通知来告诉⽤户当前的下

载进度,再来当APP安装包下载完成后,我们需要去系统的安装程序来对APP进⾏安装更新。

知识点:

下载:异步HTTP请求⽂件下载,并监听当前下载进度(这⾥我采⽤了okhttp

通知:Notification(具体⽤法请⾃⾏翻阅API⽂档)

安装:Intent (具体⽤法请⾃⾏翻阅API⽂档)

来看下具体实现代码:

我们需要⼀个后台服务来⽀撑App的下载

import cation;

import cationManager;

import gIntent;

import e;

import ;

import Factory;

import ;

import r;

import le;

import cationCompat;

import eUtil;

import Utils;

import llBack;

import ;

import ;

/**

* ⾃动下载更新apk服务

* Create by:

* Date: 2016-08-14

* time: 09:50

* Email: @

*/

public class DownloadService extends Service {

private String mDownloadUrl;//APK的下载路径

private NotificationManager mNotificationManager;

private Notification mNotification;

@Override

public void onCreate() {

te();

mNotificationManager = (NotificationManager) getSystemService(CATION_SERVICE);

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

if (intent == null) {

notifyMsg("温馨提醒", "⽂件下载失败", 0);

stopSelf();

}

mDownloadUrl = ingExtra("apkUrl");//获取下载APK的链接

downloadFile(mDownloadUrl);//下载APK

return tCommand(intent, flags, startId);

}

@Nullable

@Override

public IBinder onBind(Intent intent) {

return null;

}

private void notifyMsg(String title, String content, int progress) {

r builder = new r(this);//为了向下兼容,这⾥采⽤了v7包下的NotificationCompat来构造

llIcon(_login_logo).setLargeIcon(Resource(getResources(), _login_logo)).setContentTitle(title);

if (progress > 0 && progress < 100) {

//下载进⾏中

gress(100, progress, false);

} else {

gress(0, 0, false);

}

oCancel(true);

n(tTimeMillis());

tentText(content);

//避免频繁刷新View,这⾥设置每下载10%提醒更新⼀次进度

notifyMsg("温馨提醒", "⽂件正在下载..", (int) (progress * 100));

}

}

});

}

}

然后我们只需要在我们想要的更新APP的时候去调起这个服务即可,⽐如在系统设置⾥的"版本检查"

Intent intent = new Intent(mContext, );

ra("apkUrl", "APK下载地址");

startService(intent);

总结

这⾥我只是粗略演⽰本地⾃动更新APP的功能,在实际应⽤中,我们应该配合服务端来做,⽐如在⽤户启动APP的时候去⽐对版本

号,如果版本号低于服务器的版本号,那么此时服务端应该给客户端⼀个透传推送,这⾥的推送内容应该为新版本APP的下载地

址,此时就可以根据该地址来下载新版APP了,当遇到重⼤更新,不再对⽼版本进⾏兼容的时候,可以强制⽤户升级,这⾥的⽅案

有很多,⽐如调⽤系统级对话框,让⽤户没办法取消等操作,这⾥就不做更多描述。以上就是这篇⽂章的全部内容,希望对有需要的

⼈能有所帮助。