Android项目:手机安全卫士(2)—— 版本升级

Android项目:手机安全卫士(2)—— 版本升级

1 介绍

前面讲了闪屏界面,现在来说说版本升级的问题,在闪屏界面的过程中,需要检测是否有新版本发布,若有,则提示用户升级。

项目源码地址1(实时更新):https://github.com/xwdoor/MobileSafe
项目源码地址2:http://download.csdn.net/detail/xwdoor/9443633

2 准备工作

在正式编码之前,需要进行一下准备工作:

  • 上传高版本的 apk 安装文件
  • 修改 update.json 文件,填充 dowloadUrl 这个字段,填上上述的 apk 安装文件的网络路径

3 显示升级对话框,提示用户升级

当检测到高版本时,提示用户升级,代码如下:


    /**
     * 显示升级对话框
     */
    private void showUpdateDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.app_update);//设置标题:发现新版本
        builder.setMessage(mRemoteAppInfo.getDescription());//设置内容
        builder.setPositiveButton("立即更新", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //开始下载apk
                downloadApk(mRemoteAppInfo.getDownloadUrl());
            }
        });
        builder.setNegativeButton("以后再说", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                startMainActivity();
            }
        });

        //点击返回键的监听
        builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                startMainActivity();
            }
        });
        builder.show();
    }

结果如图所示:

提示用户升级

4 下载 APK 文件

当用户点击“立即更新”按钮时,开始下载 apk 文件,代码如下:


    /**
     * 下载APK
     *
     * @param downloadUrl apk文件的网络路径
     */
    private void downloadApk(String downloadUrl) {
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            Toast.makeText(this, "没有找到sdcard", Toast.LENGTH_SHORT).show();
            return;
        }
        //显示下载进度
        //mTvProgress.setVisibility(View.VISIBLE);

        HttpUtils httpUtils = new HttpUtils();

        //获取sdcard根目录
        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/mobileSafe.apk";
        httpUtils.download(downloadUrl, path, new RequestCallBack<File>() {
            //下载成功
            @Override
            public void onSuccess(ResponseInfo<File> responseInfo) {
                Log.i(TAG_LOG, "下载成功--->" + responseInfo.result.getAbsolutePath());
                installApk(responseInfo.result.getAbsolutePath());
            }

            //下载失败
            @Override
            public void onFailure(HttpException e, String s) {
                Toast.makeText(SplashActivity.this, "下载失败", Toast.LENGTH_SHORT).show();
                Log.i(TAG_LOG, "下载失败--->" + s);
                startMainActivity();
            }

            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                super.onLoading(total, current, isUploading);
                Log.i(TAG_LOG, "total--->" + total + ",current--->" + current);
                int percent = (int) (current * 100 / total);
                mTvProgress.setText("下载进度:" + percent + "%");
            }
        });
    }

这里没有再使用自己封装的网络访问工具类,使用第三方的开源项目进行 apk 的下载工作,但不知道为什么,下载进度显示不正确,可能是服务器的原因吧,因为我没有用本地服务器,算了,先不显示下载进度。
第三方开源项目叫 xUtils,GitHub 上面的项目,本文源代码中也有,下载后就有,但只是 jar 包。

5 安装 APK 文件

下载完成后,就开始安装 apk 文件了,代码如下:


    /**
     * 安装APK
     *
     * @param apkPath apk文件路径
     */
    private void installApk(String apkPath) {
        Log.d(TAG_LOG, "安装apk");
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive");
        startActivityForResult(intent, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //安装过程中,用户点击取消按钮
        startMainActivity();
    }

6 进入主界面

在以下几种情况,需要进入主界面:

  • 没有检测到新版本
  • 提示用户升级后,用户点击了“以后再说”按钮
  • 下载 apk 文件的过程中出错
  • 安装 apk 文件的过程中用户点击取消按钮

总结

本文比较简单,只是涉及到提示用户升级、下载 apk、安装 apk 三部分,所以速度比较快,可能会出错,欢迎纠错。

项目源码地址1(实时更新):https://github.com/xwdoor/MobileSafe
项目源码地址2:http://download.csdn.net/detail/xwdoor/9443633

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值