Commit 04e2c880ab2bafb5c39cd229e8fb1ccf88379832

Authored by 杨帅
1 parent c689e4c6

1 修复上传数据页面,用户暂停后,无法显示暂停路线问题

moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/service/CollStepService.java
@@ -28,8 +28,22 @@ import android.widget.Toast; @@ -28,8 +28,22 @@ import android.widget.Toast;
28 28
29 import com.baidu.trace.LBSTraceClient; 29 import com.baidu.trace.LBSTraceClient;
30 import com.baidu.trace.Trace; 30 import com.baidu.trace.Trace;
  31 +import com.baidu.trace.api.fence.AddMonitoredPersonResponse;
  32 +import com.baidu.trace.api.fence.CreateFenceResponse;
  33 +import com.baidu.trace.api.fence.DeleteFenceResponse;
  34 +import com.baidu.trace.api.fence.DeleteMonitoredPersonResponse;
31 import com.baidu.trace.api.fence.FenceAlarmPushInfo; 35 import com.baidu.trace.api.fence.FenceAlarmPushInfo;
  36 +import com.baidu.trace.api.fence.FenceListResponse;
  37 +import com.baidu.trace.api.fence.HistoryAlarmResponse;
  38 +import com.baidu.trace.api.fence.ListMonitoredPersonResponse;
32 import com.baidu.trace.api.fence.MonitoredAction; 39 import com.baidu.trace.api.fence.MonitoredAction;
  40 +import com.baidu.trace.api.fence.MonitoredStatus;
  41 +import com.baidu.trace.api.fence.MonitoredStatusByLocationResponse;
  42 +import com.baidu.trace.api.fence.MonitoredStatusInfo;
  43 +import com.baidu.trace.api.fence.MonitoredStatusRequest;
  44 +import com.baidu.trace.api.fence.MonitoredStatusResponse;
  45 +import com.baidu.trace.api.fence.OnFenceListener;
  46 +import com.baidu.trace.api.fence.UpdateFenceResponse;
33 import com.baidu.trace.api.track.LatestPoint; 47 import com.baidu.trace.api.track.LatestPoint;
34 import com.baidu.trace.api.track.LatestPointResponse; 48 import com.baidu.trace.api.track.LatestPointResponse;
35 import com.baidu.trace.api.track.OnTrackListener; 49 import com.baidu.trace.api.track.OnTrackListener;
@@ -43,11 +57,15 @@ import com.cnlive.moudle.pedometer.model.Constant; @@ -43,11 +57,15 @@ import com.cnlive.moudle.pedometer.model.Constant;
43 import com.cnlive.moudle.pedometer.model.MessageEvent; 57 import com.cnlive.moudle.pedometer.model.MessageEvent;
44 import com.cnlive.moudle.pedometer.model.step.StepCount; 58 import com.cnlive.moudle.pedometer.model.step.StepCount;
45 import com.cnlive.moudle.pedometer.model.step.StepValuePassListener; 59 import com.cnlive.moudle.pedometer.model.step.StepValuePassListener;
  60 +import com.cnlive.moudle.pedometer.service.KeepLiveService;
  61 +import com.cnlive.moudle.pedometer.service.StepService;
46 import com.cnlive.moudle.pedometer.sql.dao.CollUserStepEntityDao; 62 import com.cnlive.moudle.pedometer.sql.dao.CollUserStepEntityDao;
47 import com.cnlive.moudle.pedometer.sql.db.DbCore; 63 import com.cnlive.moudle.pedometer.sql.db.DbCore;
48 import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity; 64 import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
  65 +import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity;
49 import com.cnlive.moudle.pedometer.ui.activity.PedometerMainActivity; 66 import com.cnlive.moudle.pedometer.ui.activity.PedometerMainActivity;
50 import com.cnlive.moudle.pedometer.utils.ServiceUtils; 67 import com.cnlive.moudle.pedometer.utils.ServiceUtils;
  68 +import com.cnlive.moudle.pedometer.utils.StepUtil;
51 import com.cnlive.moudle.pedometer.utils.TimeUtil; 69 import com.cnlive.moudle.pedometer.utils.TimeUtil;
52 import com.example.moudle_pedometer.R; 70 import com.example.moudle_pedometer.R;
53 71
@@ -56,6 +74,7 @@ import org.greenrobot.eventbus.Subscribe; @@ -56,6 +74,7 @@ import org.greenrobot.eventbus.Subscribe;
56 import org.greenrobot.eventbus.ThreadMode; 74 import org.greenrobot.eventbus.ThreadMode;
57 75
58 import java.text.SimpleDateFormat; 76 import java.text.SimpleDateFormat;
  77 +import java.util.ArrayList;
