Android中如何实现版本更新

来源:互联网 发布:北京思学通软件好用吗 编辑:程序博客网 时间:2024/06/06 19:51

在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);}
0 0
原创粉丝点击