Commit bb553281 authored by 小费同学阿's avatar 小费同学阿 💬

强制更新主页添加实时检测版本

parent 0bab1e41
......@@ -3,8 +3,11 @@ package com.xx.merchanthbh.data.http.requst;
import com.xx.merchanthbh.data.http.BaseRespons;
import com.xx.merchanthbh.data.http.respons.HomeStatisticalBean;
import com.xx.merchanthbh.data.http.respons.MessageBean;
import com.xx.xxviewlibrary.model.VersionBean;
import com.xx.xxviewlibrary.model.VersionBody;
import io.reactivex.rxjava3.core.Observable;
import me.goldze.mvvmhabit.http.ApiParams;
import me.goldze.mvvmhabit.http.BasePageResponse;
import me.goldze.mvvmhabit.http.BaseResponse;
public class HomeRequest extends BaseRespons {
......@@ -15,6 +18,16 @@ public class HomeRequest extends BaseRespons {
return getApiService().getHomeStatistical();
}
/**
* 强制更新
*/
public Observable<BaseResponse<VersionBean>> checkVersion() {
return getApiService().getLineVersion(
new ApiParams<VersionBody>().setParams(
new VersionBody("2", "2")
)
);
}
/**
* 签到
......
......@@ -6,6 +6,8 @@ import com.xx.merchanthbh.data.http.respons.AdvertisingBean;
import com.xx.merchanthbh.data.http.respons.ConsultationInformationBean;
import com.xx.merchanthbh.data.http.respons.ConsultationTitleBean;
import com.xx.merchanthbh.data.local.LocalData;
import com.xx.xxviewlibrary.model.VersionBean;
import com.xx.xxviewlibrary.model.VersionBody;
import java.util.List;
......@@ -40,7 +42,16 @@ public class HuanBoHaiRequest extends BaseRespons {
RequestBody body=apiParams.setParams(requestBody);
return getApiService().getActivityList(body,page);
}
/**
* 强制更新
*/
public Observable<BaseResponse<VersionBean>> checkVersion() {
return getApiService().getLineVersion(
new ApiParams<VersionBody>().setParams(
new VersionBody("2", "2")
)
);
}
/**
* 获取广告列表
* @param companyId 所属公司ID
......
package com.xx.merchanthbh.ui.home;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.view.KeyEvent;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import com.xx.merchanthbh.BR;
import com.xx.merchanthbh.R;
import com.xx.merchanthbh.data.staticdata.StaticData;
import com.xx.merchanthbh.databinding.ActivityHomeBinding;
import com.xx.merchanthbh.ui.home.HomeFragment;
import com.tbruyelle.rxpermissions3.RxPermissions;
import com.xx.merchanthbh.ui.home.HomeViewModel;
import com.xx.merchanthbh.ui.huanbohai.HuanBoHaiFragment;
import com.xx.merchanthbh.ui.login.LoginActivity;
......
package com.xx.merchanthbh.ui.home;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
......@@ -9,6 +14,7 @@ import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import com.tbruyelle.rxpermissions3.RxPermissions;
import com.xx.merchanthbh.BR;
import com.xx.merchanthbh.R;
import com.xx.merchanthbh.data.http.requst.ConsultRequest;
......@@ -47,7 +53,35 @@ public class HomeFragment extends BaseFragment<FragmentHomeBinding, HomeViewMode
public int initVariableId() {
return BR.homeViewModel;
}
@Override
public void onResume() {
super.onResume();
// 检查版本
viewModel.rxPermissions = new RxPermissions(this);
/*检查版本*/
viewModel.checkVersion(binding.getRoot().getRootView());
// 安装新版本
viewModel.openInstall.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
if ("1".equals(s)) {
Uri packageURI = Uri.parse("package:" +getContext().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, 1002);
}
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + getContext().getPackageName()));
startActivityForResult(intent, 1024);
}
}
}
// 重写初始方法调用参数
@Override
public void initData() {
......
package com.xx.merchanthbh.ui.home;
import android.Manifest;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.core.content.FileProvider;
import androidx.databinding.ObservableField;
import androidx.lifecycle.MutableLiveData;
......@@ -35,13 +41,20 @@ import com.xx.merchanthbh.ui.point.StorePointsActivity;
import com.xx.merchanthbh.ui.productmanager.ProductManagerActivity;
import com.xx.merchanthbh.ui.recruitment.RecruitmentActivity;
import com.xx.merchanthbh.ui.share.ShareActivity;
import com.xx.xxviewlibrary.comm.CommTextDialog;
import com.xx.xxviewlibrary.comm.RefuseDialogBean;
import com.xx.xxviewlibrary.model.VersionBean;
import com.xx.xxviewlibrary.utils.CommUtilsKt;
import java.io.File;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.List;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.schedulers.Schedulers;
import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
......@@ -49,9 +62,12 @@ import me.goldze.mvvmhabit.http.ApiDisposableObserver;
import me.goldze.mvvmhabit.http.ApiDisposablePageObserver;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
import okhttp3.ResponseBody;
public class HomeViewModel extends BaseViewModel<HomeRequest> {
/*权限*/
RxPermissions rxPermissions;
public ObservableField<String> title = new ObservableField<>(LocalData.getMerchant().getStoreName());
//今日成交的绑定
......@@ -66,7 +82,8 @@ public class HomeViewModel extends BaseViewModel<HomeRequest> {
public MutableLiveData<Boolean> showSignDialog = new MutableLiveData<>();
public MerchantBean mb = LocalData.getMerchant();
/*安装新版本*/
public MutableLiveData<String> openInstall = new MutableLiveData<>("");
public HomeViewModel(@NonNull Application application) {
super(application);
}
......@@ -107,6 +124,148 @@ public class HomeViewModel extends BaseViewModel<HomeRequest> {
}
});
}
/**
* 获取最新APK版本号
*
* @param view
*/
public void checkVersion(View view) {
Log.v("版本更新", "版本更新");
model.checkVersion().compose(RxUtils.schedulersTransformer()) //线程调度
.doOnSubscribe(HomeViewModel.this)
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
}).subscribe(new ApiDisposableObserver<VersionBean>() {
@Override
public void onSuccess(VersionBean resultBean) {
Log.v("当前版本号", resultBean.getAppVersion());
StaticData.appVersionNumber = resultBean.getAppVersion();
if (CommUtilsKt.checkVersionUpdata(CommUtilsKt.getVersion(view.getContext()), resultBean.getAppVersion())) {
if (resultBean.getPushFlag().equals("1")) {
showCommTextDialog(new RefuseDialogBean("有新版本,是否更新?", "去更新", null, "更新提示"), new CommTextDialog.onAcceptCallBack() {
@Override
public void refuseBack() {
finish();
}
@Override
public void acceptBack() {
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
if (granted) {
// 处理权限已授予的情况
updataApk(view.getContext(), resultBean.getVersionFile(), view.getContext().getFilesDir().getPath() + resultBean.getVersionFile().substring(
resultBean.getVersionFile().lastIndexOf("/")));
} else {
// 处理权限被拒绝的情况
ToastUtils.showShort("请开启文件相关权限");
}
});
}
});
} else {
showCommTextDialog(new RefuseDialogBean("有新版本,是否更新?", "去更新", "取消", "更新提示"), new CommTextDialog.onAcceptCallBack() {
@Override
public void refuseBack() {
/*强制更新标识位变更--重置用户登录*/
StaticData.updateLogin = 1;
}
@Override
public void acceptBack() {
/*强制更新标识位变更--可以用户登录*/
StaticData.updateLogin = 0;
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.unsubscribeOn(Schedulers.io()) // 使订阅不可取消
.subscribe(granted -> {
if (granted) {
updataApk(view.getContext(), resultBean.getVersionFile(), view.getContext().getFilesDir().getPath() + resultBean.getVersionFile().substring(
resultBean.getVersionFile().lastIndexOf("/")));
} else {
ToastUtils.showShort("请开启文件相关权限");
}
});
}
});
}
} else {
/*强制更新标识位变更--重置用户登录*/
StaticData.updateLogin = 1;
}
}
@Override
public void onError(String Error) {
/*强制更新标识位变更--重置用户登录*/
StaticData.updateLogin = 1;
}
});
}
/**
* 下载APK
*
* @param context
* @param url  下载地址
* @param name  文件名字
*/
public void updataApk(Context context, String url, String name) {
/*执行传参方法*/
showDialog("正在下载...");
model.downFile(url, name).subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
Log.e("下载", "onSubscribe");
}
@Override
public void onNext(@io.reactivex.rxjava3.annotations.NonNull ResponseBody responseBody) {
}
@Override
public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
ToastUtils.showShort("下载失败");
dismissDialog();
}
@Override
public void onComplete() {
Log.e("下载要成功", "onComplete");
dismissDialog();
ToastUtils.showShort("下载成功");
installApk(context, name);
}
});
}
//跳转安装APP
private void installApk(Context context, String path) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
File file = new File(Uri.parse(path).getPath());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri uri = FileProvider.getUriForFile(context, "com.xx.merchanthbh.fileProvider", file);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
}
context.startActivity(intent);
}
public HomeViewModel(@NonNull Application application, HomeRequest model) {
super(application, model);
......
......@@ -5,7 +5,11 @@ import static com.xx.merchanthbh.utils.RetrofitClient.baseH5Url;
import static me.goldze.mvvmhabit.utils.Utils.Interceptor_TOKEN;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -13,6 +17,7 @@ import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import com.tbruyelle.rxpermissions3.RxPermissions;
import com.xx.merchanthbh.BR;
import com.xx.merchanthbh.R;
import com.xx.merchanthbh.data.http.requst.HuanBoHaiRequest;
......@@ -35,7 +40,35 @@ import me.goldze.mvvmhabit.base.BaseFragment;
/*环渤海页面*/
public class HuanBoHaiFragment extends BaseFragment<FragmentHuanbohaiBinding, HuanBoHaiViewModel> {
@Override
public void onResume() {
super.onResume();
// 检查版本
viewModel.rxPermissions = new RxPermissions(this);
/*检查版本*/
viewModel.checkVersion(binding.getRoot().getRootView());
// 安装新版本
viewModel.openInstall.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
if ("1".equals(s)) {
Uri packageURI = Uri.parse("package:" +getContext().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, 1002);
}
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + getContext().getPackageName()));
startActivityForResult(intent, 1024);
}
}
}
// 重写初始方法调用参数
@Override
public void initData() {
......
package com.xx.merchanthbh.ui.huanbohai;
import android.Manifest;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.content.FileProvider;
import androidx.lifecycle.MutableLiveData;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.schedulers.Schedulers;
import me.goldze.mvvmhabit.base.ListBaseViewModel;
import com.tbruyelle.rxpermissions3.RxPermissions;
import com.xx.merchanthbh.R;
import com.xx.merchanthbh.data.http.requst.HuanBoHaiRequest;
import com.xx.merchanthbh.data.http.respons.ActivityCenterBean;
......@@ -19,12 +30,19 @@ import com.xx.merchanthbh.data.http.respons.ConsultationInformationBean;
import com.xx.merchanthbh.data.http.respons.MerchantBean;
import com.xx.merchanthbh.data.local.LocalData;
import com.xx.merchanthbh.data.http.respons.ConsultationTitleBean;
import com.xx.merchanthbh.data.staticdata.StaticData;
import com.xx.merchanthbh.fragment.adapter.ConsultationInformationAdapter;
import com.xx.merchanthbh.fragment.adapter.ConsultationInformationTitleAdapter;
import com.xx.merchanthbh.ui.activities.ActivitiesActivity;
import com.xx.merchanthbh.ui.consult.ConsultationActivity;
import com.xx.merchanthbh.ui.home.HomeViewModel;
import com.xx.merchanthbh.ui.msg.MessageActivity;
import com.xx.xxviewlibrary.comm.CommTextDialog;
import com.xx.xxviewlibrary.comm.RefuseDialogBean;
import com.xx.xxviewlibrary.model.VersionBean;
import com.xx.xxviewlibrary.utils.CommUtilsKt;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
......@@ -36,9 +54,16 @@ import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.http.ApiDisposableObserver;
import me.goldze.mvvmhabit.http.ApiDisposablePageObserver;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
import okhttp3.ResponseBody;
public class HuanBoHaiViewModel extends ListBaseViewModel<HuanBoHaiRequest> {
/*权限*/
RxPermissions rxPermissions;
/*安装新版本*/
public MutableLiveData<String> openInstall = new MutableLiveData<>("");
// 创建活动中心实体对象
public MutableLiveData<List<AdvertisingBean>> AdvertisingList = new MutableLiveData<>(new ArrayList<>());
// 创建活动中心实体对象
......@@ -80,6 +105,149 @@ public class HuanBoHaiViewModel extends ListBaseViewModel<HuanBoHaiRequest> {
getConsultationsList();
getActivityCenterList();
}
/**
* 获取最新APK版本号
*
* @param view
*/
public void checkVersion(View view) {
Log.v("版本更新", "版本更新");
model.checkVersion().compose(RxUtils.schedulersTransformer()) //线程调度
.doOnSubscribe(HuanBoHaiViewModel.this)
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
}).subscribe(new ApiDisposableObserver<VersionBean>() {
@Override
public void onSuccess(VersionBean resultBean) {
Log.v("当前版本号", resultBean.getAppVersion());
StaticData.appVersionNumber = resultBean.getAppVersion();
if (CommUtilsKt.checkVersionUpdata(CommUtilsKt.getVersion(view.getContext()), resultBean.getAppVersion())) {
if (resultBean.getPushFlag().equals("1")) {
showCommTextDialog(new RefuseDialogBean("有新版本,是否更新?", "去更新", null, "更新提示"), new CommTextDialog.onAcceptCallBack() {
@Override
public void refuseBack() {
finish();
}
@Override
public void acceptBack() {
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
if (granted) {
// 处理权限已授予的情况
updataApk(view.getContext(), resultBean.getVersionFile(), view.getContext().getFilesDir().getPath() + resultBean.getVersionFile().substring(
resultBean.getVersionFile().lastIndexOf("/")));
} else {
// 处理权限被拒绝的情况
ToastUtils.showShort("请开启文件相关权限");
}
});
}
});
} else {
showCommTextDialog(new RefuseDialogBean("有新版本,是否更新?", "去更新", "取消", "更新提示"), new CommTextDialog.onAcceptCallBack() {
@Override
public void refuseBack() {
/*强制更新标识位变更--重置用户登录*/
StaticData.updateLogin = 1;
}
@Override
public void acceptBack() {
/*强制更新标识位变更--可以用户登录*/
StaticData.updateLogin = 0;
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.unsubscribeOn(Schedulers.io()) // 使订阅不可取消
.subscribe(granted -> {
if (granted) {
updataApk(view.getContext(), resultBean.getVersionFile(), view.getContext().getFilesDir().getPath() + resultBean.getVersionFile().substring(
resultBean.getVersionFile().lastIndexOf("/")));
} else {
ToastUtils.showShort("请开启文件相关权限");
}
});
}
});
}
} else {
/*强制更新标识位变更--重置用户登录*/
StaticData.updateLogin = 1;
}
}
@Override
public void onError(String Error) {
/*强制更新标识位变更--重置用户登录*/
StaticData.updateLogin = 1;
}
});
}
/**
* 下载APK
*
* @param context
* @param url  下载地址
* @param name  文件名字
*/
public void updataApk(Context context, String url, String name) {
/*执行传参方法*/
showDialog("正在下载...");
model.downFile(url, name).subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
Log.e("下载", "onSubscribe");
}
@Override
public void onNext(@io.reactivex.rxjava3.annotations.NonNull ResponseBody responseBody) {
}
@Override
public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
ToastUtils.showShort("下载失败");
dismissDialog();
}
@Override
public void onComplete() {
Log.e("下载要成功", "onComplete");
dismissDialog();
ToastUtils.showShort("下载成功");
installApk(context, name);
}
});
}
//跳转安装APP
private void installApk(Context context, String path) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
File file = new File(Uri.parse(path).getPath());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri uri = FileProvider.getUriForFile(context, "com.xx.merchanthbh.fileProvider", file);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
}
context.startActivity(intent);
}
//调用活动中心的接口信息
public void getActivityCenterList() {
......
......@@ -34,6 +34,7 @@ public class LogOffActivity extends BaseActivity<ActivityLogOffBinding, LogOffVi
super.onResume();
// 手动更新页面UI内容
updateUI();
}
/*更新页面,注销标志位做判断*/
......
......@@ -4,7 +4,9 @@ import static com.xx.merchanthbh.utils.RetrofitClient.baseImgUrl;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
......@@ -113,5 +115,30 @@ public class MineFragment extends BaseFragment<FragmentMineBinding, MineViewMode
public void onResume() {
super.onResume();
viewModel.refreshNickName();
// 检查版本
viewModel.rxPermissions = new RxPermissions(this);
/*检查版本*/
viewModel.checkVersion(binding.getRoot().getRootView());
// 安装新版本
viewModel.openInstall.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
if ("1".equals(s)) {
Uri packageURI = Uri.parse("package:" +getContext().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, 1002);
}
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + getContext().getPackageName()));
startActivityForResult(intent, 1024);
}
}
}
}
\ No newline at end of file
......@@ -33,6 +33,7 @@
android:id="@+id/ll_tips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_marginTop="22dp"
android:orientation="vertical">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment