android版本更新的代码,一句代码实现Android版本更新功能

自从友盟关闭了版本更新功能后,安卓的版本更新只能自己来撸了,结合之前友盟的版本更新,其实实现起来也简单,这里简单说说版本更新实现的思路:

第一步,通过接口获取更新信息(版本号、更新内容、apk下载地址、是否强制更新)

第二步,通过接口拿到的版本号和本地的版本号进行比较,如果拿到的版本号比本地的版本号大,那就进行版本升级

第三步,版本升级分为三种情况:

非wifi情况下,弹出版本更新提示框,用户点击“立即升级”按钮开始下载apk,下载完成后提示安装。wifi情况下,直接后台下载apk,下载完后弹出版本更新提示框,用户点击“立即安装”按钮开始安装apk。

3、强制更新为true的时候,无论是否wifi情况下,都是应该弹出更新提示框,用户点击“立即升级”按钮开始下载升级,提示框不能取消,点击“关闭”按钮直接退出app。

基本思路就是上面那样,下面来看看最鸡冻人心的环节,如何在自己的app加入版本更新功能。

BaseAndroid.checkUpdate(MainActivity.this, 2,

"http://f5.market.mi-img.com/download/AppStore/0f4a347f5ce5a7e01315dda1ec35944fa56431d44/luo.footprint.apk",

"更新了XXXn修复OOO", false);

当然啦,前提是你得依赖了我的base库:

https://github.com/LuoGuoXin/...

哈哈,你也可以直接复制版本更新的部分过去就行啦,再根据自己需求修改下,有什么好的建议记得评论,因为那个功能我也还没去优化的。

那下面进行代码分析哈:首先是主方法

/**

* 版本更新

*

* @param context

* @param versionCode 版本号

* @param url apk下载地址

* @param updateMessage 更新内容

* @param isForced 是否强制更新

*/

public static void checkUpdate(Context context, int versionCode, String url, String updateMessage, boolean isForced) {

if (versionCode > UpdateManager.getInstance().getVersionCode(context)) {

int type = 0;//更新方式,0:引导更新,1:安装更新,2:强制更新

if (UpdateManager.getInstance().isWifi(context)) {

type = 1;

}

if (isForced) {

type = 2;

}

//检测是否已下载

String downLoadPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/downloads/";

File dir = new File(downLoadPath);

if (!dir.exists()) {

dir.mkdir();

}

String fileName = url.substring(url.lastIndexOf("/") + 1, url.length());

if (fileName == null && TextUtils.isEmpty(fileName) && !fileName.contains(".apk")) {

fileName = context.getPackageName() + ".apk";

}

File file = new File(downLoadPath + fileName);

//设置参数

UpdateManager.getInstance().setType(type).setUrl(url).setUpdateMessage(updateMessage).setFileName(fileName).setIsDownload(file.exists());

if (type == 1 && !file.exists()) {

UpdateManager.getInstance().downloadFile(context);

} else {

UpdateManager.getInstance().showDialog(context);

}

}

}

然后就是UpdateManager的封装啦,自己看代码吧,有什么优化点评论下,我去修改哈。

/**

* 版本更新

*/

