Android版本更新

版本更新主要是检测当前应用版本号和服务器版本号相比较,如果当前应用版本号与服务器版本号不同,则提示用户进行更新,然后下载APK文件并进行安装。
我这里使用的是xutils来下载文件。

onCreat函数,直接显示了提示更新的对话框

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addinfo);
        context = AddInfoActivity.this;
        HttpUtils http = new HttpUtils();
        http.send(HttpMethod.POST, "http://10.168.6.79:8080/NSTGPS/NSTGPSController", new RequestCallBack<String>() {

            @Override
            public void onFailure(HttpException arg0, String arg1) {

            }

            @Override
            public void onSuccess(ResponseInfo<String> response) {
                //获取当前版本号的方法在下面getVersionName(),测试方便这里并没有进行比较。
                String version = response.result;

                Dialog dialog = new AlertDialog.Builder(context).setTitle("版本更新").setMessage("检测到新版本,是否立即更新?")
                        .setPositiveButton("立即更新", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        downLoadApk();
                    }
                }).setNegativeButton("暂不更新", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                }).create();
                dialog.show();
            }
        });
    }

当点击立即更新按钮时会调用下载文件方法,在这个方法里会创建并显示一个进度条提示框,进度与下载进度相同步,下载完后直接在本方法里调用了安装界面。

/*
     * 下载APK
     */
    protected void downLoadApk() {

        // 进度条对话框
        final ProgressDialog progressDialog = new ProgressDialog(context);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMessage("正在下载更新...");
        progressDialog.show();
        final File apkFile = new File(Environment.getExternalStorageDirectory(), "AppName.apk");
        HttpUtils httpd = new HttpUtils();
        httpd.download("http://10.168.6.79:8080/NSTGPS/apk/xxx.apk", apkFile.getPath(), new RequestCallBack<File>() {

            // 更新进度条
            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                super.onLoading(total, current, isUploading);
                progressDialog.setProgress((int) ((double) current / (double) total * 100));
            }

            @Override
            public void onFailure(HttpException arg0, String arg1) {

            }

            @Override
            public void onSuccess(ResponseInfo<File> arg0) {
                installApk(apkFile);
                progressDialog.dismiss();
            }
        });
    }

    /*
     * 安装apk
     */
    protected void installApk(File file) {
        Intent intent = new Intent();
        // 执行动作
        intent.setAction(Intent.ACTION_VIEW);
        // 执行的数据类型
        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
        startActivity(intent);
    }

最后附上获取当前版本号代码

/*
     * 获取当前程序的版本号
     */
    private String getVersionName() {
        // 获取packagemanager的实例
        PackageManager packageManager = getPackageManager();
        // getPackageName()是你当前类的包名,0代表是获取版本信息
        PackageInfo packInfo = null;
        try {
            packInfo = packageManager.getPackageInfo(getPackageName(), 0);
            return packInfo.versionName;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

大功告成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值