Commit c2e6b903569054b97a4f63817b9b2a7ce75b6760

Authored by 杨帅
1 parent 50f4cc40

1 修复用户从后台进入前台时,步数显示错误问题

config.gradle
... ... @@ -21,7 +21,7 @@ ext {
21 21 //编译方式
22 22 debug : false,
23 23 //版本号
24   - version: "0.5.3",
  24 + version: "0.5.4",
25 25 //Lib库前缀
26 26 packeg : "com.cnlive.module",
27 27 //Lib库名称
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunningMapFragmentView.java
... ... @@ -42,6 +42,7 @@ import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunningMapFragment;
42 42 import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
43 43 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
44 44 import com.cnlive.moudle.pedometer.model.Constant;
  45 +import com.cnlive.moudle.pedometer.model.MessageEvent;
45 46 import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo;
46 47 import com.cnlive.moudle.pedometer.service.StepService;
47 48 import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
... ... @@ -55,6 +56,8 @@ import com.cnlive.moudle.pedometer.utils.TimeUtil;
55 56 import com.example.moudle_pedometer.R;
56 57 import com.hannesdorfmann.mosby3.mvp.MvpView;
57 58  
  59 +import org.greenrobot.eventbus.EventBus;
  60 +
58 61 import java.util.ArrayList;
59 62 import java.util.List;
60 63  
... ... @@ -788,6 +791,8 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
788 791 if (mMapView != null) {
789 792 mMapView.onResume();
790 793 }
  794 + //保持最新的步数
  795 + EventBus.getDefault().post(new MessageEvent(Constant.COLL_SERVICE_STEP_COUNT_ONRESUME, ""));
791 796 }
792 797  
793 798 public void onPause() {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/service/CollStepService.java
... ... @@ -494,6 +494,12 @@ public class CollStepService extends Service implements SensorEventListener {
494 494 // else if (messageEvent.getMessageType() == Constant.SERVICE_STEP_COUNT_CONTINUE) {
495 495 // pauseFlag = false;
496 496 // }
  497 +
  498 + //更新锁屏步数
  499 + if (messageEvent.getMessageType() == Constant.COLL_SERVICE_STEP_COUNT_ONRESUME) {
  500 + updateNotification();
  501 + }
  502 +
497 503 }
498 504  
499 505 /**
... ... @@ -669,12 +675,12 @@ public class CollStepService extends Service implements SensorEventListener {
669 675 } else if (Intent.ACTION_DATE_CHANGED.equals(action)) {//日期变化步数重置为0
670 676 // Logger.d("重置步数" + StepDcretor.CURRENT_STEP);
671 677 save();
672   - isNewDay();
  678 +// isNewDay();
673 679 } else if (Intent.ACTION_TIME_CHANGED.equals(action)) {
674 680 //时间变化步数重置为0
675 681 // isCall();
676 682 save();
677   - isNewDay();
  683 +// isNewDay();
678 684 } else if (Intent.ACTION_TIME_TICK.equals(action)) {//日期变化步数重置为0
679 685 // isCall();
680 686 // Logger.d("重置步数" + StepDcretor.CURRENT_STEP);
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/fragment/StartTraceFragment.java
... ... @@ -7,6 +7,8 @@ import android.support.annotation.Nullable;
7 7 import android.view.View;
8 8  
9 9 import com.cnlive.libs.base.ui.QMUIFragment;
  10 +import com.cnlive.libs.base.util.StatusBarUtil;
  11 +import com.cnlive.libs.base.util.StatusBarUtil2;
10 12 import com.cnlive.moudle.collectionTrace.frame.presenter.StartTraceFragmentPresenter;
11 13 import com.cnlive.moudle.collectionTrace.frame.view.StartTraceFragmentView;
12 14 import com.cnlive.moudle.collectionTrace.ui.activity.CollPedometerMainActivity;
... ... @@ -55,6 +57,8 @@ public class StartTraceFragment extends QMUIFragment<StartTraceFragmentView, Sta
55 57 @Override
56 58 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
57 59 super.onViewCreated(view, savedInstanceState);
  60 + StatusBarUtil.setStatusBarWrite(getActivity());
  61 + StatusBarUtil2.setColor(getActivity(), getResources().getColor(R.color.white), 0);
58 62 EventBus.getDefault().register(this);
59 63 mSensorManager = (SensorManager) getActivity().getSystemService(SENSOR_SERVICE);//获取传感器管理服务
60 64 if (null != getArguments()) {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/RunningFinishFragmetPresenter.java
... ... @@ -7,6 +7,7 @@ import android.util.Log;
7 7 import android.widget.Toast;
8 8  
9 9 import com.baidu.mapapi.model.LatLng;
  10 +import com.baidu.mapapi.utils.DistanceUtil;
10 11 import com.baidu.trace.LBSTraceClient;
11 12 import com.baidu.trace.model.SortType;
12 13 import com.cnlive.libs.base.logic.Logic;
... ... @@ -270,9 +271,39 @@ public class RunningFinishFragmetPresenter extends MvpBasePresenter<RunningFinis
270 271 * @param context
271 272 */
272 273 public void checkUserIsFinish(List<LatLng> resultPoints, UserStepEntity userStepEntity, RunningFinishBean runningFinishBean, Activity context) {
  274 + boolean isArrive = false;
  275 + FailedEntity failedEntity = null;
  276 + if (!TextUtils.isEmpty(runningFinishBean.getFailUUID())) {
  277 + StepUtil.getTempSaveFailByUUID(context, CommonInfo.getUserId(context), runningFinishBean.getFailUUID());
  278 + }
273 279 if (!userStepEntity.getIsArriveEndPoint()) {
274 280 runningFinishBean.setIsFinish("0");
275   - } else {
  281 + isArrive = false;
  282 + if (null != failedEntity) {
  283 + failedEntity.setIsArriveEndPoint(false);
  284 + StepUtil.updateFailData(context, failedEntity);
  285 + }
  286 + //在判断一次历史轨迹
  287 + if (null != resultPoints && resultPoints.size() > 1) {
  288 + if (!TextUtils.isEmpty(userStepEntity.getEndLatLng())) {
  289 + LatLng endLat = GsonUtil.GsonToBean(userStepEntity.getEndLatLng(), LatLng.class);
  290 + if (null != endLat) {
  291 + for (int i = 0; i < resultPoints.size(); i++) {
  292 + double distance = DistanceUtil.getDistance(endLat, resultPoints.get(i));
  293 + if (distance < Constant.LOCA_END_POINT_ACCURACY) {
  294 + isArrive = true;
  295 + if (null != failedEntity) {
  296 + failedEntity.setIsArriveEndPoint(true);
  297 + StepUtil.updateFailData(context, failedEntity);
  298 + }
  299 + break;
  300 + }
  301 + }
  302 + }
  303 + }
  304 + }
  305 + }
  306 + if (isArrive) {
276 307 if (importPoints != null) {
277 308 //判断是否完成
278 309 boolean isFinish = MyMapUtil.checkIsFinishTrace(importPoints, resultPoints, Constant.PASS_RATE);
... ... @@ -284,6 +315,8 @@ public class RunningFinishFragmetPresenter extends MvpBasePresenter&lt;RunningFinis
284 315 runningFinishBean.setIsFinish("0");
285 316 }
286 317 }
  318 + } else {
  319 + runningFinishBean.setIsFinish("0");
287 320 }
288 321 }
289 322  
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunMainFragmentView.java
... ... @@ -77,6 +77,7 @@ public class RunMainFragmentView implements MvpView {
77 77 private TipDialog tipDialog;
78 78 //创建震动服务对象
79 79 private Vibrator mVibrator;
  80 + private boolean isfirstEndTip = true;
80 81  
81 82 public RunMainFragmentView(RunMainFragment fragment) {
82 83 this.fragment = fragment;
... ... @@ -439,6 +440,9 @@ public class RunMainFragmentView implements MvpView {
439 440 }
440 441 FailedEntity failedEntity = StepUtil.getTempSaveFailData(getContext(), CommonInfo.getUserId(getContext()), userStepEntity.getStartTimeStamp());
441 442 if (failedEntity != null) {
  443 + if (null != failedEntity.getUuid()) {
  444 + runningFinishBean.setFailUUID(failedEntity.getUuid());
  445 + }
442 446 RunningFinishActivity.startActivity(fragment.getActivity(), runningFinishBean);
443 447 fragment.getActivity().finish();
444 448 }
... ... @@ -789,7 +793,12 @@ public class RunMainFragmentView implements MvpView {
789 793 //更新数据
790 794 StepUtil.updateStepData(getContext(), userStepEntity);
791 795 }
792   -
  796 + if (!isfirstEndTip) {
  797 + return;
  798 + }
  799 + if (isfirstEndTip) {
  800 + isfirstEndTip = false;
  801 + }
793 802 //进行提示
794 803 if (null == tipDialog) {
795 804 ChineseToSpeechUtil.speech(getContext(), "您已到达终点附近,可以结束运动了!");
... ... @@ -826,6 +835,7 @@ public class RunMainFragmentView implements MvpView {
826 835 CommonInfo.setIsWriteUserStep(getContext(), false);
827 836 if (StepService.mClient != null) {
828 837 StepService.mClient.stopGather(StepService.traceListener);
  838 +// StepService.CURRENT_STEP = 0;
829 839 }
830 840 fragment.getActivity().stopService(new Intent(fragment.getActivity(), StepService.class));
831 841 }
... ... @@ -836,6 +846,11 @@ public class RunMainFragmentView implements MvpView {
836 846 }
837 847 }
838 848  
  849 + public void onResume() {
  850 + //保持最新的步数
  851 + EventBus.getDefault().post(new MessageEvent(Constant.SERVICE_STEP_COUNT_ONRESUME, ""));
  852 + }
  853 +
839 854 /**
840 855 * 暂存失败数据
841 856 *
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunningMapFragmentView.java
... ... @@ -40,7 +40,9 @@ import com.baidu.mapapi.utils.DistanceUtil;
40 40 import com.baidu.trace.model.SortType;
41 41 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
42 42 import com.cnlive.moudle.pedometer.model.Constant;
  43 +import com.cnlive.moudle.pedometer.model.MessageEvent;
43 44 import com.cnlive.moudle.pedometer.model.RunningMapBean;
  45 +import com.cnlive.moudle.pedometer.service.StepService;
44 46 import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity;
45 47 import com.cnlive.moudle.pedometer.ui.fragment.RunningMapFragment;
46 48 import com.cnlive.moudle.pedometer.ui.widget.TipDialog;
... ... @@ -53,6 +55,8 @@ import com.cnlive.moudle.pedometer.utils.StepUtil;
53 55 import com.example.moudle_pedometer.R;
54 56 import com.hannesdorfmann.mosby3.mvp.MvpView;
55 57  
  58 +import org.greenrobot.eventbus.EventBus;
  59 +
56 60 import java.util.ArrayList;
57 61 import java.util.HashMap;
58 62 import java.util.List;
... ... @@ -88,6 +92,7 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
88 92 private TipDialog tipDialog;
89 93 //创建震动服务对象
90 94 private Vibrator mVibrator;
  95 + private boolean isfirstEndTip = true;//是否是第一次提示到达终点
91 96  
92 97 public RunningMapFragmentView(RunningMapFragment fragment) {
93 98 this.fragment = fragment;
... ... @@ -349,7 +354,12 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
349 354 StepUtil.updateStepData(getContext(), userStepEntity);
350 355 }
351 356  
352   -
  357 + if (!isfirstEndTip) {
  358 + return;
  359 + }
  360 + if (isfirstEndTip) {
  361 + isfirstEndTip = false;
  362 + }
353 363 //进行提示
354 364 if (null == tipDialog) {
355 365 ChineseToSpeechUtil.speech(getContext(), "您已到达终点附近,可以结束运动了!");
... ... @@ -532,6 +542,7 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
532 542 if (mMapView != null) {
533 543 mMapView.onResume();
534 544 }
  545 + EventBus.getDefault().post(new MessageEvent(Constant.SERVICE_STEP_COUNT_ONRESUME, ""));
535 546 }
536 547  
537 548 public void onPause() {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/model/Constant.java
1 1 package com.cnlive.moudle.pedometer.model;
2 2  
3 3 public class Constant {
4   - public static final long SERVICE_ID = 213511;//公司账号
5   -// public static final long SERVICE_ID = 213553;
6   -
7   - public static final int TAG = 1;
8   - public static final int GATHER_INTERVAL = 2;//位置采集周期
9   - public static final int PACK_INTERVAL = 10;//位置采集周期
10   -
  4 + /*********************************用户标志位**************************************************/
11 5 public static final int SERVICE_STEP_COUNT_UPDATE = 0;//步数更新
12 6 public static final int SERVICE_STEP_COUNT_PAUSE = 1;//步数暂停
13 7 public static final int SERVICE_STEP_COUNT_CONTINUE = 2;//继续计步
... ... @@ -15,11 +9,7 @@ public class Constant {
15 9 public static final int FRAGMENT_RUN_CHRONOMETER = 4;//同步计时器
16 10 public static final int EXIT_RANGE = 5;//超出范围
17 11 public static final int ENTER_RANGE = 6;//进入范围
18   - public static final int VIBRATOR_DELAY_TIME = 100;//震动等待时间(ms)
19   - public static final int VIBRATOR_RUN_TIME = 1000;//震动执行时间(ms)
20   - public static final int VIBRATOR_REPEAT_TIME = -1;//震动重复次数(-1代表不重复,之执行一次,其他代表会重复,0代表从数组的第0个位置开始)
21   -
22   - /*****************************************运营工具****************************************************/
  12 + /*****************************************运营工具标志位****************************************************/
23 13 public static final int COLL_SERVICE_STEP_COUNT_RESET_SPEED = 3;//重置速度
24 14 public static final int COLL_SERVICE_STEP_COUNT_UPDATE = 0;//步数更新
25 15 public static final int COLL_START_TRACE_GATHER_SUCCESS = 7;//启动轨迹服务成功(运营)
... ... @@ -29,6 +19,21 @@ public class Constant {
29 19 public static final int REGISTRATION_SUCCESS = 11;//用户报名成功
30 20 public static final int UPDATA_COLL_BIND_TRACE_LIST = 12;//更新已绑定列表
31 21 public static final int DELECT_COLL_BIND_TRACE_LIST = 13;//删除已绑定列表
  22 + public static final int SERVICE_STEP_COUNT_ONRESUME = 14;//用户从后台回到前台,更新步数
  23 + public static final int COLL_SERVICE_STEP_COUNT_ONRESUME = 15;//运营从后台回到前台,更新步数
  24 +
  25 +
  26 +
  27 + /*************************************用户其他值,非标志位************************************************************/
  28 + public static final long SERVICE_ID = 213511;//公司账号
  29 + // public static final long SERVICE_ID = 213553;
  30 + public static final int TAG = 1;
  31 + public static final int GATHER_INTERVAL = 2;//位置采集周期
  32 + public static final int PACK_INTERVAL = 10;//位置采集周期
  33 + public static final int VIBRATOR_DELAY_TIME = 100;//震动等待时间(ms)
  34 + public static final int VIBRATOR_RUN_TIME = 1000;//震动执行时间(ms)
  35 + public static final int VIBRATOR_REPEAT_TIME = -1;//震动重复次数(-1代表不重复,之执行一次,其他代表会重复,0代表从数组的第0个位置开始)
  36 + /*****************************************运营工具其他值,非标志位****************************************************/
32 37 public static final double PASS_RATE = 0.7;//通过率70%
33 38 public static final int CHECK_ACCURACY = 50;//判断用户是否完成的精度范围
34 39 public static final int LOCA_ACCURACY = 20;//定位过滤精度
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/model/RunningFinishBean.java
... ... @@ -27,6 +27,15 @@ public class RunningFinishBean implements Serializable {
27 27 private boolean isPause;
28 28 private String userPauseTime;
29 29 private String userContinueTime;
  30 + private String failUUID;
  31 +
  32 + public String getFailUUID() {
  33 + return failUUID;
  34 + }
  35 +
  36 + public void setFailUUID(String failUUID) {
  37 + this.failUUID = failUUID;
  38 + }
30 39  
31 40 public boolean isPause() {
32 41 return isPause;
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/service/StepService.java
... ... @@ -666,6 +666,10 @@ public class StepService extends Service implements SensorEventListener {
666 666 else if (messageEvent.getMessageType() == Constant.SERVICE_STEP_COUNT_CONTINUE) {
667 667 pauseFlag = false;
668 668 }
  669 + //更新锁屏步数
  670 + else if (messageEvent.getMessageType() == Constant.SERVICE_STEP_COUNT_ONRESUME) {
  671 + updateNotification();
  672 + }
669 673 }
670 674  
671 675 /**
... ... @@ -1063,7 +1067,7 @@ public class StepService extends Service implements SensorEventListener {
1063 1067 }
1064 1068 //总步数=现有的步数+本次有效步数
1065 1069 CURRENT_STEP += (thisStep);
1066   -// Log.e(TAG, "onSensorChanged: 加了以后" + CURRENT_STEP);
  1070 + Log.e(TAG, "onSensorChanged: 加了以后" + CURRENT_STEP);
1067 1071 lastStep = tempStep;
1068 1072 }
1069 1073 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/sql/entity/UserStepEntity.java
... ... @@ -251,4 +251,5 @@ public class UserStepEntity {
251 251 }
252 252  
253 253  
  254 +
254 255 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/RunMainFragment.java
... ... @@ -127,6 +127,14 @@ public class RunMainFragment extends QMUIFragment&lt;RunMainFragmentView, RunMainFr
127 127 }
128 128  
129 129 @Override
  130 + public void onResume() {
  131 + super.onResume();
  132 + if (getMvpView() != null) {
  133 + getMvpView().onResume();
  134 + }
  135 + }
  136 +
  137 + @Override
130 138 public void onDestroy() {
131 139  
132 140 super.onDestroy();
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/StepUtil.java
... ... @@ -35,6 +35,7 @@ public class StepUtil {
35 35 return UUID.randomUUID().toString().replace("-", "");
36 36 }
37 37  
  38 +
38 39 public static void initDataBase(Context context, String uid) {
39 40 try {
40 41 if (null == getUserStepData(context, uid)) {
... ... @@ -50,6 +51,50 @@ public class StepUtil {
50 51 }
51 52  
52 53 /**
  54 + * 更新删除临时保存数据
  55 + *
  56 + * @param context
  57 + * @param entity
  58 + */
  59 + public static void updateFailData(Context context, FailedEntity entity) {
  60 + try {
  61 + DbCore.init(context, dbName);
  62 + if (entity != null && !TextUtils.isEmpty(entity.getUuid())) {
  63 + DbCore.getDaoSession().getFailedEntityDao().update(entity);
  64 + }
  65 + } catch (Exception e) {
  66 + Log.e(TAG, "deleteTempSaveFailData: " + e.toString());
  67 + }
  68 +
  69 + }
  70 +
  71 + /**
  72 + * 获取暂存的失败数据
  73 + *
  74 + * @param context
  75 + * @param uid
  76 + * @return
  77 + */
  78 + public static FailedEntity getTempSaveFailByUUID(Context context, String uid, String UUID) {
  79 + try {
  80 + DbCore.init(context, dbName);
  81 + List<FailedEntity> list = DbCore.getDaoSession().getFailedEntityDao().queryBuilder().where(FailedEntityDao.Properties.Uid.eq(uid), FailedEntityDao.Properties.Uuid.eq(UUID)).list();
  82 + if (list != null && list.size() > 0) {
  83 + if (list.get(0) == null) {
  84 + return null;
  85 + } else {
  86 + return list.get(0);
  87 + }
  88 + }
  89 + return null;
  90 + } catch (Exception e) {
  91 + Log.e(TAG, "getTempSaveFailByUUID: " + e.toString());
  92 + return null;
  93 + }
  94 +
  95 + }
  96 +
  97 + /**
53 98 * 删除临时保存数据
54 99 *
55 100 * @param context
... ...