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了,当遇到重⼤更新,不再对⽼版本进⾏兼容的时候,可以强制⽤户升级,这⾥的⽅案
有很多,⽐如调⽤系统级对话框,让⽤户没办法取消等操作,这⾥就不做更多描述。以上就是这篇⽂章的全部内容,希望对有需要的
⼈能有所帮助。


发布评论