APP都涉及到版本更新,这里我说一下思路,以及提供伪代码(从我项目里面直接拷贝出来的,
你们直接用,是用不了的)。
思路就是:拿后台的接口,返回给你一个字段,是服务器上面的apk的版本号(每次把新版本
apk上传到公司服务器,都要把对应的版本号字段修改,写死的),跟你本地的apk版本号比较,
大于就提示用户更新下载。这里就涉及到下载功能,现在基本上都是okgo,反正我用的okgo。
涉及到下载就涉及到存储功能,android6.0以上都要动态给权限,前面有一篇就是说动态获取
权限的,不懂的可以看一下。
1、首先获取权限,本地的版本号
String[] permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
String title = "存储权限不可用";
String content = "由于版本更新功能需要获取存储空间,为你存储新版本;\n否则,您将无法正常使用版本更新功能";
initPermission(permission, title, content);
String currentApkVerson = getCurrentApkVerson();
currentVersonCode = Float.valueOf(currentApkVerson);
2、获取服务器的版本号,也要转换成float类型,进行比较,大于本地的版本号
就弹出对话框提示用户,有新版本需要更新。
3、然后就是拿到链接下载APK
/** * 下载apk */
private void downLoadApk(String apkUrl) {
if (TextUtils.isEmpty(apkUrl)) {
Utils.ShowToast(context, "更新失败!");
return;
}
okDownload = OkDownload.getInstance();
okDownload.getThreadPool().setCorePoolSize(1);
okDownload.addOnAllTaskEndListener(this);
okDownload.removeAll(true);
okDownload.removeTask("task");
GetRequest<File> getRequest = OkGo.<File>get(apkUrl);
downloadTask = OkDownload.request(downLoadApkTag, getRequest)
.priority(0)
.fileName("name.apk")
.register(new downloadListener(downLoadApkTag));
downloadTask.start();
}
4、跳转安装界面(copy可以直接用):
/** * 安装apk */
private void installApk(String apkPath) {
File apkFile = new File(apkPath);
if (!apkFile.exists()) {
return;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(context, "com.xinggui.wz.chuangjiaoplatform.provider", apkFile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
startActivity(intent);
finish();
}