public class UpdateManager {

private String downLoadPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/downloads/";

private int type = 0;//更新方式,0:引导更新,1:安装更新,2:强制更新

private String url = "";//apk下载地址

private String updateMessage = "";//更新内容

private String fileName = null;//文件名

private boolean isDownload = false;//是否下载

private NotificationManager mNotifyManager;

private NotificationCompat.Builder mBuilder;

private BaseDialog dialog;

private ProgressDialog progressDialog;

public static UpdateManager updateManager;

public static UpdateManager getInstance() {

if (updateManager == null) {

updateManager = new UpdateManager();

}

return updateManager;

}

private UpdateManager() {

}

/**

* 弹出版本更新提示框

*/

public void showDialog(final Context context) {

String title = "";

String left = "";

boolean cancelable = true;

if (type == 1 | isDownload) {

title = "安装新版本";

left = "立即安装";

} else {

title = "发现新版本";

left = "立即更新";

}

if (type == 2) {

cancelable = false;

}

dialog = new BaseDialog.Builder(context).setTitle(title).setMessage(updateMessage).setCancelable(cancelable)

.setLeftClick(left, new View.OnClickListener() {

@Override

public void onClick(View view) {

dialog.dismiss();

if (type == 1 | isDownload) {

installApk(context, new File(downLoadPath, fileName));

} else {

if (url != null && !TextUtils.isEmpty(url)) {

if (type == 2) {

createProgress(context);

} else {

createNotification(context);

}

downloadFile(context);

} else {

Toast.makeText(context, "下载地址错误", Toast.LENGTH_SHORT).show();

}

}

}

})

.setRightClick("取消", new View.OnClickListener() {

@Override

public void onClick(View view) {

dialog.dismiss();

if (type == 2) {

System.exit(0);

}

}

})

.create();

dialog.show();

}

/**

* 下载apk

*

*/

public void downloadFile(final Context context) {

RequestParams params = new RequestParams(url);

params.setSaveFilePath(downLoadPath + fileName);

x.http().request(HttpMethod.GET, params, new Callback.ProgressCallback() {

@Override

public void onSuccess(File result) {

}

@Override

public void onError(Throwable ex, boolean isOnCallback) {

Toast.makeText(context, ex.getMessage(), Toast.LENGTH_SHORT).show();

}

@Override

public void onCancelled(CancelledException cex) {

}

@Override

public void onFinished() {

}

@Override

public void onWaiting() {

}

@Override

public void onStarted() {

}

@Override

public void onLoading(long total, long current, boolean isDownloading) {

//实时更新通知栏进度条

if (type == 0) {

notifyNotification(current, total);

} else if (type == 2) {

progressDialog.setProgress((int) (current * 100 / total));

}

if (total == current) {

if (type == 0) {

mBuilder.setContentText("下载完成");

mNotifyManager.notify(10086, mBuilder.build());

} else if (type == 2) {

progressDialog.setMessage("下载完成");

}

if (type == 1) {

showDialog(context);

} else {

installApk(context, new File(downLoadPath, fileName));

}

}

}

});

}

/**

* 强制更新时显示在屏幕的进度条

*

*/

private void createProgress(Context context) {

progressDialog = new ProgressDialog(context);

progressDialog.setMax(100);

progressDialog.setCancelable(false);

progressDialog.setMessage("正在下载...");

progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

progressDialog.show();

}

/**

* 创建通知栏进度条

*

*/

private void createNotification(Context context) {

mNotifyManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);

mBuilder = new NotificationCompat.Builder(context);

mBuilder.setSmallIcon(BaseAndroid.getBaseConfig().getAppLogo());

mBuilder.setContentTitle("版本更新");

mBuilder.setContentText("正在下载...");

mBuilder.setProgress(0, 0, false);

Notification notification = mBuilder.build();

notification.flags = Notification.FLAG_AUTO_CANCEL;

mNotifyManager.notify(10086, notification);

}

/**

* 更新通知栏进度条

*

*/

private void notifyNotification(long percent, long length) {

mBuilder.setProgress((int) length, (int) percent, false);

mNotifyManager.notify(10086, mBuilder.build());

}

/**

* 安装apk

*

* @param context 上下文

* @param file APK文件

*/

private void installApk(Context context, File file) {

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setAction(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");

context.startActivity(intent);

}

/**

* @return 当前应用的版本号

*/

public int getVersionCode(Context context) {

try {

PackageManager manager = context.getPackageManager();

PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);

int version = info.versionCode;

return version;

} catch (Exception e) {

e.printStackTrace();

return 0;

}

}

/**

* 判断当前网络是否wifi

*/

public boolean isWifi(Context mContext) {

ConnectivityManager connectivityManager = (ConnectivityManager) mContext

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();

if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {

return true;

}

return false;

}

public UpdateManager setUrl(String url) {

this.url = url;

return this;

}

public UpdateManager setType(int type) {

this.type = type;

return this;

}

public UpdateManager setUpdateMessage(String updateMessage) {

this.updateMessage = updateMessage;

return this;

}

public UpdateManager setFileName(String fileName) {

this.fileName = fileName;

return this;

}

public UpdateManager setIsDownload(boolean download) {

isDownload = download;

return this;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值