Commit fabe252586d053703af1c58c16412af985679e06

Authored by 杨帅
1 parent 05f9cba9

1 路径工具,数据上传逻辑

moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/presenter/CollRunningFinishFragmetPresenter.java
1 package com.cnlive.moudle.collectionTrace.frame.presenter; 1 package com.cnlive.moudle.collectionTrace.frame.presenter;
2 2
  3 +import android.app.Activity;
  4 +import android.os.Handler;
  5 +import android.text.TextUtils;
  6 +import android.util.Log;
  7 +
  8 +import com.baidu.mapapi.map.Overlay;
  9 +import com.baidu.mapapi.model.LatLng;
  10 +import com.cnlive.libs.base.logic.Logic;
  11 +import com.cnlive.libs.base.logic.callback.DataCallback;
  12 +import com.cnlive.libs.base.logic.callback.FailureCallback;
  13 +import com.cnlive.libs.base.logic.callback.SuccessCallback;
  14 +import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
3 import com.cnlive.moudle.collectionTrace.frame.view.CollRunningFinishFragmentView; 15 import com.cnlive.moudle.collectionTrace.frame.view.CollRunningFinishFragmentView;
  16 +import com.cnlive.moudle.collectionTrace.model.CollectPoint;
  17 +import com.cnlive.moudle.collectionTrace.utils.CollStepUtil;
  18 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
  19 +import com.cnlive.moudle.pedometer.net.ApiServiceRunLin;
  20 +import com.cnlive.moudle.pedometer.net.SubscriptionRequest;
  21 +import com.cnlive.moudle.pedometer.net.bean.BaseInfo;
  22 +import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
  23 +import com.cnlive.moudle.pedometer.sql.entity.FailedEntity;
  24 +import com.cnlive.moudle.pedometer.ui.activity.LineUpAgainActivity;
  25 +import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
  26 +import com.cnlive.moudle.pedometer.utils.GsonUtil;
  27 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
  28 +import com.cnlive.moudle.pedometer.utils.QMUITipDialogUtil;
  29 +import com.cnlive.moudle.pedometer.utils.StepUtil;
  30 +import com.example.moudle_pedometer.R;
4 import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter; 31 import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
5 32
  33 +import java.util.HashMap;
  34 +import java.util.List;
  35 +import java.util.Map;
  36 +
  37 +import io.reactivex.disposables.Disposable;
  38 +
6 public class CollRunningFinishFragmetPresenter extends MvpBasePresenter<CollRunningFinishFragmentView> { 39 public class CollRunningFinishFragmetPresenter extends MvpBasePresenter<CollRunningFinishFragmentView> {
  40 +
  41 + public void uploadTraceDateToServer(Activity context, CollUserStepEntity userStepEntity, String roadmap) {
  42 + QMUITipDialogUtil.loadingDialog(context, "正在上传数据", false);
  43 + Map<String, String> paramsMap = new HashMap<>();
  44 + //赛事id
  45 + if (!TextUtils.isEmpty(userStepEntity.getStreetId())) {
  46 + String eventId = userStepEntity.getStreetId();
  47 + paramsMap.put("eventId", eventId);
  48 + }
  49 + //踩点图
  50 + if (!TextUtils.isEmpty(roadmap)) {
  51 + paramsMap.put("roadmap", roadmap);
  52 + }
  53 + //运营人员sid
  54 + paramsMap.put("darenId", CollCommonInfo.getUserId(context));
  55 + if (!TextUtils.isEmpty(userStepEntity.getImportPoint())) {
  56 + List<CollectPoint> collectPoints = GsonUtil.jsonToList(userStepEntity.getImportPoint(), CollectPoint.class);
  57 + //绘制运营打的点
  58 + if (null != collectPoints) {
  59 + //根据打点集合,自适应缩放
  60 + CollectPoint startPoint = null;
  61 + if (!TextUtils.isEmpty(userStepEntity.getCollStartPointData())) {
  62 + startPoint = GsonUtil.GsonToBean(userStepEntity.getCollStartPointData(), CollectPoint.class);
  63 + }
  64 + CollectPoint endPoint = null;
  65 + if (!TextUtils.isEmpty(userStepEntity.getCollEndPointData())) {
  66 + endPoint = GsonUtil.GsonToBean(userStepEntity.getCollEndPointData(), CollectPoint.class);
  67 + }
  68 + if (null != startPoint) {
  69 + collectPoints.add(0, startPoint);
  70 + //起点
  71 + paramsMap.put("startLocation", startPoint.getPointName());
  72 + }
  73 + if (null != endPoint) {
  74 + collectPoints.add(endPoint);
  75 + // 终点
  76 + paramsMap.put("endLocation", endPoint.getPointName());
  77 +
  78 + }
  79 + // 经纬度
  80 + paramsMap.put("latLongitude", GsonUtil.GsonString(collectPoints));
  81 + }
  82 + }
  83 + //全程里数 mileage
  84 + if (!TextUtils.isEmpty(userStepEntity.getStepCount())) {
  85 + double mileage = CollStepUtil.getWalkDistanceKM(Long.parseLong(userStepEntity.getStepCount()));
  86 + paramsMap.put("mileage", mileage + "");
  87 + }
  88 + //开始时间
  89 + if (0 != userStepEntity.getStartTimeStamp()) {
  90 + paramsMap.put("startTime", userStepEntity.getStartTimeStamp() + "");
  91 + }
  92 + //结束时间
  93 + if (0 != userStepEntity.getFinishTimeStamp()) {
  94 + paramsMap.put("endTime", userStepEntity.getFinishTimeStamp() + "");
  95 + }
  96 + //实体名称
  97 + paramsMap.put("entityName", CollCommonInfo.getUserId(context));
  98 +
  99 + Logic.create(paramsMap).action(new Logic.Action<Map<String, String>, BaseInfo>() {
  100 + @Override
  101 + public Disposable action(Map<String, String> stringStringMap, DataCallback<BaseInfo> dataCallback) {
  102 + return SubscriptionRequest.service(ApiServiceRunLin.class, api -> api.collSaveShoeLine(stringStringMap)).subscribe(context, dataCallback);
  103 + }
  104 + }).<BaseInfo>event()
  105 + .setFailureCallback(new FailureCallback() {
  106 + @Override
  107 + public void onFailure(int code, String message) {
  108 + if (getView() == null) {
  109 + return;
  110 + }
  111 + QMUITipDialogUtil.dismessDialog();
  112 + SelectDialog selectDialog = new SelectDialog(context, "数据上传失败,是否重试?", "取消", new SelectDialog.DialogInterface() {
  113 + @Override
  114 + public void onClick(SelectDialog dialog) {
  115 + dialog.dismiss();
  116 + }
  117 + }, "重试", new SelectDialog.DialogInterface() {
  118 + @Override
  119 + public void onClick(SelectDialog dialog) {
  120 + dialog.dismiss();
  121 + uploadTraceDateToServer(context, userStepEntity, roadmap);
  122 + }
  123 + });
  124 + selectDialog.setCancelable(false);
  125 + selectDialog.setCanceledOnTouchOutside(false);
  126 + if (!selectDialog.isShowing()) {
  127 + selectDialog.show();
  128 + }
  129 + }
  130 + }).setSuccessCallback(new SuccessCallback<BaseInfo>() {
  131 + @Override
  132 + public void onSuccess(BaseInfo baseInfo) {
  133 + if (getView() == null) {
  134 + return;
  135 + }
  136 + QMUITipDialogUtil.dismessDialog();
  137 + QMUITipDialogUtil.successDialog(context, "数据上传成功", 1);
  138 + //清空数据
  139 + CollStepUtil.clearRunData(context, CollCommonInfo.getUserId(context));
  140 + CollCommonInfo.reset(context);
  141 + new Handler().postDelayed(new Runnable() {
  142 + @Override
  143 + public void run() {
  144 + if (null != context) {
  145 + context.finish();
  146 + }
  147 + }
  148 + }, 1000);
  149 + }
  150 + }).start();
  151 + }
7 } 152 }
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunningFinishFragmentView.java
@@ -3,9 +3,13 @@ package com.cnlive.moudle.collectionTrace.frame.view; @@ -3,9 +3,13 @@ package com.cnlive.moudle.collectionTrace.frame.view;
3 import android.content.Context; 3 import android.content.Context;
4 import android.graphics.Bitmap; 4 import android.graphics.Bitmap;
5 import android.graphics.BitmapFactory; 5 import android.graphics.BitmapFactory;
  6 +import android.os.Handler;
6 import android.support.v7.widget.LinearLayoutManager; 7 import android.support.v7.widget.LinearLayoutManager;
7 import android.text.TextUtils; 8 import android.text.TextUtils;
  9 +import android.util.Log;
  10 +import android.view.MotionEvent;
