首页 > 系统 > Android > 正文

Android中如何实现版本更新

2019-11-06 09:58:15
字体:
来源:转载
供稿:网友

在App上线后可能后续对程序进行部分更新,版本更新的主要思想是打开app,在联网的情况下,请求服务器,判断服务器上App的版本号是否与手机上的app版本号相同,如果相同则程序正常进行,如果不同弹出对话框,提示用户是否更新app版本,如果更新则更新app,并完成安装。 <– 使用网络功能所需权限 –>

<uses-permission android:name="android.permission.access_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- SD卡读写权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

1.获取当前程序的版本名字

/** * 获取当前程序的版本名字 * @return 版本号名字 */ public String getVersionName() { String versionName = null; // PackageManager 可以获取清单文件的所有信息(Gradle) PackageManager manager = getPackageManager(); try { // getPackageInfo 获取当前程序的包信息 PackageInfo packageInfo = manager.getPackageInfo("包名", 0); versionName = packageInfo.versionName + ""; } catch (PackageManager.NameNotFoundException e) { e.PRintStackTrace(); // can't reach return ""; } return versionName;}

2.请求服务器获取服务器中app的版本信息进行比对,如果不同弹出对话框提示更新。

/** * 下载一个新版本 */ protected void downloadNewApk() { httpUtils = new HttpUtils(); LogUtils.e("log", "下载新版本"); LogUtils.e("log", "下载位置: apk:" + apkUrl); // 1.下载路径 2.目标路径 if (TextUtils.isEmpty(apkUrl)) { return; } String fileName = apkUrl.substring(apkUrl.lastIndexOf("/")); target = Environment.getExternalStorageDirectory().getPath() + fileName;//apk下载的位置 LogUtils.e("log", "下载位置:" + target + " apk:" + apkUrl); httpUtils.download(apkUrl, target, new RequestCallBack<File>() { // 下载成功时调用 @Override public void onSuccess(ResponseInfo<File> arg0) { Toast.makeText(getapplicationContext(), "下载成功!", Toast.LENGTH_SHORT).show(); tv_process.setVisibility(View.GONE); // 安装新版本 installApk(); } // 下载失败时调用 @Override public void onFailure(HttpException arg0, String arg1) { Toast.makeText(getApplicationContext(), "下载失败!", Toast.LENGTH_SHORT).show(); tv_process.setVisibility(View.GONE); } // 下载时调用 @Override public void onLoading(long total, long current, boolean isUploading) { super.onLoading(total, current, isUploading); tv_process.setVisibility(View.VISIBLE);// 显示控件 tv_process.setText("当前进度:" + FormatUtils.sizeFormatNum2String(current) + "/" + "总进度:" + FormatUtils .sizeFormatNum2String(total)); } }); }

3.下载成功后,完成安装

/** * 安装应用程序 */protected void installApk() { // 调用系统的工程去安装 打开系统的apk 安装 Intent intent = new Intent("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.setDataAndType(Uri.fromFile(new File(target)), "application/vnd.android.package-archive"); startActivityForResult(intent, 0);}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表