zoukankan      html  css  js  c++  java
  • Android----- 版本更新和 服务器下载新版本APK并安装

    前段时间有朋友问我版本更新的问题,所以来写一篇版本更新和APK下载并安装的博客。

    版本更新,几乎在所有的项目中都用的到,一般是这样的流程,当进入APP首页是便会检测版本是否为最新版本,不是则提示你下载更新;

    版本更新需要后台和移动端共同来完成,后台一般用一个接口 来返回给移动端最新版本的信息,移动端接收信息后和APP自身版本比较,如果不相同则提示用户更新 APP。

    所以当移动端开发者做完并更新版本后 打包提交到后台,后台更新APP版本信息,就可以完成版本更新了。

    看看我的项目的效果图:

       

    首页进来开始检测  提示更新APP,点击确定,下载APK文件,之后跳转安装见面,点击安装,安装完成后,清除安装包。

    获取移动端版本号

     /****
         * 获取移动端版本号
         * 格式可根据比较方式自己设置
         *
         * @param activity
         * @return
         */
        public static final String getVersion(Activity activity) {
            try {
                PackageManager manager = activity.getPackageManager();
                PackageInfo info = manager.getPackageInfo(activity.getPackageName(), 0);
                String version =info.versionCode+"."+info.versionName;
                return  version;
            } catch (Exception e) {
                return "";
            }
        }

    网络请求数据解析比较,弹框提示 下载更新

     String version="服务器版本";
     if (!version.equals(Util.getVersion(MainActivity.this))){
            centerDialog = new CenterDialog(MainActivity.this,
              R.layout.dialog_center_layout, new int[]{R.id.dialog_cancel, R.id.dialog_sure},
              "服务器APK下载链接");
            centerDialog.setOnCenterItemClickListener(MainActivity.this);
            centerDialog.show();
        }

    之后就根据链接,下载APK,并安装

    /****
         * 服务器下载APK文件
         * @param context
         * @param url
         */
        public static void showDownloadAPK(final Context context, final String url) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    OkHttpUtils
                            .get()
                            .url(url)
                            .build()
                            .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(),"cg.apk") {//保存路径      APK名称
                                @Override
                                public void onError(Call call, Exception e, int id) {
                                }
    
                                @Override
                                public void inProgress(float progress, long total, int id) {
                                    super.inProgress(progress, total, id);
                                }
    
                                @Override
                                public void onResponse(File response, int id) {
                                    showSelectAPK(context);
                                }
                            });
                }
            }).start();
    
        }
     /***
         * 调起安装APP窗口  安装APP
         * @param context
         */
        private static void showSelectAPK(Context context){
            File fileLocation = new File(Environment.getExternalStorageDirectory(), "cg.apk");//APK名称
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setDataAndType(Uri.fromFile(fileLocation), "application/vnd.android.package-archive");
            context.startActivity(intent);
        }

    我的代码是写的比较简单,不过功能是可以实现的,你可以自己封装。网络请求和下载文件可用于其他方式实现,测试接口我删除了的,

    有问题可以扫头像加新创建的群@我 

     源码下载

  • 相关阅读:
    谜之This
    JS 面向对象 ~ 继承的7种方式
    JS 面向对象 ~ 创建对象的 9 种方式
    JS 原型与原型链
    ES6 Promise 详解
    Vue diff 算法
    Vue Router 路由实现原理
    Vue Keep-alive 原理
    Vue 响应式原理
    JS 有趣的JS
  • 原文地址:https://www.cnblogs.com/zhangqie/p/7521888.html
Copyright © 2011-2022 走看看