8 import android.view.View; 11 import android.view.View;
  12 +import android.widget.Toast;
9 13
10 import com.baidu.location.LocationClient; 14 import com.baidu.location.LocationClient;
11 import com.baidu.location.LocationClientOption; 15 import com.baidu.location.LocationClientOption;
@@ -17,27 +21,55 @@ import com.baidu.mapapi.map.Overlay; @@ -17,27 +21,55 @@ import com.baidu.mapapi.map.Overlay;
17 import com.baidu.mapapi.map.UiSettings; 21 import com.baidu.mapapi.map.UiSettings;
18 import com.baidu.mapapi.model.LatLng; 22 import com.baidu.mapapi.model.LatLng;
19 import com.baidu.trace.LBSTraceClient; 23 import com.baidu.trace.LBSTraceClient;
  24 +import com.baidu.trace.api.fence.AddMonitoredPersonResponse;
  25 +import com.baidu.trace.api.fence.CreateFenceRequest;
  26 +import com.baidu.trace.api.fence.CreateFenceResponse;
  27 +import com.baidu.trace.api.fence.DeleteFenceResponse;
  28 +import com.baidu.trace.api.fence.DeleteMonitoredPersonResponse;
  29 +import com.baidu.trace.api.fence.FenceListResponse;
  30 +import com.baidu.trace.api.fence.HistoryAlarmResponse;
  31 +import com.baidu.trace.api.fence.ListMonitoredPersonResponse;
  32 +import com.baidu.trace.api.fence.MonitoredStatusByLocationResponse;
  33 +import com.baidu.trace.api.fence.MonitoredStatusResponse;
  34 +import com.baidu.trace.api.fence.OnFenceListener;
  35 +import com.baidu.trace.api.fence.UpdateFenceResponse;
  36 +import com.baidu.trace.model.CoordType;
20 import com.baidu.trace.model.SortType; 37 import com.baidu.trace.model.SortType;
  38 +import com.cnlive.libs.base.logic.Event;
  39 +import com.cnlive.libs.base.logic.callback.FailureCallback;
  40 +import com.cnlive.libs.base.logic.callback.SuccessCallback;
  41 +import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
21 import com.cnlive.moudle.collectionTrace.model.CollectPoint; 42 import com.cnlive.moudle.collectionTrace.model.CollectPoint;
22 import com.cnlive.moudle.collectionTrace.ui.adapter.CollFinishDetaiAdapter; 43 import com.cnlive.moudle.collectionTrace.ui.adapter.CollFinishDetaiAdapter;
23 import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunningFinishFragment; 44 import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunningFinishFragment;
24 import com.cnlive.moudle.collectionTrace.utils.CollStepUtil; 45 import com.cnlive.moudle.collectionTrace.utils.CollStepUtil;
25 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo; 46 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
  47 +import com.cnlive.moudle.pedometer.model.Constant;
26 import com.cnlive.moudle.pedometer.model.RunningFinishBean; 48 import com.cnlive.moudle.pedometer.model.RunningFinishBean;
27 import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity; 49 import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
28 import com.cnlive.moudle.pedometer.ui.fragment.RunningFinishFragment; 50 import com.cnlive.moudle.pedometer.ui.fragment.RunningFinishFragment;
  51 +import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
  52 +import com.cnlive.moudle.pedometer.upload.UploadLogic;
29 import com.cnlive.moudle.pedometer.utils.BitmapUtil; 53 import com.cnlive.moudle.pedometer.utils.BitmapUtil;
30 import com.cnlive.moudle.pedometer.utils.GsonUtil; 54 import com.cnlive.moudle.pedometer.utils.GsonUtil;
31 import com.cnlive.moudle.pedometer.utils.MyMapUtil; 55 import com.cnlive.moudle.pedometer.utils.MyMapUtil;
  56 +import com.cnlive.moudle.pedometer.utils.QMUITipDialogUtil;
  57 +import com.cnlive.moudle.pedometer.utils.ScreenUtil;
32 import com.cnlive.moudle.pedometer.utils.TimeUtil; 58 import com.cnlive.moudle.pedometer.utils.TimeUtil;
33 import com.cnlive.strike.application.GlideApp; 59 import com.cnlive.strike.application.GlideApp;
34 import com.example.moudle_pedometer.R; 60 import com.example.moudle_pedometer.R;
35 import com.hannesdorfmann.mosby3.mvp.MvpView; 61 import com.hannesdorfmann.mosby3.mvp.MvpView;
  62 +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
  63 +import com.sothree.slidinguppanel.SlidingUpPanelLayout;
36 64
  65 +import java.io.File;
  66 +import java.io.FileOutputStream;
  67 +import java.text.SimpleDateFormat;
37 import java.util.ArrayList; 68 import java.util.ArrayList;
  69 +import java.util.Date;
38 import java.util.List; 70 import java.util.List;
39 71
40 -public class CollRunningFinishFragmentView implements MvpView { 72 +public class CollRunningFinishFragmentView implements MvpView, OnFenceListener {
41 private CollRunningFinishFragment fragment; 73 private CollRunningFinishFragment fragment;
42 private CollFinishDetaiAdapter adapter; 74 private CollFinishDetaiAdapter adapter;
43 public BaiduMap baiduMap; 75 public BaiduMap baiduMap;
@@ -45,6 +77,9 @@ public class CollRunningFinishFragmentView implements MvpView { @@ -45,6 +77,9 @@ public class CollRunningFinishFragmentView implements MvpView {
45 private UiSettings mUiSettings; 77 private UiSettings mUiSettings;
46 private LBSTraceClient mClient = null; 78 private LBSTraceClient mClient = null;
47 private List<Overlay> allMapOverlays; 79 private List<Overlay> allMapOverlays;
  80 + private List<LatLng> queryResultPoints;
  81 + private List<com.baidu.trace.model.LatLng> collectLatLngs;
  82 + private CollUserStepEntity collUserStepEntity;
48 83
49 public CollRunningFinishFragmentView(CollRunningFinishFragment fragment) { 84 public CollRunningFinishFragmentView(CollRunningFinishFragment fragment) {
50 this.fragment = fragment; 85 this.fragment = fragment;
@@ -55,21 +90,25 @@ public class CollRunningFinishFragmentView implements MvpView { @@ -55,21 +90,25 @@ public class CollRunningFinishFragmentView implements MvpView {
55 } 90 }
56 91
57 public void initView(CollUserStepEntity collUserStepEntity) { 92 public void initView(CollUserStepEntity collUserStepEntity) {
  93 + this.collUserStepEntity = collUserStepEntity;
58 allMapOverlays = new ArrayList<>(); 94 allMapOverlays = new ArrayList<>();
  95 + //设置滑动卡片
  96 +// fragment.binding.slidingLayout.set
  97 + //添加起点
  98 + CollectPoint startPoint = null;
  99 + if (!TextUtils.isEmpty(collUserStepEntity.getCollStartPointData())) {
  100 + startPoint = GsonUtil.GsonToBean(collUserStepEntity.getCollStartPointData(), CollectPoint.class);
  101 + }
  102 + CollectPoint endPoint = null;
  103 + if (!TextUtils.isEmpty(collUserStepEntity.getCollEndPointData())) {
  104 + endPoint = GsonUtil.GsonToBean(collUserStepEntity.getCollEndPointData(), CollectPoint.class);
  105 + }
59 //查询用户历史轨迹 106 //查询用户历史轨迹
60 if (0 != collUserStepEntity.getStartTimeStamp() && 0 != collUserStepEntity.getFinishTimeStamp()) { 107 if (0 != collUserStepEntity.getStartTimeStamp() && 0 != collUserStepEntity.getFinishTimeStamp()) {
61 long startTime = collUserStepEntity.getStartTimeStamp(); 108 long startTime = collUserStepEntity.getStartTimeStamp();
62 long endTime = collUserStepEntity.getFinishTimeStamp(); 109 long endTime = collUserStepEntity.getFinishTimeStamp();
63 //开始查询 110 //开始查询
64 - MyMapUtil.queryHistoryTrace(getContext(), mClient, CommonInfo.getUserId(getContext()), startTime, endTime, new MyMapUtil.CallBack() {  
65 - @Override  
66 - public void success(List<LatLng> resultPoints) {  
67 - if (null != resultPoints && resultPoints.size() > 1) {  
68 - //绘制轨迹  
69 - MyMapUtil.drawHistoryTrack(getContext(), baiduMap, resultPoints, SortType.asc, R.color.green_round, R.drawable.icon_start, R.drawable.icon_end);  
70 - }  
71 - }  
72 - }); 111 + queryWalkTrace(startTime, endTime);
73 if (!TextUtils.isEmpty(collUserStepEntity.getImportPoint())) { 112 if (!TextUtils.isEmpty(collUserStepEntity.getImportPoint())) {
74 List<CollectPoint> collectPoints = GsonUtil.jsonToList(collUserStepEntity.getImportPoint(), CollectPoint.class); 113 List<CollectPoint> collectPoints = GsonUtil.jsonToList(collUserStepEntity.getImportPoint(), CollectPoint.class);
75 //绘制运营打的点 114 //绘制运营打的点
@@ -114,15 +153,6 @@ public class CollRunningFinishFragmentView implements MvpView { @@ -114,15 +153,6 @@ public class CollRunningFinishFragmentView implements MvpView {
114 //设置适配器 153 //设置适配器
115 if (!TextUtils.isEmpty(collUserStepEntity.getImportPoint())) { 154 if (!TextUtils.isEmpty(collUserStepEntity.getImportPoint())) {
116 List<CollectPoint> collectPoints = GsonUtil.jsonToList(collUserStepEntity.getImportPoint(), CollectPoint.class); 155 List<CollectPoint> collectPoints = GsonUtil.jsonToList(collUserStepEntity.getImportPoint(), CollectPoint.class);
117 - //添加起点  
118 - CollectPoint startPoint = null;  
119 - if (!TextUtils.isEmpty(collUserStepEntity.getCollStartPointData())) {  
120 - startPoint = GsonUtil.GsonToBean(collUserStepEntity.getCollStartPointData(), CollectPoint.class);  
121 - }  
122 - CollectPoint endPoint = null;  
123 - if (!TextUtils.isEmpty(collUserStepEntity.getCollEndPointData())) {  
124 - endPoint = GsonUtil.GsonToBean(collUserStepEntity.getCollEndPointData(), CollectPoint.class);  
125 - }  
126 if (null == collectPoints) { 156 if (null == collectPoints) {
127 collectPoints = new ArrayList<>(); 157 collectPoints = new ArrayList<>();
128 } 158 }
@@ -132,7 +162,11 @@ public class CollRunningFinishFragmentView implements MvpView { @@ -132,7 +162,11 @@ public class CollRunningFinishFragmentView implements MvpView {
132 if (null != endPoint) { 162 if (null != endPoint) {
133 collectPoints.add(endPoint); 163 collectPoints.add(endPoint);
134 } 164 }
135 - 165 + //格式化打的点
  166 + collectLatLngs = new ArrayList<>();
  167 + for (CollectPoint collectPoint : collectPoints) {
  168 + collectLatLngs.add(new com.baidu.trace.model.LatLng(collectPoint.getLatitude(), collectPoint.getLongitude()));
  169 + }
136 adapter = new CollFinishDetaiAdapter(fragment.getActivity(), collectPoints); 170 adapter = new CollFinishDetaiAdapter(fragment.getActivity(), collectPoints);
137 //设置 171 //设置
138 fragment.binding.includeFinishUserInfo.rvList.setLayoutManager(new LinearLayoutManager(fragment.getActivity())); 172 fragment.binding.includeFinishUserInfo.rvList.setLayoutManager(new LinearLayoutManager(fragment.getActivity()));
@@ -148,9 +182,262 @@ public class CollRunningFinishFragmentView implements MvpView { @@ -148,9 +182,262 @@ public class CollRunningFinishFragmentView implements MvpView {
148 fragment.getActivity().finish(); 182 fragment.getActivity().finish();
149 } 183 }
150 }); 184 });
  185 + fragment.binding.rlScrollViewStartBtn.setOnTouchListener(new View.OnTouchListener() {
  186 + @Override
  187 + public boolean onTouch(View view, MotionEvent motionEvent) {
  188 + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
  189 + //判断是否成功查询到轨迹点
  190 + if (null == queryResultPoints) {
  191 + QMUITipDialogUtil.textDialog(getContext(), "正在获取轨迹信息,请稍后...", 1);
  192 + } else {
  193 + //隐藏面板视图
  194 +// fragment.binding.slidingLayout.setPanelState(SlidingUpPanelLayout.PanelState.HIDDEN);
  195 + fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(), 100));
  196 + fragment.binding.slidingLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
  197 + //让运营选择最佳的截图
  198 + SelectDialog selectDialog = new SelectDialog(getContext(), "当前赛事图是否\n已经调整到最佳效果?", "否", new SelectDialog.DialogInterface() {
  199 + @Override
  200 + public void onClick(SelectDialog dialog) {
  201 + dialog.dismiss();
  202 + }
  203 + }, "是", new SelectDialog.DialogInterface() {
  204 + @Override
  205 + public void onClick(SelectDialog dialog) {
  206 + if (null != allMapOverlays) {
  207 + for (Overlay overlay : allMapOverlays) {
  208 + overlay.remove();
  209 + }
  210 + }
  211 + dialog.dismiss();
  212 + QMUITipDialogUtil.loadingDialog(getContext(), "正在截取赛事图片,请稍后", false);
  213 + //延迟一秒进行截图,以免把打的点都截取到
  214 + new Handler().postDelayed(new Runnable() {
  215 + @Override
  216 + public void run() {
  217 + if (null != collectLatLngs && collectLatLngs.size() > 1) {
  218 + getBaiDuSnap();
  219 + }
  220 + }
  221 + }, 1000);
  222 + }
  223 + });
  224 + selectDialog.setCanceledOnTouchOutside(false);
  225 + selectDialog.setCancelable(false);
  226 + selectDialog.show();
  227 + }
  228 + }
  229 + return false;
  230 + }
  231 + });
  232 +// //确定轨迹按钮点击事件
  233 +// fragment.binding.rlScrollViewStartBtn.setOnClickListener(new View.OnClickListener() {
  234 +// @Override
  235 +// public void onClick(View view) {
  236 +// Log.e("aaa", "onClick: ");
  237 +// //开始整合数据
  238 +// //判断是否成功查询到轨迹点
  239 +// if (null == queryResultPoints) {
  240 +// QMUITipDialogUtil.textDialog(getContext(), "正在获取轨迹信息,请稍后...", 1);
  241 +// } else {
  242 +// //隐藏面板视图
  243 +//// fragment.binding.slidingLayout.setPanelState(SlidingUpPanelLayout.PanelState.HIDDEN);
  244 +// fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(),100));
  245 +// fragment.binding.slidingLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
  246 +// //让运营选择最佳的截图
  247 +// SelectDialog selectDialog = new SelectDialog(getContext(), "当前赛事图是否\n已经调整到最佳效果?", "否", new SelectDialog.DialogInterface() {
  248 +// @Override
  249 +// public void onClick(SelectDialog dialog) {
  250 +// dialog.dismiss();
  251 +// }
  252 +// }, "是", new SelectDialog.DialogInterface() {
  253 +// @Override
  254 +// public void onClick(SelectDialog dialog) {
  255 +// if (null != allMapOverlays) {
  256 +// for (Overlay overlay : allMapOverlays) {
  257 +// overlay.remove();
  258 +// }
  259 +// }
  260 +// dialog.dismiss();
  261 +// QMUITipDialogUtil.textDialog(getContext(), "正在截取赛事图片,请稍后", 1);
  262 +// //延迟一秒进行截图,以免把打的点都截取到
  263 +// new Handler().postDelayed(new Runnable() {
  264 +// @Override
  265 +// public void run() {
  266 +// baiduMap.snapshot(new BaiduMap.SnapshotReadyCallback() {
  267 +// @Override
  268 +// public void onSnapshotReady(Bitmap bitmap) {
  269 +// if (null == bitmap) {
  270 +// QMUITipDialogUtil.dismessDialog();
  271 +// QMUITipDialogUtil.failedDialog(getContext(), "赛事图片截取失败,请重试", 2);
  272 +// return;
  273 +// }
  274 +//
  275 +// //开始保存截屏
  276 +// try {
  277 +// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
  278 +// File image = new File(getContext().getExternalCacheDir() + "/location_screenshot_" + sdf.format(new Date()) + ".jpeg");
  279 +// FileOutputStream fos = new FileOutputStream(当前赛事图是否
  280 +//已经调整到最佳效果?image);
  281 +// boolean b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
  282 +// fos.flush();
  283 +// fos.close();
  284 +// //获取保存截图地址
  285 +//// image.getAbsolutePath()
  286 +// } catch (Exception e) {
  287 +// QMUITipDialogUtil.dismessDialog();
  288 +// QMUITipDialogUtil.failedDialog(getContext(), "赛事图片截取失败,请重试", 2);
  289 +// e.printStackTrace();
  290 +// }
  291 +// }
  292 +// });
  293 +// }
  294 +// }, 1000);
  295 +// }
  296 +// });
  297 +// selectDialog.setCanceledOnTouchOutside(false);
  298 +// selectDialog.setCancelable(false);
  299 +// selectDialog.show();
  300 +// }
  301 +// }
  302 +// });
  303 +
151 } 304 }
152 305
  306 + private void queryWalkTrace(long startTime, long endTime) {
  307 + MyMapUtil.queryHistoryTrace(getContext(), mClient, CommonInfo.getUserId(getContext()), startTime, endTime, new MyMapUtil.CallBack() {
  308 + @Override
  309 + public void success(List<LatLng> resultPoints) {
  310 + queryResultPoints = resultPoints;
  311 + if (null != resultPoints) {
  312 + //绘制轨迹
  313 + MyMapUtil.drawHistoryTrack(getContext(), baiduMap, resultPoints, SortType.asc, R.color.green_round, R.drawable.icon_start, R.drawable.icon_end);
  314 + }else {
  315 + SelectDialog selectDialog = new SelectDialog(getContext(), "轨迹获取失败,是否重试?", "取消", new SelectDialog.DialogInterface() {
  316 + @Override
  317 + public void onClick(SelectDialog dialog) {
  318 + dialog.dismiss();
  319 + }
  320 + }, "重试", new SelectDialog.DialogInterface() {
  321 + @Override
  322 + public void onClick(SelectDialog dialog) {
  323 + dialog.dismiss();
  324 + queryWalkTrace(startTime,endTime);
  325 + }
  326 + });
  327 + selectDialog.setCancelable(false);
  328 + selectDialog.setCanceledOnTouchOutside(false);
  329 + if (!selectDialog.isShowing()) {
  330 + selectDialog.show();
  331 + }
  332 + }
  333 + }
  334 + });
  335 + }
  336 +
  337 + private void getBaiDuSnap() {
  338 + baiduMap.snapshot(new BaiduMap.SnapshotReadyCallback() {
  339 + @Override
  340 + public void onSnapshotReady(Bitmap bitmap) {
  341 + QMUITipDialogUtil.dismessDialog();
  342 + if (null == bitmap) {
  343 + QMUITipDialogUtil.failedDialog(getContext(), "赛事图片截取失败,请重试", 2);
  344 + return;
  345 + }
  346 + //开始保存截屏
  347 + try {
  348 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
  349 + File image = new File(getContext().getExternalCacheDir() + "/location_screenshot_" + sdf.format(new Date()) + ".jpeg");
  350 + FileOutputStream fos = new FileOutputStream(image);
  351 + boolean b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
  352 + fos.flush();
  353 + fos.close();
  354 + //获取保存截图地址
  355 + String roadMapPath = image.getAbsolutePath();
  356 + //开始上传
  357 + uploadRoadMapPic(roadMapPath);
  358 + } catch (Exception e) {
  359 + QMUITipDialogUtil.dismessDialog();
  360 + QMUITipDialogUtil.failedDialog(getContext(), "赛事图片截取失败,请重试", 2);
  361 + e.printStackTrace();
  362 + }
  363 + }
  364 + });
  365 + }
  366 +
  367 + /**
  368 + * 上传赛事图片
  369 + *
  370 + * @param roadMapPath
  371 + */
  372 + private void uploadRoadMapPic(String roadMapPath) {
  373 + if (!TextUtils.isEmpty(roadMapPath)) {
  374 + QMUITipDialogUtil.loadingDialog(getContext(), "正在上传赛事图片,请稍后", false);
  375 + List<String> imagePaths = new ArrayList<>();
  376 + imagePaths.add(roadMapPath);
  377 + UploadLogic.uploadAddressPicInfo(getContext(), imagePaths, new Event<String>()
  378 + .setFailureCallback(new FailureCallback() {
  379 + @Override
  380 + public void onFailure(int i, String s) {
  381 + QMUITipDialogUtil.dismessDialog();
  382 + SelectDialog selectDialog = new SelectDialog(getContext(), "赛事图片上传失败,是否重试?", "取消", new SelectDialog.DialogInterface() {
  383 + @Override
  384 + public void onClick(SelectDialog dialog) {
  385 + dialog.dismiss();
  386 + }
  387 + }, "重试", new SelectDialog.DialogInterface() {
  388 + @Override
  389 + public void onClick(SelectDialog dialog) {
  390 + dialog.dismiss();
  391 + uploadRoadMapPic(roadMapPath);
  392 + }
  393 + });
  394 + selectDialog.setCancelable(false);
  395 + selectDialog.setCanceledOnTouchOutside(false);
  396 + if (!selectDialog.isShowing()) {
  397 + selectDialog.show();
  398 + }
  399 +
  400 + }
  401 + })
  402 + .setSuccessCallback(new SuccessCallback<String>() {
  403 + @Override
  404 + public void onSuccess(String data) {
  405 + QMUITipDialogUtil.dismessDialog();
  406 + //开始把数据传到服务端
  407 + collUserStepEntity = CollStepUtil.getCollUserStepData(getContext(), CollCommonInfo.getUserId(getContext()));
  408 + if (null != fragment.getPresenter() || null == fragment.getActivity() || null == collUserStepEntity || TextUtils.isEmpty(data)) {
  409 + fragment.getPresenter().uploadTraceDateToServer(fragment.getActivity(), collUserStepEntity, data);
  410 + }
  411 + }
  412 + })
  413 + );
  414 + //
  415 + }
  416 + }
153 417
  418 + // //判断地理围栏是否创建成功
  419 +// if (null != collUserStepEntity) {
  420 +// if (TextUtils.isEmpty(collUserStepEntity.getFenceId())) {
  421 +// //开始创建地理围栏
  422 +// QMUITipDialogUtil.loadingDialog(getContext(), "正在创建地理围栏", false);
  423 +// CreateFenceRequest createFenceRequest = null;
  424 +// int offset = Constant.FENCE_OFFSET;// 偏离距离
  425 +// int denoise = Constant.FENCE_DENOISE; //围栏去噪精度
  426 +// if (null != collUserStepEntity) {
  427 +// //赛事标题作为围栏名称
  428 +// String fenceName = collUserStepEntity.getStreetTitle();
  429 +// if (mClient != null && !TextUtils.isEmpty(fenceName) && null != collectLatLngs) {
  430 +// if (createFenceRequest == null) {
  431 +// createFenceRequest = CreateFenceRequest.buildServerPolylineRequest(Constant.TAG, Constant.SERVICE_ID, fenceName, "", collectLatLngs, offset, denoise, CoordType.gcj02);
  432 +// mClient.createFence(createFenceRequest, CollRunningFinishFragmentView.this);
  433 +// }
  434 +// }
  435 +// }
  436 +// } else {
  437 +// //已经存在地理围栏(直接将数据传给服务器)
  438 +//
  439 +// }
  440 +// }
154 public void initMap() { 441 public void initMap() {
155 this.mMapView = fragment.binding.mapView; 442 this.mMapView = fragment.binding.mapView;
156 if (baiduMap == null) { 443 if (baiduMap == null) {
@@ -231,4 +518,79 @@ public class CollRunningFinishFragmentView implements MvpView { @@ -231,4 +518,79 @@ public class CollRunningFinishFragmentView implements MvpView {
231 mMapView = null; 518 mMapView = null;
232 } 519 }
233 } 520 }
  521 +
  522 + /**
  523 + * 常见围栏成功回调
  524 + *
  525 + * @param createFenceResponse
  526 + */
  527 + @Override
  528 + public void onCreateFenceCallback(CreateFenceResponse createFenceResponse) {
  529 + if (null == getContext() || null == createFenceResponse) {
  530 + return;
  531 + }
  532 + Log.e("地理围栏", "状态: " + createFenceResponse.getStatus() + ",返回信息:" + createFenceResponse.getMessage());
  533 + //关闭提示框
  534 + QMUITipDialogUtil.dismessDialog();
  535 + //判断是否成功
  536 + if (0 == createFenceResponse.getStatus()) {
  537 + //获取围栏id
  538 + long fenceId = createFenceResponse.getFenceId();
  539 + Log.e("地理围栏", "创建围栏成功ID: " + fenceId + ",围栏名称" + createFenceResponse.getFenceName());
  540 + //保存到数据库中
  541 + CollStepUtil.setFenceId(getContext(), CollCommonInfo.getUserId(getContext()), fenceId + "");
  542 + //提交到后台
  543 +
  544 + } else {
  545 + //创建围栏失败
  546 + //创建提示信息
  547 + QMUITipDialogUtil.failedDialog(getContext(), createFenceResponse.getMessage(), 2);
  548 + }
  549 +
  550 + }
  551 +
  552 + @Override
  553 + public void onUpdateFenceCallback(UpdateFenceResponse updateFenceResponse) {
  554 +
  555 + }
  556 +
  557 + @Override
  558 + public void onDeleteFenceCallback(DeleteFenceResponse deleteFenceResponse) {
  559 +
  560 + }
  561 +
  562 + @Override
  563 + public void onFenceListCallback(FenceListResponse fenceListResponse) {
  564 +
  565 + }
  566 +
  567 + @Override
  568 + public void onMonitoredStatusCallback(MonitoredStatusResponse monitoredStatusResponse) {
  569 +
  570 + }
  571 +
  572 + @Override
  573 + public void onMonitoredStatusByLocationCallback(MonitoredStatusByLocationResponse monitoredStatusByLocationResponse) {
  574 +
  575 + }
  576 +
  577 + @Override
  578 + public void onHistoryAlarmCallback(HistoryAlarmResponse historyAlarmResponse) {
  579 +
  580 + }
  581 +
  582 + @Override
  583 + public void onAddMonitoredPersonCallback(AddMonitoredPersonResponse addMonitoredPersonResponse) {
  584 +
  585 + }
  586 +
  587 + @Override
  588 + public void onDeleteMonitoredPersonCallback(DeleteMonitoredPersonResponse deleteMonitoredPersonResponse) {
  589 +
  590 + }
  591 +
  592 + @Override
  593 + public void onListMonitoredPersonCallback(ListMonitoredPersonResponse listMonitoredPersonResponse) {
  594 +
  595 + }
234 } 596 }
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunningMapFragmentView.java
@@ -535,7 +535,6 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener @@ -535,7 +535,6 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
535 if (location == null || mMapView == null || getContext() == null) { 535 if (location == null || mMapView == null || getContext() == null) {
536 return; 536 return;
537 } 537 }
538 - Log.e(TAG, "onReceiveLocation: 定位地点" + location.getAddress().address);  
539 538
540 mCurrentAccracy = location.getRadius(); 539 mCurrentAccracy = location.getRadius();
541 followMyLocation = new MyLocationData.Builder() 540 followMyLocation = new MyLocationData.Builder()
@@ -551,14 +550,12 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener @@ -551,14 +550,12 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
551 if (isFirstLoc) { 550 if (isFirstLoc) {
552 isFirstLoc = false; 551 isFirstLoc = false;
553 if (location.getRadius() > Constant.LOCA_ACCURACY) { 552 if (location.getRadius() > Constant.LOCA_ACCURACY) {
554 - Toast.makeText(getContext(), "当前定位精度为:" + location.getRadius() + "米,请您移动至空旷地带!", Toast.LENGTH_SHORT).show();  
555 } 553 }
556 baiduMap.setMyLocationData(followMyLocation); 554 baiduMap.setMyLocationData(followMyLocation);
557 builder.target(new LatLng(followMyLocation.latitude, followMyLocation.longitude)).zoom(DEFULT_ZOOM); 555 builder.target(new LatLng(followMyLocation.latitude, followMyLocation.longitude)).zoom(DEFULT_ZOOM);
558 baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); 556 baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
559 } else { 557 } else {
560 //不是第一次定位状态 558 //不是第一次定位状态
561 - Log.e(TAG, "onReceiveLocation: 当前精度" + location.getRadius());  
562 //过滤定位精度 559 //过滤定位精度
563 if (location.getRadius() > Constant.LOCA_ACCURACY) { 560 if (location.getRadius() > Constant.LOCA_ACCURACY) {
564 return; 561 return;
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/activity/CollPedometerMainActivity.java
@@ -68,9 +68,7 @@ public class CollPedometerMainActivity extends QMUIFragmentActivity { @@ -68,9 +68,7 @@ public class CollPedometerMainActivity extends QMUIFragmentActivity {
68 notificationManagerCompat = NotificationManagerCompat.from(this); 68 notificationManagerCompat = NotificationManagerCompat.from(this);
69 isOpen = notificationManagerCompat.areNotificationsEnabled(); 69 isOpen = notificationManagerCompat.areNotificationsEnabled();
70 if (isOpen) { 70 if (isOpen) {
71 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {  
72 -// ContextCompat.startForegroundService(CollPedometerMainActivity.this, new Intent(CollPedometerMainActivity.this, CollStepService.class));  
73 - } 71 + getPermissionsWithTip();
74 } else { 72 } else {
75 goToSettingNo(); 73 goToSettingNo();
76 } 74 }
@@ -118,7 +116,7 @@ public class CollPedometerMainActivity extends QMUIFragmentActivity { @@ -118,7 +116,7 @@ public class CollPedometerMainActivity extends QMUIFragmentActivity {
118 protected void onResume() { 116 protected void onResume() {
119 super.onResume(); 117 super.onResume();
120 check(); 118 check();
121 - getPermissionsWithTip(); 119 +
122 } 120 }
123 121
124 private void addFragment(RunRaceDetailInfo runRaceDetailInfo) { 122 private void addFragment(RunRaceDetailInfo runRaceDetailInfo) {
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/activity/StartCollectTraceActivity.java
1 package com.cnlive.moudle.collectionTrace.ui.activity; 1 package com.cnlive.moudle.collectionTrace.ui.activity;
2 2
  3 +import android.Manifest;
3 import android.app.Activity; 4 import android.app.Activity;
4 import android.content.Context; 5 import android.content.Context;
5 import android.content.Intent; 6 import android.content.Intent;
6 import android.os.Bundle; 7 import android.os.Bundle;
  8 +import android.provider.Settings;
  9 +import android.support.annotation.NonNull;
  10 +import android.util.Log;
  11 +import android.widget.Toast;
7 12
8 import com.cnlive.libs.base.ui.QMUIFragment; 13 import com.cnlive.libs.base.ui.QMUIFragment;
9 import com.cnlive.libs.base.ui.QMUIFragmentActivity; 14 import com.cnlive.libs.base.ui.QMUIFragmentActivity;
@@ -11,10 +16,15 @@ import com.cnlive.libs.base.util.StatusBarUtil; @@ -11,10 +16,15 @@ import com.cnlive.libs.base.util.StatusBarUtil;
11 import com.cnlive.libs.base.util.StatusBarUtil2; 16 import com.cnlive.libs.base.util.StatusBarUtil2;
12 import com.cnlive.moudle.collectionTrace.ui.fragment.StartTraceFragment; 17 import com.cnlive.moudle.collectionTrace.ui.fragment.StartTraceFragment;
13 import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo; 18 import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo;
  19 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
  20 +import com.cnlive.moudle.pedometer.utils.lib_permisshelper.PermissionsListener;
  21 +import com.cnlive.moudle.pedometer.utils.lib_permisshelper.PermissionsUtils;
14 import com.example.moudle_pedometer.R; 22 import com.example.moudle_pedometer.R;
15 23
16 public class StartCollectTraceActivity extends QMUIFragmentActivity { 24 public class StartCollectTraceActivity extends QMUIFragmentActivity {
17 25
  26 + private PermissionsUtils mPermissionsUtils;//权限申请
  27 + private RunRaceDetailInfo runRaceDetailInfo;
18 28
19 public static void newInstance(Context context, String eventId) { 29 public static void newInstance(Context context, String eventId) {
20 Intent intent = new Intent(context, StartCollectTraceActivity.class); 30 Intent intent = new Intent(context, StartCollectTraceActivity.class);
@@ -30,13 +40,18 @@ public class StartCollectTraceActivity extends QMUIFragmentActivity { @@ -30,13 +40,18 @@ public class StartCollectTraceActivity extends QMUIFragmentActivity {
30 @Override 40 @Override
31 protected void onCreate(Bundle savedInstanceState) { 41 protected void onCreate(Bundle savedInstanceState) {
32 super.onCreate(savedInstanceState); 42 super.onCreate(savedInstanceState);
  43 + mPermissionsUtils = new PermissionsUtils();
33 StatusBarUtil.setStatusBarWrite(this); 44 StatusBarUtil.setStatusBarWrite(this);
34 StatusBarUtil2.setColor(this, getResources().getColor(R.color.white), 0); 45 StatusBarUtil2.setColor(this, getResources().getColor(R.color.white), 0);
35 - RunRaceDetailInfo runRaceDetailInfo = (RunRaceDetailInfo) getIntent().getExtras().getSerializable("runRaceDetailInfo");  
36 - if (null != runRaceDetailInfo) {  
37 - addFragment(StartTraceFragment.newInstance(runRaceDetailInfo));  
38 - } 46 + runRaceDetailInfo = (RunRaceDetailInfo) getIntent().getExtras().getSerializable("runRaceDetailInfo");
39 47
  48 +
  49 + }
  50 +
  51 + @Override
  52 + protected void onResume() {
  53 + super.onResume();
  54 + getPermissionsWithTip();
40 } 55 }
41 56
42 private void addFragment(QMUIFragment fragment) { 57 private void addFragment(QMUIFragment fragment) {
@@ -51,4 +66,69 @@ public class StartCollectTraceActivity extends QMUIFragmentActivity { @@ -51,4 +66,69 @@ public class StartCollectTraceActivity extends QMUIFragmentActivity {
51 intent.putExtra("runRaceDetailInfo", runRaceDetailInfo); 66 intent.putExtra("runRaceDetailInfo", runRaceDetailInfo);
52 activity.startActivity(intent); 67 activity.startActivity(intent);
53 } 68 }
  69 +
  70 +
  71 + /**
  72 + * 一次申请一组权限(使用拒绝弹框)点击事件
  73 + */
  74 + public void getPermissionsWithTip() {
  75 + mPermissionsUtils
  76 + .setPermissionsListener(new PermissionsListener() {
  77 + @Override
  78 + public void onDenied(String[] deniedPermissions) {
  79 + getPermissionsWithTip();
  80 + }
  81 +
  82 + @Override
  83 + public void onGranted() {
  84 +
  85 + //判断GPS是否开启
  86 + if (!MyMapUtil.isOPenGps(getApplicationContext())) {
  87 + //开启GPS
  88 + Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
  89 + startActivityForResult(intent, 10);
  90 + Toast.makeText(getApplicationContext(), getString(R.string.open_gps_tip), Toast.LENGTH_LONG).show();
  91 + } else {
  92 + if (getCurrentFragment() == null) {
  93 + if (null != runRaceDetailInfo) {
  94 + addFragment(StartTraceFragment.newInstance(runRaceDetailInfo));
  95 + }
  96 + }
  97 + }
  98 + }
  99 + })
  100 + .withActivity(StartCollectTraceActivity.this)
  101 + .getPermissions(StartCollectTraceActivity.this
  102 + , 100
  103 + , Manifest.permission.INTERNET
  104 + , Manifest.permission.READ_EXTERNAL_STORAGE
  105 + , Manifest.permission.WRITE_EXTERNAL_STORAGE
  106 + , Manifest.permission.ACCESS_FINE_LOCATION
  107 + , Manifest.permission.ACCESS_COARSE_LOCATION
  108 + );
  109 +// .getPermissionsWithTips(MainActivity.this
  110 +// ,100
  111 +// , new String[]{"人家要录音","我们需要读取你的信息,磨磨唧唧的","我要上网","我要读内存卡","我要看日历","我要定位"}
  112 +// , Manifest.permission.RECORD_AUDIO
  113 +// , Manifest.permission.READ_SMS
  114 +// , Manifest.permission.INTERNET
  115 +// , Manifest.permission.READ_EXTERNAL_STORAGE
  116 +// , Manifest.permission.READ_CALENDAR
  117 +// , Manifest.permission.ACCESS_FINE_LOCATION);
  118 + }
  119 +
  120 +
  121 + /**
  122 + * 权限回调
  123 + *
  124 + * @param requestCode
  125 + * @param permissions
  126 + * @param grantResults
  127 + */
  128 + @Override
  129 + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
  130 + @NonNull int[] grantResults) {
  131 + super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  132 + mPermissionsUtils.dealResult(requestCode, permissions, grantResults);
  133 + }
54 } 134 }
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/adapter/CollFinishDetaiAdapter.java
@@ -44,12 +44,15 @@ public class CollFinishDetaiAdapter extends RecyclerView.Adapter&lt;CollFinishDetai @@ -44,12 +44,15 @@ public class CollFinishDetaiAdapter extends RecyclerView.Adapter&lt;CollFinishDetai
44 //起点 44 //起点
45 myViewHolder.view_circle.setBackground(context.getResources().getDrawable(R.drawable.shape_circle_green)); 45 myViewHolder.view_circle.setBackground(context.getResources().getDrawable(R.drawable.shape_circle_green));
46 myViewHolder.tv_point_type_tip.setText(context.getResources().getString(R.string.layout_street_start_point)); 46 myViewHolder.tv_point_type_tip.setText(context.getResources().getString(R.string.layout_street_start_point));
  47 + myViewHolder.view_line.setVisibility(View.VISIBLE);
  48 +
47 } else if (list.size() - 1 == i) { 49 } else if (list.size() - 1 == i) {
48 //终点 50 //终点
49 myViewHolder.view_circle.setBackground(context.getResources().getDrawable(R.drawable.shape_circle_red)); 51 myViewHolder.view_circle.setBackground(context.getResources().getDrawable(R.drawable.shape_circle_red));
50 myViewHolder.tv_point_type_tip.setText(context.getResources().getString(R.string.layout_street_end_point)); 52 myViewHolder.tv_point_type_tip.setText(context.getResources().getString(R.string.layout_street_end_point));
51 myViewHolder.view_line.setVisibility(View.GONE); 53 myViewHolder.view_line.setVisibility(View.GONE);
52 } else { 54 } else {
  55 + myViewHolder.view_line.setVisibility(View.VISIBLE);
53 //打点 56 //打点
54 myViewHolder.view_circle.setBackground(context.getResources().getDrawable(R.drawable.shape_circle_gray)); 57 myViewHolder.view_circle.setBackground(context.getResources().getDrawable(R.drawable.shape_circle_gray));
55 // myViewHolder.tv_point_type_tip.setText(context.getResources().getString(R.string.layout_coll_take_point_text)); 58 // myViewHolder.tv_point_type_tip.setText(context.getResources().getString(R.string.layout_coll_take_point_text));
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/fragment/CollRunRaceDetailFragment.java
@@ -9,8 +9,10 @@ import android.view.View; @@ -9,8 +9,10 @@ import android.view.View;
9 import android.widget.Button; 9 import android.widget.Button;
10 10
11 import com.cnlive.libs.base.ui.QMUIFragment; 11 import com.cnlive.libs.base.ui.QMUIFragment;
  12 +import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
12 import com.cnlive.moudle.collectionTrace.frame.presenter.CollRunRaceDetailFragmentPresenter; 13 import com.cnlive.moudle.collectionTrace.frame.presenter.CollRunRaceDetailFragmentPresenter;
13 import com.cnlive.moudle.collectionTrace.frame.view.CollRunRaceDetailFragmentView; 14 import com.cnlive.moudle.collectionTrace.frame.view.CollRunRaceDetailFragmentView;
  15 +import com.cnlive.moudle.collectionTrace.ui.activity.RaceNameListActivity;
14 import com.cnlive.moudle.collectionTrace.ui.activity.StartCollectTraceActivity; 16 import com.cnlive.moudle.collectionTrace.ui.activity.StartCollectTraceActivity;
15 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo; 17 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
16 import com.cnlive.moudle.pedometer.model.Constant; 18 import com.cnlive.moudle.pedometer.model.Constant;
@@ -60,8 +62,7 @@ public class CollRunRaceDetailFragment extends QMUIFragment&lt;CollRunRaceDetailFra @@ -60,8 +62,7 @@ public class CollRunRaceDetailFragment extends QMUIFragment&lt;CollRunRaceDetailFra
60 @Override 62 @Override
61 public void onClick(View view) { 63 public void onClick(View view) {
62 //todo 自己测试用 64 //todo 自己测试用
63 - getActivity().finish();  
64 - RunLineActivity.newInstance(getActivity(),null,null,null,null); 65 + RaceNameListActivity.newInstance(getActivity(), CollCommonInfo.getStreetId(getActivity()));
65 } 66 }
66 }); 67 });
67 } 68 }
@@ -177,5 +178,4 @@ public class CollRunRaceDetailFragment extends QMUIFragment&lt;CollRunRaceDetailFra @@ -177,5 +178,4 @@ public class CollRunRaceDetailFragment extends QMUIFragment&lt;CollRunRaceDetailFra
177 // } 178 // }
178 179
179 180
180 -  
181 } 181 }
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/utils/CollStepUtil.java
@@ -34,6 +34,26 @@ public class CollStepUtil { @@ -34,6 +34,26 @@ public class CollStepUtil {
34 } 34 }
35 35
36 /** 36 /**
  37 + * 设置围栏id
  38 + *
  39 + * @param context
  40 + * @param uid
  41 + * @param fenceID
  42 + */
  43 + public static void setFenceId(Context context, String uid, String fenceID) {
  44 + //先获取有没有
  45 + if (getCollUserStepData(context, uid) != null) {
  46 + CollUserStepEntity entity = getCollUserStepData(context, uid);
  47 + if (null != entity) {
  48 + //设置围栏id
  49 + entity.setFenceId(fenceID);
  50 + //更新数据
  51 + updateCollStepData(context, entity);
  52 + }
  53 + }
  54 + }
  55 +
  56 + /**
37 * 设置用户整个赛事用时 57 * 设置用户整个赛事用时
38 * 58 *
39 * @param context 59 * @param context
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/model/Constant.java
@@ -30,5 +30,7 @@ public class Constant { @@ -30,5 +30,7 @@ public class Constant {
30 public static final int LOCA_ACCURACY = 20;//定位过滤精度 30 public static final int LOCA_ACCURACY = 20;//定位过滤精度
31 public static final int LOCA_END_POINT_ACCURACY = 20;//终点位置比较精度 31 public static final int LOCA_END_POINT_ACCURACY = 20;//终点位置比较精度
32 public static final int LOCA_START_POINT_ACCURACY = 200;//起点位置比较精度 32 public static final int LOCA_START_POINT_ACCURACY = 200;//起点位置比较精度
  33 + public static final int FENCE_OFFSET=70;//围栏偏离距离
  34 + public static final int FENCE_DENOISE=70;//围栏去噪精度
33 35
34 } 36 }
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/net/ApiServiceRunLin.java
@@ -66,6 +66,15 @@ public interface ApiServiceRunLin { @@ -66,6 +66,15 @@ public interface ApiServiceRunLin {
66 @POST("Daren/event/getRouteRecordList.action") 66 @POST("Daren/event/getRouteRecordList.action")
67 Observable<Result<BaseInfo<SelfRecordInfo>>> getSelfRecordInfo(@QueryMap() Map<String, String> maps); 67 Observable<Result<BaseInfo<SelfRecordInfo>>> getSelfRecordInfo(@QueryMap() Map<String, String> maps);
68 68
  69 +
  70 + /**
  71 + * 保存个人约跑路线记录
  72 + */
  73 + @POST("Daren/event/routeRecord.action")
  74 + Observable<Result<BaseInfo>> saveRouteData(@QueryMap() Map<String, String> maps);
  75 +
  76 +
  77 +/***********************************************运营人员接口*****************************************************************/
69 /** 78 /**
70 * 踩点轨迹列表 79 * 踩点轨迹列表
71 */ 80 */
@@ -84,15 +93,11 @@ public interface ApiServiceRunLin { @@ -84,15 +93,11 @@ public interface ApiServiceRunLin {
84 @POST("Daren/event/bindingShoeLine.action") 93 @POST("Daren/event/bindingShoeLine.action")
85 Observable<Result<BaseInfo>> bindingShoeLineInfo(@QueryMap() Map<String, String> maps); 94 Observable<Result<BaseInfo>> bindingShoeLineInfo(@QueryMap() Map<String, String> maps);
86 95
87 -  
88 /** 96 /**
89 - * 保存个人约跑路线记录 97 + * http://apiwjjtest.cnlive.com/Daren/event/saveShoeLine.action
  98 + * 运营路线踩点
90 */ 99 */
91 - @POST("Daren/event/routeRecord.action")  
92 - Observable<Result<BaseInfo>> saveRouteData(@QueryMap() Map<String, String> maps);  
93 -  
94 -  
95 -  
96 - 100 + @POST("Daren/event/saveShoeLine.action")
  101 + Observable<Result<BaseInfo>> collSaveShoeLine(@QueryMap() Map<String, String> maps);
97 } 102 }
98 103
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/sql/dao/CollUserStepEntityDao.java
@@ -40,7 +40,7 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin @@ -40,7 +40,7 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
40 public final static Property QueryTraceEndTime = new Property(13, long.class, "queryTraceEndTime", false, "QUERY_TRACE_END_TIME"); 40 public final static Property QueryTraceEndTime = new Property(13, long.class, "queryTraceEndTime", false, "QUERY_TRACE_END_TIME");
41 public final static Property QueryEntityName = new Property(14, String.class, "queryEntityName", false, "QUERY_ENTITY_NAME"); 41 public final static Property QueryEntityName = new Property(14, String.class, "queryEntityName", false, "QUERY_ENTITY_NAME");
42 public final static Property ContinueTime = new Property(15, long.class, "continueTime", false, "CONTINUE_TIME"); 42 public final static Property ContinueTime = new Property(15, long.class, "continueTime", false, "CONTINUE_TIME");
43 - public final static Property FenceId = new Property(16, long.class, "fenceId", false, "FENCE_ID"); 43 + public final static Property FenceId = new Property(16, String.class, "fenceId", false, "FENCE_ID");
44 public final static Property ImportPoint = new Property(17, String.class, "importPoint", false, "IMPORT_POINT"); 44 public final static Property ImportPoint = new Property(17, String.class, "importPoint", false, "IMPORT_POINT");
45 public final static Property StreetTitle = new Property(18, String.class, "streetTitle", false, "STREET_TITLE"); 45 public final static Property StreetTitle = new Property(18, String.class, "streetTitle", false, "STREET_TITLE");
46 public final static Property EndLatLng = new Property(19, String.class, "endLatLng", false, "END_LAT_LNG"); 46 public final static Property EndLatLng = new Property(19, String.class, "endLatLng", false, "END_LAT_LNG");
@@ -79,7 +79,7 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin @@ -79,7 +79,7 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
79 "\"QUERY_TRACE_END_TIME\" INTEGER NOT NULL ," + // 13: queryTraceEndTime 79 "\"QUERY_TRACE_END_TIME\" INTEGER NOT NULL ," + // 13: queryTraceEndTime
80 "\"QUERY_ENTITY_NAME\" TEXT," + // 14: queryEntityName 80 "\"QUERY_ENTITY_NAME\" TEXT," + // 14: queryEntityName
81 "\"CONTINUE_TIME\" INTEGER NOT NULL ," + // 15: continueTime 81 "\"CONTINUE_TIME\" INTEGER NOT NULL ," + // 15: continueTime
82 - "\"FENCE_ID\" INTEGER NOT NULL ," + // 16: fenceId 82 + "\"FENCE_ID\" TEXT," + // 16: fenceId
83 "\"IMPORT_POINT\" TEXT," + // 17: importPoint 83 "\"IMPORT_POINT\" TEXT," + // 17: importPoint
84 "\"STREET_TITLE\" TEXT," + // 18: streetTitle 84 "\"STREET_TITLE\" TEXT," + // 18: streetTitle
85 "\"END_LAT_LNG\" TEXT," + // 19: endLatLng 85 "\"END_LAT_LNG\" TEXT," + // 19: endLatLng
@@ -138,7 +138,11 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin @@ -138,7 +138,11 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
138 stmt.bindString(15, queryEntityName); 138 stmt.bindString(15, queryEntityName);
139 } 139 }
140 stmt.bindLong(16, entity.getContinueTime()); 140 stmt.bindLong(16, entity.getContinueTime());
141 - stmt.bindLong(17, entity.getFenceId()); 141 +
  142 + String fenceId = entity.getFenceId();
  143 + if (fenceId != null) {
  144 + stmt.bindString(17, fenceId);
  145 + }
142 146
143 String importPoint = entity.getImportPoint(); 147 String importPoint = entity.getImportPoint();
144 if (importPoint != null) { 148 if (importPoint != null) {
@@ -215,7 +219,11 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin @@ -215,7 +219,11 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
215 stmt.bindString(15, queryEntityName); 219 stmt.bindString(15, queryEntityName);
216 } 220 }
217 stmt.bindLong(16, entity.getContinueTime()); 221 stmt.bindLong(16, entity.getContinueTime());
218 - stmt.bindLong(17, entity.getFenceId()); 222 +
  223 + String fenceId = entity.getFenceId();
  224 + if (fenceId != null) {
  225 + stmt.bindString(17, fenceId);
  226 + }
219 227
220 String importPoint = entity.getImportPoint(); 228 String importPoint = entity.getImportPoint();
221 if (importPoint != null) { 229 if (importPoint != null) {
@@ -273,7 +281,7 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin @@ -273,7 +281,7 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
273 cursor.getLong(offset + 13), // queryTraceEndTime 281 cursor.getLong(offset + 13), // queryTraceEndTime
274 cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14), // queryEntityName 282 cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14), // queryEntityName
275 cursor.getLong(offset + 15), // continueTime 283 cursor.getLong(offset + 15), // continueTime
276 - cursor.getLong(offset + 16), // fenceId 284 + cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16), // fenceId
277 cursor.isNull(offset + 17) ? null : cursor.getString(offset + 17), // importPoint 285 cursor.isNull(offset + 17) ? null : cursor.getString(offset + 17), // importPoint
278 cursor.isNull(offset + 18) ? null : cursor.getString(offset + 18), // streetTitle 286 cursor.isNull(offset + 18) ? null : cursor.getString(offset + 18), // streetTitle
279 cursor.isNull(offset + 19) ? null : cursor.getString(offset + 19), // endLatLng 287 cursor.isNull(offset + 19) ? null : cursor.getString(offset + 19), // endLatLng
@@ -303,7 +311,7 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin @@ -303,7 +311,7 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
303 entity.setQueryTraceEndTime(cursor.getLong(offset + 13)); 311 entity.setQueryTraceEndTime(cursor.getLong(offset + 13));
304 entity.setQueryEntityName(cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14)); 312 entity.setQueryEntityName(cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14));
305 entity.setContinueTime(cursor.getLong(offset + 15)); 313 entity.setContinueTime(cursor.getLong(offset + 15));
306 - entity.setFenceId(cursor.getLong(offset + 16)); 314 + entity.setFenceId(cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16));
307 entity.setImportPoint(cursor.isNull(offset + 17) ? null : cursor.getString(offset + 17)); 315 entity.setImportPoint(cursor.isNull(offset + 17) ? null : cursor.getString(offset + 17));
308 entity.setStreetTitle(cursor.isNull(offset + 18) ? null : cursor.getString(offset + 18)); 316 entity.setStreetTitle(cursor.isNull(offset + 18) ? null : cursor.getString(offset + 18));
309 entity.setEndLatLng(cursor.isNull(offset + 19) ? null : cursor.getString(offset + 19)); 317 entity.setEndLatLng(cursor.isNull(offset + 19) ? null : cursor.getString(offset + 19));
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/sql/entity/CollUserStepEntity.java
@@ -23,7 +23,7 @@ public class CollUserStepEntity { @@ -23,7 +23,7 @@ public class CollUserStepEntity {
23 private long queryTraceEndTime;//从服务器获取的结束时间呢 23 private long queryTraceEndTime;//从服务器获取的结束时间呢
24 private String queryEntityName;//从服务器获取的运营人员的实体名称 24 private String queryEntityName;//从服务器获取的运营人员的实体名称
25 private long continueTime;//继续运动时间 25 private long continueTime;//继续运动时间
26 - private long fenceId;//围栏id 26 + private String fenceId;//围栏id
27 private String importPoint;//关键点 27 private String importPoint;//关键点
28 private String streetTitle;//赛事标题 28 private String streetTitle;//赛事标题
29 private String endLatLng;//终点坐标 29 private String endLatLng;//终点坐标
@@ -32,11 +32,11 @@ public class CollUserStepEntity { @@ -32,11 +32,11 @@ public class CollUserStepEntity {
32 private String collEndPointData;//运营结束打点名称和经纬度 32 private String collEndPointData;//运营结束打点名称和经纬度
33 private String employTime;//用时时间戳 33 private String employTime;//用时时间戳
34 34
35 - @Generated(hash = 148375276)  
36 - public CollUserStepEntity(String userId, String date, String stepCount, long recordTime, double caloriesCount, String serverTraceData,  
37 - long startTimeStamp, long finishTimeStamp, String streetId, int pauseCount, long userPauseTimeStamp, long chronometerBase,  
38 - long queryTraceStartTime, long queryTraceEndTime, String queryEntityName, long continueTime, long fenceId, String importPoint,  
39 - String streetTitle, String endLatLng, boolean isArriveEndPoint, String collStartPointData, String collEndPointData, String employTime) { 35 + @Generated(hash = 297618082)
  36 + public CollUserStepEntity(String userId, String date, String stepCount, long recordTime, double caloriesCount, String serverTraceData, long startTimeStamp,
  37 + long finishTimeStamp, String streetId, int pauseCount, long userPauseTimeStamp, long chronometerBase, long queryTraceStartTime, long queryTraceEndTime,
  38 + String queryEntityName, long continueTime, String fenceId, String importPoint, String streetTitle, String endLatLng, boolean isArriveEndPoint,
  39 + String collStartPointData, String collEndPointData, String employTime) {
40 this.userId = userId; 40 this.userId = userId;
41 this.date = date; 41 this.date = date;
42 this.stepCount = stepCount; 42 this.stepCount = stepCount;
@@ -196,13 +196,6 @@ public class CollUserStepEntity { @@ -196,13 +196,6 @@ public class CollUserStepEntity {
196 this.continueTime = continueTime; 196 this.continueTime = continueTime;
197 } 197 }
198 198
199 - public long getFenceId() {  
200 - return this.fenceId;  
201 - }  
202 -  
203 - public void setFenceId(long fenceId) {  
204 - this.fenceId = fenceId;  
205 - }  
206 199
207 public String getImportPoint() { 200 public String getImportPoint() {
208 return this.importPoint; 201 return this.importPoint;
@@ -261,5 +254,13 @@ public class CollUserStepEntity { @@ -261,5 +254,13 @@ public class CollUserStepEntity {
261 this.employTime = employTime; 254 this.employTime = employTime;
262 } 255 }
263 256
  257 + public String getFenceId() {
  258 + return this.fenceId;
  259 + }
  260 +
  261 + public void setFenceId(String fenceId) {
  262 + this.fenceId = fenceId;
  263 + }
  264 +
264 265
265 } 266 }
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MyMapUtil.java
@@ -71,7 +71,10 @@ public class MyMapUtil { @@ -71,7 +71,10 @@ public class MyMapUtil {
71 Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 17, 30); 71 Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 17, 30);
72 OverlayOptions startOptions = null; 72 OverlayOptions startOptions = null;
73 if (pointBitmap != null) { 73 if (pointBitmap != null) {
74 - startOptions = new MarkerOptions().position(startLatLng).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap)); 74 + startOptions = new MarkerOptions()
  75 + .position(startLatLng)
  76 + .icon(BitmapDescriptorFactory.fromBitmap(pointBitmap))
  77 + .animateType(MarkerOptions.MarkerAnimateType.grow);
75 } 78 }
76 79
77 if (startOptions != null) { 80 if (startOptions != null) {
@@ -104,7 +107,10 @@ public class MyMapUtil { @@ -104,7 +107,10 @@ public class MyMapUtil {
104 Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30); 107 Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
105 OverlayOptions startOptions = null; 108 OverlayOptions startOptions = null;
106 if (pointBitmap != null) { 109 if (pointBitmap != null) {
107 - startOptions = new MarkerOptions().position(startLatLng).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap)); 110 + startOptions = new MarkerOptions()
  111 + .position(startLatLng)
  112 + .icon(BitmapDescriptorFactory.fromBitmap(pointBitmap))
  113 + .animateType(MarkerOptions.MarkerAnimateType.grow);
108 } 114 }
109 115
110 // 添加圆形范围 116 // 添加圆形范围
moudle_pedometer/src/main/res/layout/fragment_coll_finish_run_map.xml
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 sothree:umanoDragView="@+id/dragView" 14 sothree:umanoDragView="@+id/dragView"
15 sothree:umanoFadeColor="@color/black_20" 15 sothree:umanoFadeColor="@color/black_20"
16 sothree:umanoOverlay="true" 16 sothree:umanoOverlay="true"
17 - sothree:umanoPanelHeight="310dp" 17 + sothree:umanoPanelHeight="250dp"
18 sothree:umanoParallaxOffset="0dp" 18 sothree:umanoParallaxOffset="0dp"
19 sothree:umanoScrollableView="@+id/rv_list" 19 sothree:umanoScrollableView="@+id/rv_list"
20 sothree:umanoShadowHeight="0dp"> 20 sothree:umanoShadowHeight="0dp">
@@ -105,6 +105,9 @@ @@ -105,6 +105,9 @@
105 android:layout_width="match_parent" 105 android:layout_width="match_parent"
106 android:layout_height="40sp" 106 android:layout_height="40sp"
107 android:layout_gravity="bottom" 107 android:layout_gravity="bottom"
  108 + android:focusable="true"
  109 + android:clickable="true"
  110 + android:focusableInTouchMode="true"
108 android:background="@color/green_round" 111 android:background="@color/green_round"
109 android:gravity="center" 112 android:gravity="center"
110 android:tag="0"> 113 android:tag="0">
@@ -117,6 +120,7 @@ @@ -117,6 +120,7 @@
117 android:layout_centerInParent="true" 120 android:layout_centerInParent="true"
118 android:layout_marginLeft="5dp" 121 android:layout_marginLeft="5dp"
119 android:clickable="false" 122 android:clickable="false"
  123 + android:focusable="false"
120 android:focusableInTouchMode="false" 124 android:focusableInTouchMode="false"
121 android:tag="0" 125 android:tag="0"
122 android:text="确定轨迹" 126 android:text="确定轨迹"