Android 版本更新

//版本更新
implementation 'com.github.maning0303:MNUpdateAPK:V2.0.3'
//网络请求
implementation 'com.zhy:okhttputils:2.6.2'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.google.code.gson:gson:2.8.5'
//申请SD卡权限
if (!PermissionUtils.isGrantSDCardReadPermission(getActivity())) {
    PermissionUtils.requestSDCardReadPermission(getActivity(), 100);
} else {
    UpdateApk();
}

 

/**获取参数指定的网页代码,将其返回给调用者,由调用者对其解析
     * 返回String
     */

    private void UpdateApk() {
        //第二种
        OkHttpUtils
                .get()
                .url(UrlConfig.UpdateApk)
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        e.printStackTrace();
                        Log.e("请求异常:", "err"+e);
                    }

                    @Override
                    public void onResponse(String response, int id) {
                        Log.e("请求成功:", "onRespons"+response);

                        try {
                            JSONObject object = new JSONObject(response);
                            UpdateApkBean01 company = MyUtils.getGson().fromJson(response, UpdateApkBean01.class);
                            //apk现在版本信息
                            double versionCode = APKVersionCodeUtils.getVersionCode(getActivity());
                            String versionName = APKVersionCodeUtils.getVerName(getActivity());
                            double num1 = 0.0;
                            num1 = Double.valueOf(versionName);
                            BigDecimal versionCode1 = new BigDecimal(num1);
                            //后台返回apk版本信息
                            double newVersion = company.getNewVersion();
                            int isMust = company.getIsMust();
                            BigDecimal newVersion2 = new BigDecimal(newVersion);
                            if (compare(versionCode1, newVersion2) == 2){
                                if (company != null && company.getApkData() != null && company.getApkData().size()> 0) {
                                   String apkName =  company.getApkData().get(company.getApkData().size()-1).getApkName();

                                    verifyStoragePermissions(getActivity());
//                                    final BaseapkBean a = new Gson().fromJson(response, new TypeToken<BaseapkBean>() {
//                                    }.getType()); 

                                    loadApk("https://------/android-apk/patrol/apk/"+apkName);


                                }

                            }else {
                                ToastUtil.showToast(getActivity(),"暂无新版本!");
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                });
    }
  /**
     * 下载app
      * @param url
     */
    public void loadApk(String url) {

        pd = ProgressDialog.show(getActivity(), "提示", "版本更新中请稍后", false, true);

            InstallUtils.with(getActivity())
                    //必须-下载地址
                    .setApkUrl(url)
                    //非必须-下载保存的文件的完整路径+name.apk
                    .setApkPath(Constants.APK_SAVE_PATH)
                    //非必须-下载回调
                    .setCallBack(new InstallUtils.DownloadCallBack() {
                        @Override
                        public void onStart() {
                            //下载开始
                        }

                        @Override
                        public void onComplete(String path) {

                            //下载完成
                            //先判断有没有安装权限---适配8.0
                            //如果不想用封装好的,可以自己去实现8.0适配
                            InstallUtils.checkInstallPermission(getActivity(), new InstallUtils.InstallPermissionCallBack() {
                                @Override
                                public void onGranted() {
                                    //去安装APK
                                    //安装APK
                                    InstallUtils.installAPK(getActivity(), path, new InstallUtils.InstallCallBack() {
                                        @Override
                                        public void onSuccess() {
                                            //onSuccess:表示系统的安装界面被打开
                                            //防止用户取消安装,在这里可以关闭当前应用,以免出现安装被取消
                                            if (pd.isShowing())
                                            pd.dismiss();
                                            Toast.makeText(getActivity(), "正在安装程序", Toast.LENGTH_SHORT).show();
                                        }

                                        @Override
                                        public void onFail(Exception e) {
                                            if (pd.isShowing())
                                                pd.dismiss();
                                            //安装出现异常,这里可以提示用用去用浏览器下载安装
                                        }
                                    });

                                    //取消下载
                                    InstallUtils.cancleDownload();

                                    //是否正在下载
                                    InstallUtils.isDownloading();

                                    //单独设置下载监听
                                    InstallUtils.setDownloadCallBack(new InstallUtils.DownloadCallBack() {
                                        @Override
                                        public void onStart() {

                                        }

                                        @Override
                                        public void onComplete(String path) {

                                        }

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

                                        }

                                        @Override
                                        public void onFail(Exception e) {

                                        }

                                        @Override
                                        public void cancle() {

                                        }
                                    });
                                }

                                @Override
                                public void onDenied() {
                                    //弹出弹框提醒用户
                                    AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
                                            .setTitle("温馨提示")
                                            .setMessage("必须授权才能安装APK,请设置允许安装")
                                            .setNegativeButton("取消", null)
                                            .setPositiveButton("设置", new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialog, int which) {
                                                    //打开设置页面
                                                    InstallUtils.openInstallPermissionSetting(getActivity(), new InstallUtils.InstallPermissionCallBack() {
                                                        @Override
                                                        public void onGranted() {
                                                            //去安装APK
                                                            InstallUtils.installAPK(getActivity(), path, new InstallUtils.InstallCallBack() {
                                                                @Override
                                                                public void onSuccess() {
                                                                    //onSuccess:表示系统的安装界面被打开
                                                                    //防止用户取消安装,在这里可以关闭当前应用,以免出现安装被取消
                                                                    Toast.makeText(getActivity(), "正在安装程序", Toast.LENGTH_SHORT).show();
                                                                }

                                                                @Override
                                                                public void onFail(Exception e) {
                                                                    Toast.makeText(getActivity(), "安装失败:" + e.toString(), Toast.LENGTH_SHORT).show();
                                                                    if (pd.isShowing())
                                                                        pd.dismiss();
                                                                }
                                                            });
                                                        }

                                                        @Override
                                                        public void onDenied() {
                                                            //还是不允许咋搞?
                                                            Toast.makeText(getActivity(), "不允许安装咋搞?强制更新就退出应用程序吧!", Toast.LENGTH_SHORT).show();
                                                        }
                                                    });
                                                }
                                            })
                                            .create();
                                    alertDialog.show();
                                }
                            });

                        }

                        @Override
                        public void onLoading(long total, long current) {
                            //下载中
                        }

                        @Override
                        public void onFail(Exception e) {
                            //下载失败
                        }

                        @Override
                        public void cancle() {
                            //下载取消
                        }
                    })
                    //开始下载
                    .startDownload();
 }

 

