android apk版本更新

来源:互联网 发布:家庭光纤网络布线 编辑:程序博客网 时间:2024/05/22 15:15

一、更新判断

当每次发布新的版本时,都要把服务器对应该应用的的versionCode和versionName修改成最新的值。
因此从服务器获取的versionCode和versionName一定是最新版本对应的versionCode和versionName。
然后根据从服务器获取本应用的最新版本号与用户使用的当前版本号进行比较,来判断是否需要进行版本更新。
可以通过 versionCode 和versionName来判断是否需要进行版本更新:
versionCode:
versionCode是整型值,可直接进行比较,当服务器获取的versionCode大于本地的versionCode,需进行版本更新。
versionName:
根据versionName进行版本比较,最简单的方法就是直接用equals比较是否相同,不相同,需要进行版本更新。
也可以根据点(.)对versionName进行分隔,转成整数再进行比较。
根据点(.)分隔比较版本:

 private boolean isUpdate(String version) {        boolean ret = false;        int[] num = {0, 0, 0};        int[] numLocal = {0, 0, 0};        //获取本地的versionName        String loaclVersion = BuildConfig.VERSION_NAME;        if (version.contains("V")||version.contains("v")) {            version = version.replace("V", "");            version = version.replace("v", "");        }        if (version.contains(".")) {            String[] split = version.split("\\.");            String[] split1 = loaclVersion.split("\\.");            for (int i = 0; i < split.length && i < 3; i++) {                num[i] = Integer.parseInt(split[i]);            }            for (int i = 0; i < split1.length && i < 3; i++) {                numLocal[i] = Integer.parseInt(split1[i]);            }            for (int i = 0; i < num.length; i++) {                if (num[i] > numLocal[i]) {                    ret = true;                    break;                }            }        }        return ret;    }

获取本地的版本的versionCode和versionName:
versionCode: BuildConfig.VERSION_CODE
versionName:BuildConfig.VERSION_NAME

二、apk下载

 private Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                //取消下载                case 0:                    break;                //下载完成,安装apk                case 1:                    installApk();                    break;                //更新下载进度                case 2:                    long total = msg.arg1;                    double progress = total * 1.0 / 1024 / 1024;                    tv_update.setText(String.format("%.2f", progress) + "M/" + update.getSize() + "M");                    double count = Double.parseDouble(update.getSize());                    progress = progress * 100 / count;                    progressBar.setProgress((int) (progress));                    tv_progress.setText(String.format("%.2f", progress) + "%");                    break;            }        }    };
//下载apk文件private void update() {        new Thread(new Runnable() {            @Override            public void run() {                OkHttpClient client = new OkHttpClient();                Request request = new Request.Builder().url(update.getUrl()).build();                Response response = null;                try {                    response = client.newCall(request).execute();                    if (response.isSuccessful()) {                        InputStream is = response.body().byteStream();                        File file = new File(apkpath);                        FileOutputStream fos = new FileOutputStream(file);                        byte[] data = new byte[1024];                        int len = 0, total = 0;                        while ((len = is.read(data)) != -1) {                            if (isCancel) {                            //取消下载                              mHandler.sendEmptyMessage(0);                              return;                            }                            total += len;                            fos.write(data, 0, len);                            Log.i("info", "下载apk=" + total);                            Message message = new Message();                            message.what = 2;                            message.arg1 = total;                            mHandler.sendMessage(message);                        }                        //apk下载完成                        mHandler.sendEmptyMessage(1);                    }                } catch (IOException e) {                    e.printStackTrace();                } finally {                    if (response != null) {                        response.body().close();                    }                }            }        }).start();    }

三、apk安装

    //安装APK文件    public void installApk() {        //apkpath为apk安装的全路径        File apkfile = new File(apkpath);        if (!apkfile.exists()) {            return;        }        // 通过Intent安装APK文件        Intent i = new Intent(Intent.ACTION_VIEW);        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");        startActivity(i);    }

不足之处,希望各位大神能够进行批评和指正,谢谢!

0 0
原创粉丝点击