Android应用更新apk

在Android应用开发中经常要更新apk

根据当前的应用的versionCode和服务器中的给的versionCode进行比较,判断是否需要更新apk。
xUtils的使用方式:
1.将xUtils的jar包放到项目的libs下,在右键jar包选择Add as Library就可以啦。

public void initData(){
        try {
            //获取当前应用的版本号
            PackageManager manager = this.getPackageManager();
            PackageInfo packageInfo = manager.getPackageInfo(getPackageName(), 0);
            int versionCode = packageInfo.versionCode;

            mTvVersion.setText(versionCode);

            //服务器的请求地址
            String serviceUrl = "";
            URL url = new URL(serviceUrl);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(3000);
            //设置网络请求方式
            connection.setRequestMethod("GET");

            if (200 == connection.getResponseCode()){
                InputStream is = connection.getInputStream();
                String json = StreamUtil.readStream(is);
                JSONObject jsonObject = new JSONObject(json);
                //获取服务器的versionCode
                int serverCode = jsonObject.getInt("versionCode");
                //获取更新的apk的描述
                mApkDesc = jsonObject.getString("versionDesc");
                //获取服务器返回的更新apk的url
                mUpDataUrl = jsonObject.getString("versionUrl");
                //服务器的版本号大于当前的版本号,提示更新
                if (versionCode < serverCode){
                    //在子线程中不允许弹toast和dialog
                    //runOnUiThread()实际是调用的handler的post()方法
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                          showUpDataDialog();
                        }
                    });

                }else {
                    loginMain();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    private void loginMain() {
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(SplashActivity.this , MainActivity.class));

            }
        } , 1000);
    }

    private void showUpDataDialog() {
        final AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setTitle("更新应用");
        dialog.setMessage(mApkDesc);
        dialog.setPositiveButton("立即更新", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                //下载apk
                performDownloadApk();

            }
        });

        dialog.setNegativeButton("忽略更新", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                loginMain();
            }
        });

        // dialog.show();  实际上也是调用了creat()方法。再show的
        //外部点击不能取消,并且返回键也不能
        // dialog.setCancelable(false);
        AlertDialog alertDialog = dialog.create();
        //点击外部对话框不消失,点击返回键或者home键对话框消失
        alertDialog.setCanceledOnTouchOutside(false);
        alertDialog.show();
    }

    /**
     * 执行下载apk
     */
    private void performDownloadApk() {
        //用xUtils进行网络数据下载
        HttpUtils http = new HttpUtils();
        final File file = new File(Environment.getExternalStorageDirectory() , System.currentTimeMillis()+".apk");

        final ProgressDialog dialog = new ProgressDialog(this);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.show();
        http.download(mUpDataUrl, file.getAbsolutePath(), true , new RequestCallBack<File>() {
            @Override
            public void onSuccess(ResponseInfo<File> responseInfo) {
                dialog.dismiss();
                installApk(file);
            }

            @Override
            public void onFailure(HttpException e, String s) {
                dialog.dismiss();

            }

            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                super.onLoading(total, current, isUploading);
                dialog.setMax((int) total);
                dialog.setProgress((int) current);
            }
        });
    }

    /**
     * 安装apk
     */
    private void installApk(File file) {
        //调用系统的安装功能
       /* <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="content" />
        <data android:scheme="file" />
        <data android:mimeType="application/vnd.android.package-archive" />
        </intent-filter>*/
        Intent intent = new Intent();
        intent.setAction("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        Uri uri = Uri.fromFile(file);
        intent.setDataAndType(uri ,"application/vnd.android.package-archive" );

        //加上这个标记,让他存在一个单独的栈中
        //是为了安装完成后提示是进入应用还是关闭应用
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值