android app开发之app本地更新

android app通过本地接口的实现更新功能:

在这里通过xutils3下载文件,框架在这里我就不做详细的概述。如需了解请点击后面的链接查看官方文档。点击打开链接

如果需要直接使用请在在build.gradle 文件中添加 

compile 'org.xutils:xutils:3.3.40'



public class UpdateActivity extends AppCompatActivity {
    ProgressDialog progressDialog;
    private String BASE_PATH;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update);

        if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
            /* 得到SD卡得路径 */
            BASE_PATH = Environment.getExternalStorageDirectory().getPath() + "/zhuawar.apk";
            /* 更新所有录音文件到List中 */
            doNewVersionUpdate();
        } else {
            Toast.makeText(this, "没有SD卡", Toast.LENGTH_LONG).show();
        }


    }


    private void doNewVersionUpdate() {
//        int verCode = Config.getVerCode(this);
//        String verName = Config.getVerName(this);
        StringBuffer sb = new StringBuffer();
        sb.append("当前版本:");
        sb.append("1.2.2");
        sb.append(" Code:");
        sb.append("0");
        sb.append(", 发现新版本:");
        sb.append("1.2.3");
        sb.append(" Code:");
        sb.append("0");
        sb.append(", 是否更新?");
        Dialog dialog = new AlertDialog.Builder(this)
                .setTitle("软件更新")
                .setMessage(sb.toString())
// 设置内容
                .setPositiveButton("更新",// 设置确定按钮
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                                int which) {
                                progressDialog = new ProgressDialog(UpdateActivity.this);
                                progressDialog.setProgressNumberFormat("%1d kb/%2d kb");
                                progressDialog.setTitle("正在下载");
                                progressDialog.setMessage("请稍候...");
                                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                                progressDialog.show();

                                downloadFile("http://www.aidpet.cn/zhuawar.apk", BASE_PATH);
                            }
                        })
//                .setNegativeButton("暂不更新",
//                        new DialogInterface.OnClickListener() {
//                            public void onClick(DialogInterface dialog,
//                                                int whichButton) {
 点击"取消"按钮之后退出程序
//                                finish();
//                            }
//                        })
                .create();// 创建
// 显示对话框
        dialog.show();
    }

    /**
     * 下载app
     *
     * @param url  app的下载链接
     * @param path 保存地址
     */
    private void downloadFile(final String url, String path) {
        RequestParams requestParams = new RequestParams(url);
        requestParams.addHeader("Accept-Encoding", "identity");
        requestParams.setSaveFilePath(path);
        x.http().get(requestParams, new Callback.ProgressCallback<File>() {
            @Override
            public void onWaiting() {

            }

            @Override
            public void onStarted() {

            }

            @Override
            public void onLoading(long total, long current, boolean isDownloading) {

                progressDialog.setMax((int) total);
                progressDialog.setProgress((int) current);
            }

            @Override
            public void onSuccess(File result) {
                Toast.makeText(UpdateActivity.this, "下载成功", Toast.LENGTH_SHORT).show();
                progressDialog.dismiss();

                installPackage();
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                ex.printStackTrace();
                Toast.makeText(UpdateActivity.this, "下载失败,请检查网络和SD卡", Toast.LENGTH_SHORT).show();
                progressDialog.dismiss();
            }

            @Override
            public void onCancelled(CancelledException cex) {
            }

            @Override
            public void onFinished() {
            }
        });
    }


    /**
     * 安装下载好的apk文件
     */
    private void installPackage() {
        File file = new File(BASE_PATH);
        if (file.exists()) {
            Intent intent = new Intent();
            intent.setAction("android.intent.action.VIEW");
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
            startActivity(intent);
        } else {
            ToastUtil.showShortToast(this, "文件下载错误,请重新下载!");
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值