This commit is contained in:
2025-11-18 15:12:24 +08:00
parent c173c425ce
commit a7d2035e70
1361 changed files with 367452 additions and 0 deletions
@@ -0,0 +1,337 @@
package cn.shangyu.gdxzExpert.utils;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import com.github.dfqin.grantor.PermissionListener;
import com.github.dfqin.grantor.PermissionsUtil;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.HttpHandler;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import androidx.annotation.NonNull;
import cn.shangyu.gdxzExpert.BuildConfig;
import cn.shangyu.gdxzExpert.R;
import cn.shangyu.gdxzExpert.bean.VersionBean;
import cn.shangyu.gdxzExpert.http.HttpHelper;
import cn.shangyu.gdxzExpert.ui.CustomProgressDialog;
import cn.shangyu.gdxzExpert.widget.ECAlertDialog;
public class UpdateVersionUtils {
private static String des = null;// 版本描述
private static String apkurl = null;// 新版本url
private static String version;// 版本
public static CustomProgressDialog dialog;
private static ECAlertDialog buildAlert;
private static Context ct;
/**
* 检查更新
*
* @param
*/
public static void checkUpdate(Context context, final String url, final boolean isShowProgressDialog) {
ct = context;
if (0 == CommonUtil.isNetworkAvailable(context)) {
ToastUtil.showToast("无网络,请检查网络连接!");
return;
}
if (isShowProgressDialog) {
dialog = (CustomProgressDialog) DialogUtil.createProgressDialog(context, "检查更新中...");
dialog.show();
}
RequestParams params = new RequestParams();
params.addBodyParameter("appType", String.valueOf(1));// 1专家端 2患者端 必填
params.addBodyParameter("sysType", String.valueOf(1));// 1.android 2.ios
// 必填
HttpHelper.loadData(HttpMethod.POST, url, params,
new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> arg0) {
// TODO Auto-generated method stub
LogUtil.i("数据请求成功: " + arg0.result);
checkIsUpdate(arg0.result,isShowProgressDialog);
}
@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO Auto-generated method stub
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
LogUtil.i("检查更新失败了: " + arg1);
if (isShowProgressDialog) {
ToastUtil.showToast("检查更新失败,请稍候再试");
}
}
});
}
private static void checkIsUpdate(String result, boolean isShowProgressDialog) {
// TODO Auto-generated method stub
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
VersionBean versionBean = GsonTools.fromGsonToBean(result, VersionBean.class);
String code = versionBean.code;
String message = versionBean.message;
if ("1".equals(code)) {
if (versionBean.data == null) {
if (isShowProgressDialog) {
ToastUtil.showToast("当前为最新版本无需更新");
}
return;
}
version = versionBean.data.version;
des = versionBean.data.intro;
apkurl = versionBean.data.path;
if (!StringUtil.isEmpty(version)) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(version);
if(!isNum.matches()){
if (isShowProgressDialog) {
ToastUtil.showToast("当前为最新版本无需更新");
}
return;
}
}
if (StringUtil.isEmpty(version) || StringUtil.isEmpty(apkurl) || getVerCode() == -1 || getVerCode() >= Long.parseLong(version)) {
// 版本一致,没有新版本,
if (isShowProgressDialog) {
ToastUtil.showToast("当前为最新版本无需更新");
}
} else {
// 有新版本,弹出一升级对话框
if (getVerCode() < Long.parseLong(version)) {
showUpdateDialog();
}
// showUpdateDialog();
}
} else {
ToastUtil.showToast(message);
}
}
private static void showUpdateDialog() {
if (StringUtil.isEmpty(des)) {
des = "有新的版本,是否更新?";
}
buildAlert = ECAlertDialog.buildAlert(ct, des,
"下次再说", "后台升级", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {// 取消
// TODO Auto-generated method stub
buildAlert.dismiss();
}
}, new DialogInterface.OnClickListener() {// 下载升级
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (com.github.dfqin.grantor.PermissionsUtil.hasPermission(ct, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 下载
downloadApp();
} else {
PermissionsUtil.requestPermission((Activity)ct, new PermissionListener() {
@Override
public void permissionGranted(@NonNull String[] permissions) {
// 下载
downloadApp();
}
@Override
public void permissionDenied(@NonNull String[] permissions) {
//用户拒绝了访问读写的申请
//
}
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE});
}
} else {
// 下载
downloadApp();
}
}
});
buildAlert.setTitle(R.string.app_tip);
buildAlert.setCanceledOnTouchOutside(false);
buildAlert.show();
}
private static HttpHandler<File> hand;
private static int progress = 0;
private static void downloadApp() {
// 下载apk,并且安装
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// sdcard存在
HttpUtils http = new HttpUtils();
//下载的路径,及app安装包的命名
//***************************************************
hand = http.download(apkurl, Environment
.getExternalStorageDirectory().getAbsolutePath()
+ "/gdxzExpert/app" + "/gdxzExpert_" + version + ".apk",
false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
false, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。
new RequestCallBack<File>() {
@Override
public void onStart() {
ToastUtil.showToast("后台下载中,下载完成自动安装。");
// 显示更新进度对话框
// updateDialog();
}
@Override
public void onLoading(long total, long current,
boolean isUploading) {
progress = (int) (current * 100 / total);
LogUtil.i("下载进度:"+progress);
// 设置进度值
// setDialogProgress(progress);
}
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
ToastUtil.showToast("下载成功!");
installAPK(responseInfo.result);
}
@Override
public void onFailure(HttpException error, String msg) {
// ToastUtil.showToast("下载失败!");
//maybe the file has downloaded completely
// if (msg.contains("maybe the file has downloaded completely")) {
//
// }
LogUtil.i("下载失败:"+error+msg);
}
});
} else {
ToastUtil.showToast("SD卡已拔出,无法下载");
return;
}
}
/**
* 设置进度 setProgress
*
* @param progress
* void
*/
private void setDialogProgress(int progress) {
// TODO Auto-generated method stub
DialogUtil.setMessage("正在下载,已完成" + progress + "%");
DialogUtil.setProgress(progress);
}
/**
* 显示下载升级进度的对话框 updateDialog
*
* void
*/
private void updateDialog() {
// TODO Auto-generated method stub
DialogUtil.getMyProDialog(ct, "取消下载", "正在下载,已完成"
+ progress + "%", new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 调用cancel()方法停止下载
hand.cancel();
}
});
}
// 安装APK
private static void installAPK(File t) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.fromFile(t),
"application/vnd.android.package-archive");
ct.startActivity(intent);
}
/**
* 得到应用程序的版本
*/
public static String getVersionName() {
// try {
// 管理手机的APP
// PackageManager packageManager = UIUtils.getContext().getPackageManager();
// 得到APP功能清单文件
// PackageInfo info = packageManager.getPackageInfo(UIUtils.getContext().getPackageName(), 0);
return BuildConfig.VERSION_NAME;
// } catch (NameNotFoundException e) {
// e.printStackTrace();
// }
// return null;
}
/**
* 得到应用程序的版本
*/
public static int getVerCode() {
// int verCode = -1;
// try {
// // 管理手机的APP
// PackageManager packageManager = UIUtils.getContext().getPackageManager();
// // 得到APP功能清单文件
// PackageInfo info = packageManager.getPackageInfo(UIUtils.getContext().getPackageName(), 0);
return BuildConfig.VERSION_CODE;
// } catch (NameNotFoundException e) {
// e.printStackTrace();
// }
// return verCode;
}
/**
* 判断新的版本是否大于当前版本
* */
public static boolean isUpdataInfo(String versionName,String newVersion){
String[] split = versionName.split("\\.");
String[] split1 = newVersion.split("\\.");
int i = Integer.parseInt(split[0]);
int i1 = Integer.parseInt(split1[0]);
int j = Integer.parseInt(split[1]);
int j1 = Integer.parseInt(split1[1]);
int k = Integer.parseInt(split[2]);
int k1 = Integer.parseInt(split1[2]);
if (i1>i){
return true;
}else if (j1>j&&i1>=i){
return true;
}else if (k1>k&&j1>=j&&i1>=i){
return true;
}else
return false;
}
}