应用升级的功能是每个App必备功能之一。
这篇文章介绍应用自动更新的原理以及封装实现一个在线升级的组件.
应用自动更新原理:
- apk下载
- 利用Notification通知用户进度消息
- 文件下载成功调用系统安装程序
用法:
Intent intent = new Intent(this,UpdateService.class);
intent.putExtra("apkUrl","apk的url");
intent.putExtra("filePath",filePath);
startService(intent);
传入两个参数,第一个是apk下载的url,第二个是apk存储的文件目录。
代码:
UpdateDownloadListener
下载动作的方法回调
public interface UpdateDownloadListener {
/**
* 下载请求开始回调
*/
public void onStarted();
/**
* 进度更新回调
* @param progress
* @param downloadUrl
*/
public void onProgressChanged(int progress ,String downloadUrl);
/**
* 下载完成回调
* @param completeSize
* @param downloadUrl
*/
public void onFinished(int completeSize ,String downloadUrl);
/**
* 下载失败回调
*/
public void onFailure();
}
UpdateService
开启apk文件下载,监听下载动作,显示通知栏样式,下载完成点击通知栏打开apk安装文件
public class UpdateService extends Service{
private String apkUrl;
private String filePath;
private NotificationManager notificationManager;
private Notification notification;
@Override
public void onCreate() {
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(intent == null){
notifyUser("下载失败","Intent 未空",0);
stopSelf();
}
apkUrl= intent.getStringExtra("apkUrl");
filePath = intent.getStringExtra("filePath");
notifyUser("下载开始了","下载开始了",0);
startDownLoad();
return super.onStartCommand(intent,flags,startId);
}
private void startDownLoad() {
UpdateManager.getInstance().startDownloads(apkUrl, filePath,
new UpdateDownloadListener() {
@Override
public void onStarted() {
}
@Override
public void onProgressChanged(int progress, String downloadUrl) {
notifyUser("正在下载","正在下载",progress);
}
@Override
public void onFinished(int completeSize, String downloadUrl) {
notifyUser("下载完成","下载完成",