59 import java.util.Date; 78 import java.util.Date;
60 import java.util.List; 79 import java.util.List;
61 import java.util.UUID; 80 import java.util.UUID;
@@ -63,8 +82,7 @@ import java.util.UUID; @@ -63,8 +82,7 @@ import java.util.UUID;
63 82
64 public class CollStepService extends Service implements SensorEventListener { 83 public class CollStepService extends Service implements SensorEventListener {
65 84
66 - private String TAG = "CollStepService";  
67 - 85 + private String TAG = "StepService";
68 /** 86 /**
69 * 通知栏相关 87 * 通知栏相关
70 */ 88 */
@@ -92,11 +110,11 @@ public class CollStepService extends Service implements SensorEventListener { @@ -92,11 +110,11 @@ public class CollStepService extends Service implements SensorEventListener {
92 /** 110 /**
93 * 保存记步计时器 111 * 保存记步计时器
94 */ 112 */
95 - private TimeCount time; 113 + private static TimeCount time;
96 /** 114 /**
97 * 当前所走的步数 115 * 当前所走的步数
98 */ 116 */
99 - private int CURRENT_STEP; 117 + private int CURRENT_STEP = 0;
100 /** 118 /**
101 * 计步传感器类型 Sensor.TYPE_STEP_COUNTER或者Sensor.TYPE_STEP_DETECTOR 119 * 计步传感器类型 Sensor.TYPE_STEP_COUNTER或者Sensor.TYPE_STEP_DETECTOR
102 */ 120 */
@@ -120,12 +138,12 @@ public class CollStepService extends Service implements SensorEventListener { @@ -120,12 +138,12 @@ public class CollStepService extends Service implements SensorEventListener {
120 /** 138 /**
121 * IBinder对象,向Activity传递数据的桥梁 139 * IBinder对象,向Activity传递数据的桥梁
122 */ 140 */
123 - private StepBinder stepBinder = new StepBinder(); 141 + private CollStepService.StepBinder stepBinder = new CollStepService.StepBinder();
124 private String userId; 142 private String userId;
125 private Handler handler; 143 private Handler handler;
126 private Runnable speedRunnable; 144 private Runnable speedRunnable;
127 private final int NOTIFICATION_ID = 100; 145 private final int NOTIFICATION_ID = 100;
128 - private static int tempStep;//计步器临时保存步数 146 + // private static int tempStep;//计步器临时保存步数
129 private static boolean pauseFlag;//是否暂停 147 private static boolean pauseFlag;//是否暂停
130 private static int speedCurrentStep;//用于检测速度步数 148 private static int speedCurrentStep;//用于检测速度步数
131 private boolean updateSpeedStepFlag;//是否是已经更新速度 149 private boolean updateSpeedStepFlag;//是否是已经更新速度
@@ -139,7 +157,6 @@ public class CollStepService extends Service implements SensorEventListener { @@ -139,7 +157,6 @@ public class CollStepService extends Service implements SensorEventListener {
139 * 轨迹监听器(用于接收纠偏后实时位置回调) 157 * 轨迹监听器(用于接收纠偏后实时位置回调)
140 */ 158 */
141 private OnTrackListener realTimeTraceListener = null; 159 private OnTrackListener realTimeTraceListener = null;
142 -// public static final long serviceId = 213553;//杨帅  
143 160
144 // 设备标识 161 // 设备标识
145 public static String entityName = ""; 162 public static String entityName = "";
@@ -153,8 +170,6 @@ public class CollStepService extends Service implements SensorEventListener { @@ -153,8 +170,6 @@ public class CollStepService extends Service implements SensorEventListener {
153 */ 170 */
154 public static Trace mTrace = null; 171 public static Trace mTrace = null;
155 172
156 - private boolean isFirstSendNotification = true;  
157 -  
158 public CollStepService() { 173 public CollStepService() {
159 174
160 } 175 }
@@ -165,11 +180,19 @@ public class CollStepService extends Service implements SensorEventListener { @@ -165,11 +180,19 @@ public class CollStepService extends Service implements SensorEventListener {
165 super.onCreate(); 180 super.onCreate();
166 init(); 181 init();
167 initBroadcastReceiver(); 182 initBroadcastReceiver();
  183 + if (!ServiceUtils.isServiceRunning(getApplicationContext(), "com.cnlive.moudle.pedometer.service.CollKeepLiveService")) {
  184 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  185 + startForegroundService(new Intent(getApplicationContext(), KeepLiveService.class));
  186 + } else {
  187 + startService(new Intent(getApplicationContext(), KeepLiveService.class));
  188 + }
  189 + }
168 showStartForegroundNotification(); 190 showStartForegroundNotification();
169 } 191 }
170 192
171 - private void initTrace() { 193 + private static int retryIndex = 0;
172 194
  195 + private void initTrace() {
173 if (mClient == null) { 196 if (mClient == null) {
174 mClient = new LBSTraceClient(getApplicationContext()); 197 mClient = new LBSTraceClient(getApplicationContext());
175 // 设置定位和打包周期 198 // 设置定位和打包周期
@@ -228,9 +251,33 @@ public class CollStepService extends Service implements SensorEventListener { @@ -228,9 +251,33 @@ public class CollStepService extends Service implements SensorEventListener {
228 if (StatusCodes.SUCCESS == errorNo || StatusCodes.START_TRACE_NETWORK_CONNECT_FAILED <= errorNo) { 251 if (StatusCodes.SUCCESS == errorNo || StatusCodes.START_TRACE_NETWORK_CONNECT_FAILED <= errorNo) {
229 //开始进行采集 252 //开始进行采集
230 if (mClient != null) { 253 if (mClient != null) {
  254 + retryIndex = 0;
231 mClient.startGather(traceListener); 255 mClient.startGather(traceListener);
232 Toast.makeText(getApplicationContext(), "开启轨迹服务", Toast.LENGTH_LONG).show(); 256 Toast.makeText(getApplicationContext(), "开启轨迹服务", Toast.LENGTH_LONG).show();
  257 + boolean isFirstSendNotification = CollCommonInfo.getIsFirstStepSendTraceTip(getApplicationContext());
  258 + if (isFirstSendNotification) {
  259 + CollCommonInfo.setIsFirstStepSendTraceTip(getApplicationContext(), false);
  260 + EventBus.getDefault().post(new MessageEvent(Constant.COLL_START_TRACE_GATHER_SUCCESS, ""));
  261 + }
  262 +
  263 +
  264 + }
  265 + } else {
  266 +
  267 + if (retryIndex < 4) {
  268 + //重新开启服务
  269 + if (mClient != null) {
  270 + mClient.startTrace(mTrace, traceListener);
  271 + retryIndex++;
  272 + }
  273 + } else {
  274 + boolean isFirstSendNotification = CollCommonInfo.getIsFirstStepSendTraceTip(getApplicationContext());
  275 + if (isFirstSendNotification) {
  276 + CollCommonInfo.setIsFirstStepSendTraceTip(getApplicationContext(), false);
  277 + EventBus.getDefault().post(new MessageEvent(Constant.COLL_START_TRACE_GATHER_FAIL, ""));
  278 + }
233 } 279 }
  280 +
234 } 281 }
235 } 282 }
236 283
@@ -269,17 +316,15 @@ public class CollStepService extends Service implements SensorEventListener { @@ -269,17 +316,15 @@ public class CollStepService extends Service implements SensorEventListener {
269 @Override 316 @Override
270 public void onStartGatherCallback(int errorNo, String message) { 317 public void onStartGatherCallback(int errorNo, String message) {
271 if (StatusCodes.SUCCESS == errorNo || StatusCodes.GATHER_STARTED == errorNo) { 318 if (StatusCodes.SUCCESS == errorNo || StatusCodes.GATHER_STARTED == errorNo) {
  319 + retryIndex = 0;
272 Toast.makeText(getApplicationContext(), "开始采集", Toast.LENGTH_LONG).show(); 320 Toast.makeText(getApplicationContext(), "开始采集", Toast.LENGTH_LONG).show();
273 - boolean isFirstSendNotification = CollCommonInfo.getIsFirstStepSendTraceTip(getApplicationContext());  
274 - if (isFirstSendNotification) {  
275 - CollCommonInfo.setIsFirstStepSendTraceTip(getApplicationContext(), false);  
276 - EventBus.getDefault().post(new MessageEvent(Constant.COLL_START_TRACE_GATHER_SUCCESS, ""));  
277 - }  
278 } else { 321 } else {
279 - boolean isFirstSendNotification = CollCommonInfo.getIsFirstStepSendTraceTip(getApplicationContext());  
280 - if (isFirstSendNotification) {  
281 - CollCommonInfo.setIsFirstStepSendTraceTip(getApplicationContext(), false);  
282 - EventBus.getDefault().post(new MessageEvent(Constant.COLL_START_TRACE_GATHER_FAIL, "")); 322 + //重新开启采集
  323 + if (retryIndex < 4) {
  324 + if (null != mClient) {
  325 + mClient.startGather(traceListener);
  326 + }
  327 + retryIndex++;
283 } 328 }
284 } 329 }
285 } 330 }
@@ -320,24 +365,6 @@ public class CollStepService extends Service implements SensorEventListener { @@ -320,24 +365,6 @@ public class CollStepService extends Service implements SensorEventListener {
320 @Override 365 @Override
321 public void onPushCallback(byte messageType, PushMessage pushMessage) { 366 public void onPushCallback(byte messageType, PushMessage pushMessage) {
322 Log.e(TAG, "onPushCallback: "); 367 Log.e(TAG, "onPushCallback: ");
323 -  
324 - if (messageType < 0x03 || messageType > 0x04) {  
325 - return;  
326 - }  
327 - FenceAlarmPushInfo alarmPushInfo = pushMessage.getFenceAlarmPushInfo();  
328 - if (null == alarmPushInfo) {  
329 - return;  
330 - }  
331 - //超出范围  
332 - if (alarmPushInfo.getMonitoredAction() == MonitoredAction.exit) {  
333 - EventBus.getDefault().post(new MessageEvent(Constant.EXIT_RANGE, ""));  
334 - }  
335 - //进入范围  
336 - else if (alarmPushInfo.getMonitoredAction() == MonitoredAction.enter) {  
337 - EventBus.getDefault().post(new MessageEvent(Constant.ENTER_RANGE, ""));  
338 - }  
339 - Toast.makeText(getApplicationContext(), "onPushCallback:" + alarmPushInfo.getMonitoredAction(), Toast.LENGTH_SHORT).show();  
340 -  
341 } 368 }
342 369
343 @Override 370 @Override
@@ -348,14 +375,11 @@ public class CollStepService extends Service implements SensorEventListener { @@ -348,14 +375,11 @@ public class CollStepService extends Service implements SensorEventListener {
348 //开启轨迹服务 375 //开启轨迹服务
349 if (mClient != null) { 376 if (mClient != null) {
350 mClient.startTrace(mTrace, traceListener); 377 mClient.startTrace(mTrace, traceListener);
351 - long stepStartTime = CollCommonInfo.getStepStartTime(getApplicationContext());  
352 - if (stepStartTime == 0) {  
353 - CollCommonInfo.setStepStartTime(getApplicationContext(), TimeUtil.getNowTimeStamp());  
354 - }  
355 } 378 }
356 379
357 } 380 }
358 381
  382 +
359 private long i = 0; 383 private long i = 0;
360 private long index = 0; 384 private long index = 0;
361 private int mJobId; 385 private int mJobId;
@@ -369,7 +393,6 @@ public class CollStepService extends Service implements SensorEventListener { @@ -369,7 +393,6 @@ public class CollStepService extends Service implements SensorEventListener {
369 if (!EventBus.getDefault().isRegistered(this)) { 393 if (!EventBus.getDefault().isRegistered(this)) {
370 EventBus.getDefault().register(this); 394 EventBus.getDefault().register(this);
371 } 395 }
372 -  
373 entityName = userId; 396 entityName = userId;
374 initTodayData(userId); 397 initTodayData(userId);
375 initTrace(); 398 initTrace();
@@ -383,8 +406,7 @@ public class CollStepService extends Service implements SensorEventListener { @@ -383,8 +406,7 @@ public class CollStepService extends Service implements SensorEventListener {
383 }).start(); 406 }).start();
384 startTimeCount(); 407 startTimeCount();
385 } else { 408 } else {
386 - EventBus.getDefault().post(new MessageEvent(Constant.COLL_START_TRACE_GATHER_FAIL, ""));  
387 - 409 + EventBus.getDefault().post(new MessageEvent(Constant.START_TRACE_GATHER_FAIL, ""));
388 } 410 }
389 // if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 411 // if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
390 // //开始配置JobInfo 412 // //开始配置JobInfo
@@ -406,7 +428,7 @@ public class CollStepService extends Service implements SensorEventListener { @@ -406,7 +428,7 @@ public class CollStepService extends Service implements SensorEventListener {
406 } 428 }
407 429
408 private void init() { 430 private void init() {
409 - CommonInfo.setIsRunStepService(getApplicationContext(), true); 431 + CollCommonInfo.setIsRunStepService(getApplicationContext(), true);
410 if (null == mNM) { 432 if (null == mNM) {
411 mNM = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 433 mNM = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
412 } 434 }
@@ -431,7 +453,7 @@ public class CollStepService extends Service implements SensorEventListener { @@ -431,7 +453,7 @@ public class CollStepService extends Service implements SensorEventListener {
431 private void showStartForegroundNotification() { 453 private void showStartForegroundNotification() {
432 remoteViews = new RemoteViews(getPackageName(), R.layout.custom_step_notification); 454 remoteViews = new RemoteViews(getPackageName(), R.layout.custom_step_notification);
433 NotificationChannel channel = null; 455 NotificationChannel channel = null;
434 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 456 + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
435 channel = new NotificationChannel(CHANNEL_ONE_ID, CHANNEL_ONE_NAME, 457 channel = new NotificationChannel(CHANNEL_ONE_ID, CHANNEL_ONE_NAME,
436 NotificationManager.IMPORTANCE_HIGH); 458 NotificationManager.IMPORTANCE_HIGH);
437 channel.enableLights(false); 459 channel.enableLights(false);
@@ -481,7 +503,18 @@ public class CollStepService extends Service implements SensorEventListener { @@ -481,7 +503,18 @@ public class CollStepService extends Service implements SensorEventListener {
481 if (speedRunnable != null) { 503 if (speedRunnable != null) {
482 handler.removeCallbacks(speedRunnable); 504 handler.removeCallbacks(speedRunnable);
483 } 505 }
484 - Log.e("杀死", "MyTestService"); 506 +// Log.e("杀死", "MyTestService");
  507 + lastStep = 0;
  508 + hasStepCount = 0;
  509 + hasRecord = false;
  510 + CURRENT_STEP = 0;
  511 + previousStepCount = 0;
  512 + if (sensorManager != null) {
  513 + sensorManager.unregisterListener(CollStepService.this);
  514 + sensorManager = null;
  515 + }
  516 + stepSensorType = -1;
  517 + time = null;
485 } 518 }
486 519
487 //接收事件 520 //接收事件
@@ -544,17 +577,15 @@ public class CollStepService extends Service implements SensorEventListener { @@ -544,17 +577,15 @@ public class CollStepService extends Service implements SensorEventListener {
544 return; 577 return;
545 } 578 }
546 //获取当天的数据,用于展示 CURRENT_DATE 579 //获取当天的数据,用于展示 CURRENT_DATE
547 - List<CollUserStepEntity> list = DbCore.getDaoSession().getCollUserStepEntityDao().queryBuilder().where(CollUserStepEntityDao.Properties.UserId.eq(userId), CollUserStepEntityDao.Properties.Date.eq(CURRENT_DATE)).list();  
548 - if (list == null) {  
549 - return;  
550 - }  
551 - if (list.size() == 0 || list.isEmpty()) { 580 + CollUserStepEntity userStepEntity = StepUtil.getCollUserStepData(getApplicationContext(), CollCommonInfo.getUserId(getApplicationContext()));
  581 + if (userStepEntity == null) {
552 CURRENT_STEP = 0; 582 CURRENT_STEP = 0;
553 - } else if (list.size() == 1) {  
554 - CURRENT_STEP = Integer.parseInt(list.get(0).getStepCount());  
555 } else { 583 } else {
556 - Log.e(TAG, "出错了!"); 584 + if (userStepEntity.getStepCount() != null) {
  585 + CURRENT_STEP = Integer.parseInt(userStepEntity.getStepCount());
  586 + }
557 } 587 }
  588 +// Log.e(TAG, "initTodayData: 初始化当前步数" + CURRENT_STEP);
558 if (mStepCount != null) { 589 if (mStepCount != null) {
559 mStepCount.setSteps(CURRENT_STEP); 590 mStepCount.setSteps(CURRENT_STEP);
560 } 591 }
@@ -562,6 +593,7 @@ public class CollStepService extends Service implements SensorEventListener { @@ -562,6 +593,7 @@ public class CollStepService extends Service implements SensorEventListener {
562 } 593 }
563 594
564 private void updateNotification() { 595 private void updateNotification() {
  596 +// Log.e(TAG, "updateNotification: 当前步数:" + CURRENT_STEP);
565 EventBus.getDefault().post(new MessageEvent(Constant.SERVICE_STEP_COUNT_UPDATE, CURRENT_STEP)); 597 EventBus.getDefault().post(new MessageEvent(Constant.SERVICE_STEP_COUNT_UPDATE, CURRENT_STEP));
566 updateSpeedStepFlag = false; 598 updateSpeedStepFlag = false;
567 // remoteViews = new RemoteViews(getPackageName(), R.layout.custom_step_notification); 599 // remoteViews = new RemoteViews(getPackageName(), R.layout.custom_step_notification);
@@ -857,29 +889,45 @@ public class CollStepService extends Service implements SensorEventListener { @@ -857,29 +889,45 @@ public class CollStepService extends Service implements SensorEventListener {
857 * 889 *
858 * @param event 890 * @param event
859 */ 891 */
  892 + private static int lastStep = 0;//有时候获取的是一样的
  893 +
860 @Override 894 @Override
861 public void onSensorChanged(SensorEvent event) { 895 public void onSensorChanged(SensorEvent event) {
862 //没有暂停 896 //没有暂停
863 if (stepSensorType == Sensor.TYPE_STEP_COUNTER) { 897 if (stepSensorType == Sensor.TYPE_STEP_COUNTER) {
864 //获取当前传感器返回的临时步数 898 //获取当前传感器返回的临时步数
865 - tempStep = (int) event.values[0]; 899 + int tempStep = (int) event.values[0];
  900 +// Log.e(TAG, "onSensorChanged: 第一次,tempStep:" + tempStep + "lastStep:" + lastStep + ",previousStepCount" + previousStepCount + ",CURRENT_STEP" + CURRENT_STEP);
866 //首次如果没有获取手机系统中已有的步数则获取一次系统中APP还未开始记步的步数 901 //首次如果没有获取手机系统中已有的步数则获取一次系统中APP还未开始记步的步数
867 if (!hasRecord) { 902 if (!hasRecord) {
868 hasRecord = true; 903 hasRecord = true;
869 hasStepCount = tempStep; 904 hasStepCount = tempStep;
  905 + previousStepCount = 0;
870 } else { 906 } else {
871 - //获取APP打开到现在的总步数=本次系统回调的总步数-APP打开之前已有的步数  
872 - int thisStepCount = tempStep - hasStepCount;  
873 - //本次有效步数=(APP打开后所记录的总步数-上一次APP打开后所记录的总步数)  
874 - int thisStep = thisStepCount - previousStepCount;  
875 - //当用户点击暂停了  
876 - if (pauseFlag) {  
877 - thisStep = 0; 907 + if (tempStep > lastStep) {
  908 + //获取APP打开到现在的总步数=本次系统回调的总步数-APP打开之前已有的步数
  909 +// Log.e(TAG, "tempStep: " + tempStep + ",hasStepCount:" + hasStepCount);
  910 + int thisStepCount = tempStep - hasStepCount;
  911 +// Log.e(TAG, "onSensorChanged: thisStepCount" + thisStepCount);
  912 + //本次有效步数=(APP打开后所记录的总步数-上一次APP打开后所记录的总步数)
  913 + int thisStep = thisStepCount - previousStepCount;
  914 + //记录最后一次APP打开到现在的总步数
  915 + previousStepCount = thisStepCount;
  916 +// Log.e(TAG, "本次有效步数: thisStep" + thisStep + ",previousStepCount:" + previousStepCount);
  917 + //当用户点击暂停了
  918 + if (pauseFlag) {
  919 + thisStep = 0;
  920 +// Log.e(TAG, "修改: thisStepCount" + thisStep);
  921 + }
  922 +// Log.e(TAG, "onSensorChanged: CURRENT_STEP" + CURRENT_STEP);
  923 + if (CURRENT_STEP < 0) {
  924 + CURRENT_STEP = -CURRENT_STEP;
  925 + }
  926 + //总步数=现有的步数+本次有效步数
  927 + CURRENT_STEP += (thisStep);
  928 +// Log.e(TAG, "onSensorChanged: 加了以后" + CURRENT_STEP);
  929 + lastStep = tempStep;
878 } 930 }
879 - //总步数=现有的步数+本次有效步数  
880 - CURRENT_STEP += (thisStep);  
881 - //记录最后一次APP打开到现在的总步数  
882 - previousStepCount = thisStepCount;  
883 } 931 }
884 } else if (stepSensorType == Sensor.TYPE_STEP_DETECTOR) { 932 } else if (stepSensorType == Sensor.TYPE_STEP_DETECTOR) {
885 if (event.values[0] == 1.0) { 933 if (event.values[0] == 1.0) {
@@ -905,27 +953,21 @@ public class CollStepService extends Service implements SensorEventListener { @@ -905,27 +953,21 @@ public class CollStepService extends Service implements SensorEventListener {
905 * 保存记步数据 953 * 保存记步数据
906 */ 954 */
907 private void save() { 955 private void save() {
908 - boolean isWriteUserStep = CommonInfo.getIsWriteUserStep(getApplicationContext());  
909 - if (!isWriteUserStep) {  
910 - return;  
911 - }  
912 int tempStep = CURRENT_STEP; 956 int tempStep = CURRENT_STEP;
913 - List<CollUserStepEntity> list = DbCore.getDaoSession().getCollUserStepEntityDao().queryBuilder().where(CollUserStepEntityDao.Properties.UserId.eq(userId), CollUserStepEntityDao.Properties.Date.eq(CURRENT_DATE)).list();  
914 - if (list.size() == 0 || list.isEmpty()) {  
915 - CollUserStepEntity data = new CollUserStepEntity();  
916 - data.setUuid(UUID.randomUUID().toString()); 957 + UserStepEntity userStepEntity = StepUtil.getUserStepData(getApplicationContext(), CollCommonInfo.getUserId(getApplicationContext()));
  958 + if (userStepEntity == null) {
  959 + UserStepEntity data = new UserStepEntity();
917 data.setUserId(userId); 960 data.setUserId(userId);
918 data.setDate(CURRENT_DATE); 961 data.setDate(CURRENT_DATE);
919 data.setStepCount(tempStep + ""); 962 data.setStepCount(tempStep + "");
920 - DbCore.getDaoSession().getCollUserStepEntityDao().insert(data);  
921 - } else if (list.size() == 1) {  
922 - CollUserStepEntity data = list.get(0);  
923 - data.setStepCount(tempStep + "");  
924 - DbCore.getDaoSession().getCollUserStepEntityDao().update(data); 963 + StepUtil.insertStepData(getApplicationContext(), data);
925 } else { 964 } else {
  965 + userStepEntity.setStepCount(tempStep + "");
  966 + StepUtil.updateStepData(getApplicationContext(), userStepEntity);
926 } 967 }
927 } 968 }
928 969
  970 +
929 /** 971 /**
930 * 保存记步数据 972 * 保存记步数据
931 */ 973 */
@@ -937,9 +979,11 @@ public class CollStepService extends Service implements SensorEventListener { @@ -937,9 +979,11 @@ public class CollStepService extends Service implements SensorEventListener {
937 @Override 979 @Override
938 public void onFinish() { 980 public void onFinish() {
939 // 如果计时器正常结束,则开始计步 981 // 如果计时器正常结束,则开始计步
940 - time.cancel();  
941 - save();  
942 - startTimeCount(); 982 + if (null != time) {
  983 + time.cancel();
  984 + save();
  985 + startTimeCount();
  986 + }
943 } 987 }
944 988
945 @Override 989 @Override
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/RunningFinishFragmetPresenter.java
@@ -211,6 +211,8 @@ public class RunningFinishFragmetPresenter extends MvpBasePresenter&lt;RunningFinis @@ -211,6 +211,8 @@ public class RunningFinishFragmetPresenter extends MvpBasePresenter&lt;RunningFinis
211 //判断用户是否点击暂停按钮 211 //判断用户是否点击暂停按钮
212 if (userStepEntity.getPauseCount() == 0) { 212 if (userStepEntity.getPauseCount() == 0) {
213 MyMapUtil.drawHistoryTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, R.drawable.icon_start, R.drawable.icon_end); 213 MyMapUtil.drawHistoryTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, R.drawable.icon_start, R.drawable.icon_end);
  214 + MyMapUtil.setMapAutoZoom(getView().baiduMap, resultPoints, -2f);
  215 +
214 //没有点击暂停 216 //没有点击暂停
215 //先判断是否到达终点 217 //先判断是否到达终点
216 checkUserIsFinish(resultPoints, userStepEntity, runningFinishBean, context); 218 checkUserIsFinish(resultPoints, userStepEntity, runningFinishBean, context);
@@ -231,6 +233,8 @@ public class RunningFinishFragmetPresenter extends MvpBasePresenter&lt;RunningFinis @@ -231,6 +233,8 @@ public class RunningFinishFragmetPresenter extends MvpBasePresenter&lt;RunningFinis
231 allResults.addAll(resultPoints); 233 allResults.addAll(resultPoints);
232 //判断用户是否完成 234 //判断用户是否完成
233 if (importPoints != null) { 235 if (importPoints != null) {
  236 + MyMapUtil.drawHistoryTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, 0, R.drawable.icon_end);
  237 + MyMapUtil.setMapAutoZoom(getView().baiduMap, allResults, -2f);
234 //先判断是否到达终点 238 //先判断是否到达终点
235 checkUserIsFinish(resultPoints, userStepEntity, runningFinishBean, context); 239 checkUserIsFinish(resultPoints, userStepEntity, runningFinishBean, context);
236 saveRouteData(context, userStepEntity, runningFinishBean); 240 saveRouteData(context, userStepEntity, runningFinishBean);
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/RunningMapFragmentPresenter.java
@@ -382,7 +382,7 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter&lt;RunningMapFrag @@ -382,7 +382,7 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter&lt;RunningMapFrag
382 if (isPause) { 382 if (isPause) {
383 MyMapUtil.drawRealTimeTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, R.drawable.icon_start); 383 MyMapUtil.drawRealTimeTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, R.drawable.icon_start);
384 } else { 384 } else {
385 - MyMapUtil.drawHistoryTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, R.drawable.icon_start, R.drawable.icon_end); 385 + MyMapUtil.drawHistoryTrack(context, getView().baiduMap, resultPoints, SortType.asc, R.color.red, R.drawable.icon_start, 0);
386 } 386 }
387 } 387 }
388 } 388 }
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/StepUtil.java
@@ -6,9 +6,11 @@ import android.util.Log; @@ -6,9 +6,11 @@ import android.util.Log;
6 6
7 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo; 7 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
8 import com.cnlive.moudle.pedometer.model.Constant; 8 import com.cnlive.moudle.pedometer.model.Constant;
  9 +import com.cnlive.moudle.pedometer.sql.dao.CollUserStepEntityDao;
9 import com.cnlive.moudle.pedometer.sql.dao.FailedEntityDao; 10 import com.cnlive.moudle.pedometer.sql.dao.FailedEntityDao;
10 import com.cnlive.moudle.pedometer.sql.dao.UserStepEntityDao; 11 import com.cnlive.moudle.pedometer.sql.dao.UserStepEntityDao;
11 import com.cnlive.moudle.pedometer.sql.db.DbCore; 12 import com.cnlive.moudle.pedometer.sql.db.DbCore;
  13 +import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
12 import com.cnlive.moudle.pedometer.sql.entity.FailedEntity; 14 import com.cnlive.moudle.pedometer.sql.entity.FailedEntity;
13 import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity; 15 import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity;
14 16
@@ -264,6 +266,27 @@ public class StepUtil { @@ -264,6 +266,27 @@ public class StepUtil {
264 } 266 }
265 267
266 /** 268 /**
  269 + * 获取运营用户数据
  270 + *
  271 + * @param context
  272 + * @param uid
  273 + * @return
  274 + */
  275 + public static CollUserStepEntity getCollUserStepData(Context context, String uid) {
  276 + if (!TextUtils.isEmpty(uid)) {
  277 + DbCore.init(context, dbName);
  278 + List<CollUserStepEntity> list = DbCore.getDaoSession().getCollUserStepEntityDao().queryBuilder().where(CollUserStepEntityDao.Properties.UserId.eq(uid)).list();
  279 + if (list != null && list.size() > 0) {
  280 + return list.get(0);
  281 + } else {
  282 + return null;
  283 + }
  284 + } else {
  285 + return null;
  286 + }
  287 + }
  288 +
  289 + /**
267 * 设置用户数据 290 * 设置用户数据
268 * 291 *
269 * @param context 292 * @param context