/**
 * 动态获取储存的权限
 */
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        "android.permission.READ_EXTERNAL_STORAGE",
        "android.permission.WRITE_EXTERNAL_STORAGE" };
public static void verifyStoragePermissions(Activity activity) {

    try {
        //检测是否有写的权限
        int permission = ActivityCompat.checkSelfPermission(activity,
                "android.permission.WRITE_EXTERNAL_STORAGE");
        if (permission != PackageManager.PERMISSION_GRANTED) {
            // 没有写的权限,去申请写的权限,会弹出对话框
            ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public int compare(BigDecimal val1, BigDecimal val2) {
    int result = 0;
    if (val1.compareTo(val2) < 0) {
    // result = "第二位数大";
        result = 2;
    }
    if (val1.compareTo(val2) == 0) {
    // result = "两位数一样大!";
        result = 0;
    }
    if (val1.compareTo(val2) > 0) {
    // result = "第一位数大!";
        result = 1;
    }
    return result;
}

 

 

private final String[][] MIME_MapTable={
        //{后缀名,MIME类型}
        {".3gp",    "video/3gpp"},
        {".apk",    "application/vnd.android.package-archive"},
        {".asf",    "video/x-ms-asf"},
        {".avi",    "video/x-msvideo"},
        {".bin",    "application/octet-stream"},
        {".bmp",    "image/bmp"},
        {".c",  "text/plain"},
        {".class",  "application/octet-stream"},
        {".conf",   "text/plain"},
        {".cpp",    "text/plain"},
        {".doc",    "application/msword"},
        {".docx",   "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
        {".xls",    "application/vnd.ms-excel"},
        {".xlsx",   "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
        {".exe",    "application/octet-stream"},
        {".gif",    "image/gif"},
        {".gtar",   "application/x-gtar"},
        {".gz", "application/x-gzip"},
        {".h",  "text/plain"},
        {".htm",    "text/html"},
        {".html",   "text/html"},
        {".jar",    "application/java-archive"},
        {".java",   "text/plain"},
        {".jpeg",   "image/jpeg"},
        {".jpg",    "image/jpeg"},
        {".js", "application/x-javascript"},
        {".log",    "text/plain"},
        {".m3u",    "audio/x-mpegurl"},
        {".m4a",    "audio/mp4a-latm"},
        {".m4b",    "audio/mp4a-latm"},
        {".m4p",    "audio/mp4a-latm"},
        {".m4u",    "video/vnd.mpegurl"},
        {".m4v",    "video/x-m4v"},
        {".mov",    "video/quicktime"},
        {".mp2",    "audio/x-mpeg"},
        {".mp3",    "audio/x-mpeg"},
        {".mp4",    "video/mp4"},
        {".mpc",    "application/vnd.mpohun.certificate"},
        {".mpe",    "video/mpeg"},
        {".mpeg",   "video/mpeg"},
        {".mpg",    "video/mpeg"},
        {".mpg4",   "video/mp4"},
        {".mpga",   "audio/mpeg"},
        {".msg",    "application/vnd.ms-outlook"},
        {".ogg",    "audio/ogg"},
        {".pdf",    "application/pdf"},
        {".png",    "image/png"},
        {".pps",    "application/vnd.ms-powerpoint"},
        {".ppt",    "application/vnd.ms-powerpoint"},
        {".pptx",   "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
        {".prop",   "text/plain"},
        {".rc", "text/plain"},
        {".rmvb",   "audio/x-pn-realaudio"},
        {".rtf",    "application/rtf"},
        {".sh", "text/plain"},
        {".tar",    "application/x-tar"},
        {".tgz",    "application/x-compressed"},
        {".txt",    "text/plain"},
        {".wav",    "audio/x-wav"},
        {".wma",    "audio/x-ms-wma"},
        {".wmv",    "audio/x-ms-wmv"},
        {".wps",    "application/vnd.ms-works"},
        {".xml",    "text/plain"},
        {".z",  "application/x-compress"},
        {".zip",    "application/x-zip-compressed"},
        {"",        "*/*"}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值