用户同意权限后没有dismiss ,加个背景圆角吧 好丑,再加点边距
package com.kmilesaway.golfbat.ui.home;
import android.Manifest;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.location.LocationManager;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.amap.api.maps.MapsInitializer;
import com.amap.api.services.core.ServiceSettings;
import com.azhon.appupdate.config.UpdateConfiguration;
import com.azhon.appupdate.listener.OnButtonClickListener;
import com.azhon.appupdate.listener.OnDownloadListenerAdapter;
import com.azhon.appupdate.manager.DownloadManager;
import com.blankj.utilcode.util.LogUtils;
import com.bumptech.glide.Glide;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.kmilesaway.golfbat.R;
import com.kmilesaway.golfbat.adapter.ScheduleFragmentAdapter;
import com.kmilesaway.golfbat.base.BaseApplication;
import com.kmilesaway.golfbat.base.BaseMvpFragment;
import com.kmilesaway.golfbat.bean.BagStorageBean;
import com.kmilesaway.golfbat.bean.CutCaddieBean;
import com.kmilesaway.golfbat.bean.HotUpdateBean;
import com.kmilesaway.golfbat.bean.MsgWs;
import com.kmilesaway.golfbat.bean.ScheduleServiceBean;
import com.kmilesaway.golfbat.bean.UserBean;
import com.kmilesaway.golfbat.bean.WsSetBean;
import com.kmilesaway.golfbat.contract.ScheduleContract;
import com.kmilesaway.golfbat.net.MainConstant;
import com.kmilesaway.golfbat.presenter.SchedulePresenter;
import com.kmilesaway.golfbat.service.BackService;
import com.kmilesaway.golfbat.service.DaemonService;
import com.kmilesaway.golfbat.ui.dialog.ServiceHintDialog;
import com.kmilesaway.golfbat.ui.home.ballaffirm.BallAffirmActivity;
import com.kmilesaway.golfbat.ui.home.balloffice.RangingScoringActivity;
import com.kmilesaway.golfbat.ui.match.MatchSelectListActivity;
import com.kmilesaway.golfbat.utils.AppUtils;
import com.kmilesaway.golfbat.utils.DateUtils;
import com.kmilesaway.golfbat.utils.EventBusUtils;
import com.kmilesaway.golfbat.utils.EventCode;
import com.kmilesaway.golfbat.utils.EventMessage;
import com.kmilesaway.golfbat.utils.RegexUtils;
import com.kmilesaway.golfbat.utils.SPUtils;
import com.kmilesaway.golfbat.utils.ToastUtils;
import com.kmilesaway.golfbat.utils.UiUtils;
import com.kmilesaway.golfbat.weight.MyDialog;
import com.kmilesaway.golfbat.weight.NavigationDialog;
import com.kmilesaway.golfbat.weight.RoundImageView;
import com.kmilesaway.golfbat.weight.SpacesItemDecoration;
import com.kmilesaway.golfbat.weight.calender.GetDateBean;
import com.kmilesaway.golfbat.weight.calender.MNCalendar;
import com.kmilesaway.golfbat.weight.listener.OnCalendarChangeListener;
import com.lxj.xpopup.XPopup;
import com.permissionx.guolindev.PermissionX;
import com.permissionx.guolindev.callback.ExplainReasonCallback;
import com.permissionx.guolindev.callback.ForwardToSettingsCallback;
import com.permissionx.guolindev.callback.RequestCallback;
import com.permissionx.guolindev.request.ExplainScope;
import com.permissionx.guolindev.request.ForwardScope;
import com.scwang.smart.refresh.header.ClassicsHeader;
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
/**
* @author lisong
* @date 2022/2/8.
* GitHub:
* Email:
* Description:日程
*/
public class ScheduleFragment extends BaseMvpFragment<SchedulePresenter> implements ScheduleContract.View, OnButtonClickListener {
@BindView(R.id.rcy)
RecyclerView rcy;
@BindView(R.id.refreshLayout)
SmartRefreshLayout refreshLayout;
/*下线*/
@BindView(R.id.Offline)
TextView Offline;
/*上线*/
@BindView(R.id.goonline)
TextView goonline;
/*姓名*/
@BindView(R.id.name)
TextView name;
@BindView(R.id.roundimagview)
RoundImageView roundimagview;
/*工号*/
@BindView(R.id.jobnumber)
TextView jobnumber;
/*任务数量*/
@BindView(R.id.task_number)
TextView taskNumber;
@BindView(R.id.tvSchedulingPlan)
TextView tvSchedulingPlan;
private ScheduleFragmentAdapter adapter;
private int status;// 1-上线 0-下线
private int userId;
private DownloadManager manager;
private boolean is_force_update;
private int pos;
private boolean isOnResume;
private NavigationDialog timebottomSheetDialog;
private List<GetDateBean.MonthBean> monthList = new ArrayList<>();
private String date, time;
private MNCalendar mnCalendar;
private List<ScheduleServiceBean> scheduleList = new ArrayList<>();
@Override
protected int getLayoutId() {
return R.layout.fragment_schedule;
}
@Override
protected void initView(View view) {
date = DateUtils.getSystemTimes();
time = DateUtils.dataY_M_D(date);
ServiceSettings.updatePrivacyShow(getActivity(), true, true);
ServiceSettings.updatePrivacyAgree(getActivity(), true);
// EventBusUtils.post(new EventMessage<>(EventCode.EVENT_SOCKET, "refresh"));
rcy.setLayoutManager(new LinearLayoutManager(getActivity()));
adapter = new ScheduleFragmentAdapter();
View emptyView = LayoutInflater.from(getContext()).inflate(R.layout.no_data, null, false);
adapter.setEmptyView(emptyView);
rcy.setAdapter(adapter);
rcy.addItemDecoration(new SpacesItemDecoration(UiUtils.dip2px(getActivity(), 6)));
adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
switch (view.getId()) {
case R.id.entergame:
permissionMain(position);
// if (!isLocServiceEnable()) {
// MyDialog dialog = new MyDialog(getActivity(), R.style.mdialog,
// new MyDialog.OncloseListener() {
// @Override
// public void onClick(boolean confirm) {
// if (confirm) {
// Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
// startActivity(intent);
// }
// }
// }).setTitle("提示").setContent("请开启定位服务").setNegativeButton("取消").setPositiveButton("开启");
// dialog.show();
// } else {
// requestPermission(position);
// }
break;
case R.id.bag_check:
// ToastUtils.show(getActivity(),"功能暂未开放");
saveBag(position, 0, ScheduleFragment.this.adapter.getData().get(position).getAppointment_id());
break;
case R.id.bag_check1:
// ToastUtils.show(getActivity(),"功能暂未开放");
saveBag(position, 1, ScheduleFragment.this.adapter.getData().get(position).getAppointment_id());
break;
case R.id.bag_check2:
// ToastUtils.show(getActivity(),"功能暂未开放");
saveBag(position, 2, ScheduleFragment.this.adapter.getData().get(position).getAppointment_id());
break;
case R.id.bag_check3:
// ToastUtils.show(getActivity(),"功能暂未开放");
saveBag(position, 3, ScheduleFragment.this.adapter.getData().get(position).getAppointment_id());
break;
case R.id.take_away:
confirmGan(position, 0);
break;
case R.id.take_away1:
confirmGan(position, 1);
break;
case R.id.take_away2:
confirmGan(position, 2);
break;
case R.id.take_away3:
confirmGan(position, 3);
break;
}
}
});
refreshLayout.setRefreshHeader(new ClassicsHeader(getActivity()));
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
mPresenter.scheduleService();
mPresenter.user();
refreshLayout.finishRefresh(1000);
}
});
}
private void permissionMain(int position) {
PermissionX.init(this)
.permissions(
Manifest.permission.ACCESS_NETWORK_STATE)
.request((allGranted, grantedList, deniedList) -> {
Log.e("Tag=======", "allGranted====="+allGranted);
if (allGranted) {
if (!isLocServiceEnable()) {
MyDialog dialog = new MyDialog(getActivity(), R.style.mdialog,
new MyDialog.OncloseListener() {
@Override
public void onClick(boolean confirm) {
if (confirm) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
}
}).setTitle("提示").setContent("请开启定位服务").setNegativeButton("取消").setPositiveButton("开启");
dialog.show();
} else {
requestPermission(position);
}
// Toast.makeText(this, "所有申请的权限都已通过", Toast.LENGTH_SHORT).show();
} else {
// Toast.makeText(this, "您拒绝了如下权限:$deniedList", Toast.LENGTH_SHORT).show();
// permissionMain(position);
}
});
}
// 修改权限请求流程
private void requestPermission(int position) {
// 先显示提示弹窗
showLocationPermissionHint();
// 立即请求系统权限
requestSystemLocationPermission(position);
}
// 修改系统权限请求方法
private void requestSystemLocationPermission(int position) {
PermissionX.init(this).permissions(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)
.onExplainRequestReason(new ExplainReasonCallback() {
@Override
public void onExplainReason(ExplainScope explainScope, List<String> list) {
// 系统解释弹窗显示时,关闭我们的提示弹窗
if (locationPermissionPopup != null && locationPermissionPopup.isShowing()) {
locationPermissionPopup.dismiss();
}
explainScope.showRequestReasonDialog(list, "您已拒绝了定位权限,为了您更好的使用应用,请重新打开", "去开启", "取消");
}
}).onForwardToSettings(new ForwardToSettingsCallback() {
@Override
public void onForwardToSettings(ForwardScope forwardScope, List<String> list) {
forwardScope.showForwardToSettingsDialog(list, "您需要去应用程序设置当中手动开启定位权限", "去开启", "取消");
}
}).request(new RequestCallback() {
@Override
public void onResult(boolean allGranted, List<String> list, List<String> list1) {
// 权限请求完成,关闭提示弹窗
if (locationPermissionPopup != null && locationPermissionPopup.isShowing()) {
locationPermissionPopup.dismiss();
}
if (allGranted) {
ArrayList<Integer> ids = new ArrayList<>();
for (ScheduleServiceBean.PersonDataBean item : scheduleList.get(position).getPerson_data()) {
ids.add(item.getPerson_id());
}
mPresenter.existTeeTime(scheduleList.get(position).getAppointment_id(), ids);
}
}
});
}
// 在onDestroy中清理资源
@Override
public void onDestroy() {
super.onDestroy();
if (locationPermissionPopup != null && locationPermissionPopup.isShowing()) {
locationPermissionPopup.dismiss();
}
locationPermissionPopup = null;
}
/**
* 是否打开定位服务
*
* @return
*/
private boolean isLocServiceEnable() {
LocationManager locationManager = (LocationManager) BaseApplication.getApplication()
.getSystemService(Context.LOCATION_SERVICE);
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
return gps || network;
}
private void saveBag(int position, int index, int appId) {
ScheduleServiceBean.PersonDataBean personDataBean = adapter.getData().get(position).getPerson_data().get(index);
if (personDataBean.getPerson_state() == 0) {
ToastUtils.show(getActivity(), "请先确认球杆,再进行存包");
return;
}
if (personDataBean.getBag() != null) {
if (TextUtils.equals(personDataBean.getBag(), "0") || TextUtils.equals(personDataBean.getBag(), "存包")) {
showCheckDialog(personDataBean.getName(), personDataBean.getTel(), personDataBean.getPerson_id(), adapter.getData().get(position).getClient_id(), appId);
} else {
//展示取包提示框
showFetchingBag(personDataBean.getBag_num() + "", personDataBean.getPerson_id(), personDataBean.getName(), personDataBean.getTel(), appId);
}
} else {
showCheckDialog(personDataBean.getName(), personDataBean.getTel(), personDataBean.getPerson_id(), adapter.getData().get(position).getClient_id(), appId);
}
}
private void confirmGan(int position, int index) {
try {
int bagType = 0;
startActivity(new Intent(getActivity(), BallAffirmActivity.class).putExtra("person_id",
adapter.getData().get(position).getPerson_data().get(index).getPerson_id())
.putExtra("app_id", adapter.getData().get(position).getAppointment_id())
.putExtra("bagType", bagType)
.putExtra("phone", adapter.getData().get(position).getPerson_data().get(index).getTel()));
} catch (Exception e) {
e.printStackTrace();
}
}
private void setRefreshDate() {
refreshLayout.autoRefresh();
}
@Override
protected void loadNetData() {
//进入到当前Fragment
mPresenter = new SchedulePresenter();
mPresenter.attachView(this);
mPresenter.user();
mPresenter.scheduleService();
// mPresenter.hotUpdate();
// mPresenter.getWsSetting();
}
@Override
public void onError(String errMessage, int errCode) {
// super.onError(errMessage, errCode);
if (errCode == 999) {
new MyDialog(requireActivity(),false, R.style.mdialog,
new MyDialog.OncloseListener() {
@Override
public void onClick(boolean confirm) {
mPresenter.scheduleService();
}
}).setTitle("提示").setContent("服务单信息已变更,请重新进入服务单").setPositiveButton("知道了").show();
}
}
@Override
public void onSwitchStateSuccess(int errno) {
if (status == 0) {
ToastUtils.show(getActivity(), "下线成功");
EventBusUtils.post(new EventMessage<>(EventCode.EVENT_SERVICE_STOP, "refresh"));
} else {
ToastUtils.show(getActivity(), "上线成功");
//EventBusUtils.post(new EventMessage<>(EventCode.EVENT_SERVICE_START, "refresh"));
}
onLine(status);
}
@Override
public void onScheduleServiceSuccess(List<ScheduleServiceBean> bean) {
refreshLayout.finishRefresh();
scheduleList.clear();
if (bean != null) {
scheduleList.addAll(bean);
}
adapter.setNewData(scheduleList);
taskNumber.setText("今日日程(" + scheduleList.size() + ")");
}
@Override
public void onHistoryTripSuccess(List<ScheduleServiceBean> list) {
}
@Override
public void onUserSuccess(UserBean bean) {
LogUtils.d("ScheduleFragment.onUserSuccess: " + bean.getClient_id());
MainConstant.BESE_CLIENT_ID = bean.getClient_id() + "";
SPUtils.getInstance().put(MainConstant.CLIENT_ID, bean.getClient_id());
SPUtils.getInstance().put(MainConstant.ID, bean.getId());
SPUtils.getInstance().put(MainConstant.JOB_NUM, bean.getJob_num());
SPUtils.getInstance().put(MainConstant.CADDIE_HEAD_IMAGE, bean.getImage());
SPUtils.getInstance().put(MainConstant.CADDIE_NAME, bean.getCaddie_name());
SPUtils.getInstance().put(MainConstant.WHETHER_ONLINE, bean.getWhether_online());
Glide.with(getActivity())
.load(bean.getImage())
.placeholder(R.mipmap.user_logo)
.error(R.mipmap.user_logo)
.into(roundimagview);
name.setText(bean.getCaddie_name());
jobnumber.setText(String.format("球童号: %s", bean.getCaddie_num()));
userId = bean.getId();
status = bean.getWhether_online();
if (bean.getCaddie_name().startsWith("[车]") || bean.getCaddie_name().startsWith("[船]")) {
SPUtils.getInstance().put(MainConstant.MAP, true);
if (!isServiceWork(getActivity(), "com.kmilesaway.golfbat.service.DaemonService")) {
getActivity().stopService(new Intent(getActivity(), DaemonService.class));
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
getActivity().startForegroundService(new Intent(getActivity(), DaemonService.class));
} else {
getActivity().startService(new Intent(getActivity(), DaemonService.class));
}
}
}
}
@Override
public void onHotUpdateSuccess(HotUpdateBean bean) {
if (AppUtils.getVersionName(getActivity()).compareTo(bean.getVersion_name()) < 0) {
startUpdate(bean);
}
}
@Override
public void onCutCaddieSuccess(CutCaddieBean bean) {
SPUtils.getInstance().put(MainConstant.MAP, true);
if (!isServiceWork(getActivity(), "com.kmilesaway.golfbat.service.DaemonService")) {
getActivity().stopService(new Intent(getActivity(), DaemonService.class));
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
getActivity().startForegroundService(new Intent(getActivity(), DaemonService.class));
} else {
getActivity().startService(new Intent(getActivity(), DaemonService.class));
}
}
MapsInitializer.updatePrivacyShow(getContext(), true, true);
MapsInitializer.updatePrivacyAgree(getContext(), true);
ScheduleServiceBean scheduleServiceBean = adapter.getData().get(pos);
Intent intent = new Intent(getContext(), RangingScoringActivity.class);
intent.putExtra("orderRef", scheduleServiceBean.getOrder_ref());
intent.putExtra("clientId", scheduleServiceBean.getClient_id());
String updatedAt = scheduleServiceBean.getUpdated_at();
String datePart = updatedAt;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// HH:mm:ss
try {
Date date = formatter.parse(updatedAt);
SimpleDateFormat dateOnlyFormatter = new SimpleDateFormat("yyyy-MM-dd");
datePart = dateOnlyFormatter.format(date);
datePart = datePart + " " + scheduleServiceBean.getOut_time();
} catch (ParseException ignored) {
}
intent.putExtra("play_time", datePart);
intent.putExtra("group_num", scheduleServiceBean.getGroup_id());
intent.putExtra("app_id", scheduleServiceBean.getAppointment_id());
intent.putExtra("name", scheduleServiceBean.getClient_name());
intent.putExtra("state", bean.getStatus());
intent.putExtra("person_list", (Serializable) scheduleServiceBean.getPerson_data());
startActivity(intent);
}
@Override
public void onBagStorageSuccess(BagStorageBean bean) {
if (bean != null) {
showNumDialog(bean.getStatus(), bean.getBag_num() + "");
}
}
@Override
public void onWsSettingSuccess(WsSetBean bean) {
SPUtils.getInstance().put("IP", bean.getWs_ip());
SPUtils.getInstance().put("Host", bean.getWs_port());
getActivity().stopService(new Intent(getActivity(), BackService.class));
if (!isServiceWork(getActivity(), "com.kmilesaway.golfbat.service.BackService")) {
getActivity().startService(new Intent(getActivity(), BackService.class));
}
}
@Override
public void getBallBagAwaySuccess(Object bean) {
}
@Override
public void getLayoutPlanSuccess(List<String> data) {
if (mnCalendar != null) {
mnCalendar.addEventDates(data);
}
}
@Override
public void showSaveBagErrorDialog(String msg) {
showNumDialog(2, msg);
}
@Override
public void onFetchingBagSuccess() {
setRefreshDate();
}
@Override
public void onExistTeeTimeSuccess() {
SPUtils.getInstance().put(MainConstant.APPOINTMENT_ID, ScheduleFragment.this.adapter.getData().get(pos).getAppointment_id());
mPresenter.cutCaddie(ScheduleFragment.this.adapter.getData().get(pos).getAppointment_id());
}
@Override
public void onEndPersonBallByCaddySuccess() {
}
@Override
public void onRestoreServiceSuccess() {
}
@Override
public void onMsgWsSuccess(MsgWs bean) {
}
@OnClick({R.id.Offline, R.id.goonline, R.id.tvSchedulingPlan, R.id.tvMatchScoring})
public void onViewClicked(View view) {
switch (view.getId()) {
/*下线*/
case R.id.Offline:
status = 0;
//onLine(status);
mPresenter.switchState(status, userId);
break;
/*上线*/
case R.id.goonline:
status = 1;
//onLine(status);
mPresenter.switchState(status, userId);
break;
case R.id.tvMatchScoring:
Intent intent = new Intent(getContext(), MatchSelectListActivity.class);
startActivity(intent);
break;
case R.id.tvSchedulingPlan:
// startActivity(new Intent(getContext(), ClickToPurchaseActivity.class));
if (timebottomSheetDialog != null) {
timebottomSheetDialog.dismiss();
}
timebottomSheetDialog = new NavigationDialog(getContext(), R.style.BottomDialog);
//设置退出速度
timebottomSheetDialog.outDuration(100);
timebottomSheetDialog.inDuration(100);
//设置铺满
timebottomSheetDialog.heightParam(ViewGroup.LayoutParams.WRAP_CONTENT);
//解析视图
View contentView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_mncalendar, null);
/*日历*/
mnCalendar = contentView.findViewById(R.id.mnCalendar);
mnCalendar.setOnCalendarChangeListener(new OnCalendarChangeListener() {
@Override
public void onPageChange(int year, int month) {
mPresenter.getLayoutPlan(year, month);
}
});
mnCalendar.setCurrentPager();
monthList.clear();
GetDateBean.MonthBean monthBean = new GetDateBean.MonthBean();
monthBean.setDay(date);
monthBean.setStatus(99);
monthList.add(monthBean);
try {
mnCalendar.setEventDatas(monthList);
} catch (ParseException e) {
e.printStackTrace();
}
timebottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
mnCalendar = null;
}
});
//设置视图
timebottomSheetDialog.setContentView(contentView);
//百度
timebottomSheetDialog.show();
break;
default:
break;
}
}
@Override
protected boolean isRegisteredEventBus() {
return true;
}
private void onLine(int status) {
switch (status) {
case 1:
goonline.setBackgroundResource(R.drawable.translucent_6_328e8e);
Offline.setBackground(null);
goonline.setTextColor(getActivity().getResources().getColor(R.color.white));
Offline.setTextColor(getActivity().getResources().getColor(R.color.translucent_50_white));
break;
case 0:
Offline.setBackgroundResource(R.drawable.translucent_6_328e8e);
goonline.setBackground(null);
Offline.setTextColor(getActivity().getResources().getColor(R.color.white));
goonline.setTextColor(getActivity().getResources().getColor(R.color.translucent_50_white));
getActivity().stopService(new Intent(getActivity(), DaemonService.class));
break;
}
}
@Override
public void onButtonClick(int id) {
}
private void startUpdate(HotUpdateBean bean) {
if (bean.getIs_force_update() == 0) {
is_force_update = false;
} else {
is_force_update = true;
}
/*
* 整个库允许配置的内容
* 非必选
*/
UpdateConfiguration configuration = new UpdateConfiguration()
//输出错误日志
.setEnableLog(true)
//设置自定义的下载
//.setHttpManager()
//下载完成自动跳动安装页面
.setJumpInstallPage(true)
//设置对话框背景图片 (图片规范参照demo中的示例图)
.setDialogImage(R.drawable.ic_dialog_default)
// 设置按钮的颜色
.setDialogButtonColor(Color.parseColor("#1DBCA1"))
//// 设置对话框强制更新时进度条和文字的颜色
// .setDialogProgressBarColor(Color.parseColor("#E743DA"))
//设置按钮的文字颜色
.setDialogButtonTextColor(Color.WHITE)
//设置是否显示通知栏进度
.setShowNotification(true)
//设置是否提示后台下载toast
.setShowBgdToast(true)
//设置是否上报数据
.setUsePlatform(true)
//设置强制更新
.setForcedUpgrade(is_force_update)
//设置对话框按钮的点击监听
.setButtonClickListener(this)
//设置下载过程的监听
.setOnDownloadListener(listenerAdapter);
manager = DownloadManager.getInstance(getActivity());
manager.setApkName("golfbat.apk")
.setApkUrl(bean.getUrl())
.setSmallIcon(R.mipmap.login_logo)
.setShowNewerToast(true)
.setConfiguration(configuration)
.setApkVersionCode(2)
.setApkVersionName(bean.getVersion_name())
.setApkSize(bean.getSize())
.setApkDescription(bean.getMsg())
// .setApkMD5("db18e57e01e5bb2408116c1689f25ca7")
.download();
}
private OnDownloadListenerAdapter listenerAdapter = new OnDownloadListenerAdapter() {
/**
* 下载中
*
* @param max 总进度
* @param progress 当前进度
*/
@Override
public void downloading(int max, int progress) {
int curr = (int) (progress / (double) max * 100.0);
Log.d(">>>>>>>>>>>>>>>", "downloading: " + curr);
}
};
/**
* @param mContext
* @param serviceName 是包名+服务的类名(例如:net.loonggg.testbackstage.TestService)
* @return true代表正在运行,false代表服务没有正在运行
*/
public boolean isServiceWork(Context mContext, String serviceName) {
boolean isWork = false;
ActivityManager myAM = (ActivityManager) mContext
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> myList = myAM.getRunningServices(40);
if (myList.size() <= 0) {
return false;
}
for (int i = 0; i < myList.size(); i++) {
String mName = myList.get(i).service.getClassName().toString();
if (mName.equals(serviceName)) {
isWork = true;
break;
}
}
return isWork;
}
//存包对应用户信息
private void showCheckDialog(String name, String phone, int person_id, int client_id, int appId) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.pop_bag_check, null, false);
final AlertDialog dialog = new AlertDialog.Builder(getActivity(), R.style.mdialog).setView(view).create();
EditText tvName = view.findViewById(R.id.tv_name);
EditText tvPhone = view.findViewById(R.id.tv_phone);
tvName.setFocusable(false);
tvName.setEnabled(false);
if (!TextUtils.isEmpty(name)) {
tvName.setText(name);
tvName.setSelection(tvName.getText().length());
}
if (!TextUtils.isEmpty(phone)) {
tvPhone.setText(phone);
tvPhone.setSelection(tvPhone.getText().length());
}
TextView submit = view.findViewById(R.id.tv_commit);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
HideKeyboard(v);
if (tvPhone.getText().toString() == null || tvPhone.getText().toString().equals("")) {
ToastUtils.show(getActivity(), "请输入手机号");
return;
}
if (!RegexUtils.isMobileExact(tvPhone.getText().toString().trim())) {
ToastUtils.showShort("请输入正确的手机号");
return;
}
mPresenter.bagStorage(person_id, client_id, tvName.getText().toString().trim(), tvPhone.getText().toString().trim(), appId + "");
dialog.dismiss();
}
});
dialog.setCanceledOnTouchOutside(true);// 设置点击屏幕Dialog不消失
dialog.setOnKeyListener(keylistener);//设置点击返回键Dialog不消失
dialog.show();
//此处设置位置窗体大小,我这里设置为了手机屏幕宽度的3/4 注意一定要在show方法调用后再写设置窗口大小的代码,否则不起效果会
dialog.getWindow().setLayout((UiUtils.getScreenWidth(getActivity()) / 4 * 3), LinearLayout.LayoutParams.WRAP_CONTENT);
}
private void showFetchingBag(String bag_num, int person_id, String person_name, String person_tel, int app_id) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.pop_bag_fetching, null, false);
final AlertDialog dialog = new AlertDialog.Builder(getActivity(), R.style.mdialog).setView(view).create();
view.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
view.findViewById(R.id.submit).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPresenter.fetchingBag(bag_num, person_id, person_name, person_tel, app_id);
dialog.dismiss();
}
});
dialog.setCanceledOnTouchOutside(true);// 设置点击屏幕Dialog不消失
dialog.setOnKeyListener(keylistener);//设置点击返回键Dialog不消失
dialog.show();
//此处设置位置窗体大小,我这里设置为了手机屏幕宽度的3/4 注意一定要在show方法调用后再写设置窗口大小的代码,否则不起效果会
dialog.getWindow().setLayout((UiUtils.getScreenWidth(getActivity()) / 4 * 3), LinearLayout.LayoutParams.WRAP_CONTENT);
}
//显示存包位置
private void showNumDialog(int status, String num) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_bag_check, null, false);
final AlertDialog dialog = new AlertDialog.Builder(getActivity(), R.style.mdialog).setView(view).create();
TextView title = view.findViewById(R.id.tv_title);
TextView tvNum = view.findViewById(R.id.tv_num);
TextView tvContent = view.findViewById(R.id.tv_content);
EventBusUtils.post(new EventMessage<>(EventCode.EVENT_SCHEDULE_REFRESH, "refresh"));
if (status == 1) {
title.setText("存包成功");
tvNum.setText(num);
setRefreshDate();
} else if (status == 0) {
title.setText("存包失败");
tvNum.setText(num);
tvContent.setText("球包已放至指定位置");
} else if (status == 3) {
title.setText("球包位置");
tvNum.setText(num);
tvContent.setText("请您到指定位置取包");
} else if (status == 4) {
title.setText("存包失败");
tvNum.setText(num);
tvContent.setText("该手机号已有球包,请更换手机号进行存包");
} else {
title.setText("存包失败");
tvNum.setVisibility(View.GONE);
tvContent.setText(num);
}
TextView submit = view.findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.setCanceledOnTouchOutside(true);// 设置点击屏幕Dialog不消失
dialog.setOnKeyListener(keylistener);//设置点击返回键Dialog不消失
dialog.show();
//此处设置位置窗体大小,我这里设置为了手机屏幕宽度的3/4 注意一定要在show方法调用后再写设置窗口大小的代码,否则不起效果会
dialog.getWindow().setLayout((UiUtils.getScreenWidth(getActivity()) / 4 * 3), LinearLayout.LayoutParams.WRAP_CONTENT);
}
//取包
private void showTakeAwayDialog() {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_take_away, null, false);
final AlertDialog dialog = new AlertDialog.Builder(getActivity(), R.style.mdialog).setView(view).create();
TextView submit = view.findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
TextView cancel = view.findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.setCanceledOnTouchOutside(true);// 设置点击屏幕Dialog不消失
dialog.setOnKeyListener(keylistener);//设置点击返回键Dialog不消失
dialog.show();
//此处设置位置窗体大小,我这里设置为了手机屏幕宽度的3/4 注意一定要在show方法调用后再写设置窗口大小的代码,否则不起效果会
dialog.getWindow().setLayout((UiUtils.getScreenWidth(getActivity()) / 4 * 3), LinearLayout.LayoutParams.WRAP_CONTENT);
}
DialogInterface.OnKeyListener keylistener = new DialogInterface.OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
return true;
} else {
return false;
}
}
};
//隐藏虚拟键盘
public static void HideKeyboard(View v) {
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
}
/**
* 接收到分发的事件
*
* @param event 事件
*/
@Override
protected void receiveEvent(EventMessage event) {
switch (event.getCode()) {
case EventCode.EVENT_SCHEDULE_REFRESH:
mPresenter.scheduleService();
break;
}
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
Log.d("yanjin", "hidden = " + hidden);
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isOnResume && isVisibleToUser) {
refreshLayout.autoRefresh();
Log.d("yanjin", "isVisibleToUser = " + isVisibleToUser);
}
}
@Override
public void onResume() {
super.onResume();
isOnResume = true;
}
public void onRestart() {
refreshLayout.autoRefresh();
Log.d("yanjin", "onRestart = ");
}
// 在类顶部添加变量
private PopupWindow locationPermissionPopup;
// 添加显示权限提示弹窗的方法
private void showLocationPermissionHint() {
if (locationPermissionPopup != null && locationPermissionPopup.isShowing()) {
locationPermissionPopup.dismiss();
}
View popupView = LayoutInflater.from(getActivity()).inflate(R.layout.popup_location_permission_hint, null);
locationPermissionPopup = new PopupWindow(
popupView,
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
// 设置PopupWindow属性
locationPermissionPopup.setFocusable(false);
locationPermissionPopup.setOutsideTouchable(false);
locationPermissionPopup.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// 显示在顶部
View rootView = getActivity().getWindow().getDecorView();
locationPermissionPopup.showAtLocation(rootView, Gravity.TOP, 0, UiUtils.dip2px(getActivity(), 16));
}
}