Commit f561e9e0382d9fad42ec92219d338dd74bf497dc

Authored by 韩亚云
2 parents df774258 3b0c1282

Merge branch 'master' of bj.gitlab.cnlive.com:cnlive-team/ModulePedometer

Showing 62 changed files with 664 additions and 425 deletions
.idea/gradle.xml
@@ -3,9 +3,6 @@ @@ -3,9 +3,6 @@
3 <component name="GradleSettings"> 3 <component name="GradleSettings">
4 <option name="linkedExternalProjectsSettings"> 4 <option name="linkedExternalProjectsSettings">
5 <GradleProjectSettings> 5 <GradleProjectSettings>
6 - <compositeConfiguration>  
7 - <compositeBuild compositeDefinitionSource="SCRIPT" />  
8 - </compositeConfiguration>  
9 <option name="distributionType" value="DEFAULT_WRAPPED" /> 6 <option name="distributionType" value="DEFAULT_WRAPPED" />
10 <option name="externalProjectPath" value="$PROJECT_DIR$" /> 7 <option name="externalProjectPath" value="$PROJECT_DIR$" />
11 <option name="modules"> 8 <option name="modules">
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/commonInfo/CommonInfo.java 0 → 100644
  1 +package com.cnlive.moudle.pedometer.commonInfo;
  2 +
  3 +import android.content.Context;
  4 +
  5 +import com.cnlive.moudle.pedometer.utils.MySpHelper;
  6 +import com.cnlive.moudle.pedometer.utils.TimeUtil;
  7 +
  8 +public class CommonInfo {
  9 +
  10 + /**
  11 + * 设置计步时间
  12 + *
  13 + * @param context
  14 + */
  15 + public static void setStepStartTime(Context context, long currentTime) {
  16 + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).putLong("stepStartTime", currentTime);
  17 + }
  18 +
  19 + /**
  20 + * 获取计步时间
  21 + *
  22 + * @param context
  23 + */
  24 + public static long getStepStartTime(Context context) {
  25 + return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getLong("stepStartTime", 0);
  26 + }
  27 +
  28 + /**
  29 + * 是否允许写入步数
  30 + *
  31 + * @param context
  32 + */
  33 + public static void setIsWriteUserStep(Context context, boolean isAllow) {
  34 + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).putBoolean("writeUserStep:", isAllow);
  35 + }
  36 +
  37 + /**
  38 + * 是否允许写入步数
  39 + *
  40 + * @param context
  41 + */
  42 + public static boolean getIsWriteUserStep(Context context) {
  43 + return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getBoolean("writeUserStep", true);
  44 + }
  45 +
  46 + /**
  47 + * @param context
  48 + * @param uid
  49 + */
  50 + public static void setUserId(Context context, String uid) {
  51 + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).putString("userId", uid);
  52 + }
  53 +
  54 + /**
  55 + * @param context
  56 + */
  57 + public static String getUserId(Context context) {
  58 + return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getString("userId", "");
  59 + }
  60 +
  61 + /**
  62 + * 设置是否运行计步服务
  63 + *
  64 + * @param context
  65 + * @param isAllow
  66 + */
  67 + public static void setIsRunStepService(Context context, boolean isAllow) {
  68 + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).putBoolean("runStepService", isAllow);
  69 +
  70 + }
  71 +
  72 + /**
  73 + * 获取是否运行计步服务
  74 + *
  75 + * @param context
  76 + */
  77 + public static boolean getIsRunStepService(Context context) {
  78 + return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getBoolean("runStepService", false);
  79 + }
  80 +
  81 + /*重置
  82 + * @param context
  83 + */
  84 + public static void reset(Context context) {
  85 + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).removeKey("writeUserStep");
  86 + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).removeKey("stepStartTime");
  87 + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).removeKey("runStepService");
  88 +
  89 + }
  90 +}
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunMainFragmentView.java
@@ -10,7 +10,17 @@ import android.util.Log; @@ -10,7 +10,17 @@ import android.util.Log;
10 import android.view.MotionEvent; 10 import android.view.MotionEvent;
11 import android.view.View; 11 import android.view.View;
12 import android.widget.Chronometer; 12 import android.widget.Chronometer;
13 - 13 +import android.widget.Toast;
  14 +
  15 +import com.baidu.location.BDAbstractLocationListener;
  16 +import com.baidu.location.BDLocation;
  17 +import com.baidu.location.LocationClient;
  18 +import com.baidu.location.LocationClientOption;
  19 +import com.baidu.mapapi.map.MapStatus;
  20 +import com.baidu.mapapi.map.MyLocationData;
  21 +import com.baidu.mapapi.model.LatLng;
  22 +import com.baidu.mapapi.utils.DistanceUtil;
  23 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
14 import com.cnlive.moudle.pedometer.model.RunningFinishBean; 24 import com.cnlive.moudle.pedometer.model.RunningFinishBean;
15 import com.cnlive.moudle.pedometer.model.RunningMapBean; 25 import com.cnlive.moudle.pedometer.model.RunningMapBean;
16 import com.cnlive.moudle.pedometer.model.Constant; 26 import com.cnlive.moudle.pedometer.model.Constant;
@@ -23,9 +33,11 @@ import com.cnlive.moudle.pedometer.ui.activity.RunningMapActivity; @@ -23,9 +33,11 @@ import com.cnlive.moudle.pedometer.ui.activity.RunningMapActivity;
23 import com.cnlive.moudle.pedometer.ui.fragment.RunMainFragment; 33 import com.cnlive.moudle.pedometer.ui.fragment.RunMainFragment;
24 import com.cnlive.moudle.pedometer.ui.widget.SelectDialog; 34 import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
25 import com.cnlive.moudle.pedometer.utils.ButtonAnimUtil; 35 import com.cnlive.moudle.pedometer.utils.ButtonAnimUtil;
  36 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
26 import com.cnlive.moudle.pedometer.utils.MySpHelper; 37 import com.cnlive.moudle.pedometer.utils.MySpHelper;
27 import com.cnlive.moudle.pedometer.utils.StepUtil; 38 import com.cnlive.moudle.pedometer.utils.StepUtil;
28 import com.cnlive.moudle.pedometer.utils.TimeUtil; 39 import com.cnlive.moudle.pedometer.utils.TimeUtil;
  40 +import com.cnlive.strike.application.GlideApp;
29 import com.example.moudle_pedometer.R; 41 import com.example.moudle_pedometer.R;
30 import com.hannesdorfmann.mosby3.mvp.MvpView; 42 import com.hannesdorfmann.mosby3.mvp.MvpView;
31 43
@@ -41,13 +53,14 @@ public class RunMainFragmentView implements MvpView { @@ -41,13 +53,14 @@ public class RunMainFragmentView implements MvpView {
41 private Handler handler; 53 private Handler handler;
42 private Runnable runnable; 54 private Runnable runnable;
43 private Runnable animRunnable; 55 private Runnable animRunnable;
44 -  
45 private long mRecordTime;//计时时间 56 private long mRecordTime;//计时时间
46 private boolean firstTimeFlag;//是否是首次计时 57 private boolean firstTimeFlag;//是否是首次计时
47 private int timeCountDown;//时间倒计时 58 private int timeCountDown;//时间倒计时
48 -  
49 private String uid; 59 private String uid;
50 private boolean needWriteDataFlag = true;//是否需要将计时器基值写入到数据库 60 private boolean needWriteDataFlag = true;//是否需要将计时器基值写入到数据库
  61 + // 定位相关
  62 + private LocationClient mLocClient;
  63 + public MyLocationListenner myListener = new MyLocationListenner();
51 64
52 public RunMainFragmentView(RunMainFragment fragment) { 65 public RunMainFragmentView(RunMainFragment fragment) {
53 this.fragment = fragment; 66 this.fragment = fragment;
@@ -57,8 +70,44 @@ public class RunMainFragmentView implements MvpView { @@ -57,8 +70,44 @@ public class RunMainFragmentView implements MvpView {
57 return fragment == null ? null : fragment.getActivity(); 70 return fragment == null ? null : fragment.getActivity();
58 } 71 }
59 72
60 - public void showStartTimeTip() {  
61 - 73 + private void initLocationClient() {
  74 + // 定位初始化
  75 + mLocClient = new LocationClient(getContext());
  76 + mLocClient.registerLocationListener(myListener);
  77 + LocationClientOption option = new LocationClientOption();
  78 + option.setOpenGps(true); // 打开gps
  79 + //可选,设置返回经纬度坐标类型,默认GCJ02
  80 + //GCJ02:国测局坐标;
  81 + //BD09ll:百度经纬度坐标;
  82 + //BD09:百度墨卡托坐标;
  83 + //海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标
  84 + option.setCoorType("gcj02"); // 设置坐标类型
  85 + //可选,默认false,设置是否开启Gps定位
  86 + option.setOpenGps(true);
  87 + //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
  88 + option.setOpenAutoNotifyMode();
  89 + //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
  90 + //LocationMode.Hight_Accuracy:高精度;
  91 + //LocationMode. Battery_Saving:低功耗;
  92 + //LocationMode. Device_Sensors:仅使用设备;
  93 + option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
  94 + //可选,设置是否需要地址信息,默认不需要
  95 + option.setIsNeedAddress(false);
  96 + //可选,设置是否需要地址描述
  97 + option.setIsNeedLocationDescribe(false);
  98 + //可选,设置是否需要设备方向结果
  99 + option.setNeedDeviceDirect(false);
  100 + //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
  101 + //minTimeInterval - 最短定位时间间隔,单位毫秒,最小值0,开发者可以在设置希望的位置回调最短时间间隔
  102 + //minDistance - 最短定位距离间隔,单位米,最小值0,开发者可以设置希望的位置回调距离间隔
  103 + //locSensitivity - 定位变化敏感程度,LOC_SENSITIVITY_HIGHT,LOC_SENSITIVITY_MIDDLE,LOC_SENSITIVITY_LOW
  104 + option.setOpenAutoNotifyMode(3000, 1, LocationClientOption.LOC_SENSITIVITY_HIGHT);
  105 + //可选,定位SDK内部是一个service,并放到了独立进程。
  106 + //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
  107 + option.setIgnoreKillProcess(true);
  108 +
  109 + mLocClient.setLocOption(option);
  110 + mLocClient.start();
62 } 111 }
63 112
64 /** 113 /**
@@ -66,7 +115,8 @@ public class RunMainFragmentView implements MvpView { @@ -66,7 +115,8 @@ public class RunMainFragmentView implements MvpView {
66 */ 115 */
67 public void initView() { 116 public void initView() {
68 uid = "yangshuai"; 117 uid = "yangshuai";
69 - MySpHelper.getInstance(getContext(), Context.MODE_MULTI_PROCESS).putString("userId", uid); 118 + CommonInfo.setUserId(getContext(), uid);
  119 + initLocationClient();
70 fragment.binding.llRunMainRoot.setVisibility(View.GONE); 120 fragment.binding.llRunMainRoot.setVisibility(View.GONE);
71 ButtonAnimUtil.startAnimation(fragment.binding.llStartTimeTip, false); 121 ButtonAnimUtil.startAnimation(fragment.binding.llStartTimeTip, false);
72 firstTimeFlag = true; 122 firstTimeFlag = true;
@@ -127,9 +177,10 @@ public class RunMainFragmentView implements MvpView { @@ -127,9 +177,10 @@ public class RunMainFragmentView implements MvpView {
127 177
128 } 178 }
129 }); 179 });
130 - UserStepEntity userStepEntity = StepUtil.getUserStepData(fragment.getActivity(), uid); 180 + UserStepEntity userStepEntity = StepUtil.getUserStepData(getContext(), uid);
  181 + boolean isRunStep = CommonInfo.getIsRunStepService(getContext());
131 //当前用户已经在运动 182 //当前用户已经在运动
132 - if (userStepEntity == null) { 183 + if (!isRunStep) {
133 //依次倒计时 184 //依次倒计时
134 handler.postDelayed(runnable, 1000); 185 handler.postDelayed(runnable, 1000);
135 } else { 186 } else {
@@ -142,12 +193,13 @@ public class RunMainFragmentView implements MvpView { @@ -142,12 +193,13 @@ public class RunMainFragmentView implements MvpView {
142 //开始计时 193 //开始计时
143 if (firstTimeFlag) { 194 if (firstTimeFlag) {
144 firstTimeFlag = false; 195 firstTimeFlag = false;
145 - if ((userStepEntity.getPauseTimeStamp() != 0) && (userStepEntity.getRecordTime() != 0)) {  
146 - fragment.binding.chronometer.setBase(userStepEntity.getPauseTimeStamp() + (SystemClock.elapsedRealtime() - userStepEntity.getRecordTime()));  
147 - } else {  
148 - fragment.binding.chronometer.setFormat("00:00:01");  
149 - fragment.binding.chronometer.setBase(SystemClock.elapsedRealtime());  
150 - 196 + if (userStepEntity != null) {
  197 + if ((userStepEntity.getPauseTimeStamp() != 0) && (userStepEntity.getRecordTime() != 0)) {
  198 + fragment.binding.chronometer.setBase(userStepEntity.getPauseTimeStamp() + (SystemClock.elapsedRealtime() - userStepEntity.getRecordTime()));
  199 + } else {
  200 + fragment.binding.chronometer.setFormat("00:00:01");
  201 + fragment.binding.chronometer.setBase(SystemClock.elapsedRealtime());
  202 + }
151 } 203 }
152 fragment.binding.chronometer.start(); 204 fragment.binding.chronometer.start();
153 } 205 }
@@ -249,18 +301,17 @@ public class RunMainFragmentView implements MvpView { @@ -249,18 +301,17 @@ public class RunMainFragmentView implements MvpView {
249 SelectDialog selectDialog = new SelectDialog(fragment.getActivity(), "确定结束运动吗?", "确定", new SelectDialog.DialogInterface() { 301 SelectDialog selectDialog = new SelectDialog(fragment.getActivity(), "确定结束运动吗?", "确定", new SelectDialog.DialogInterface() {
250 @Override 302 @Override
251 public void onClick(SelectDialog dialog) { 303 public void onClick(SelectDialog dialog) {
252 - MySpHelper.getInstance(getContext(), Context.MODE_MULTI_PROCESS).putBoolean("writeUserStep:" + uid, false); 304 + CommonInfo.setIsWriteUserStep(getContext(), false);
253 fragment.binding.cpCurrent.setVisibility(View.GONE); 305 fragment.binding.cpCurrent.setVisibility(View.GONE);
254 ButtonAnimUtil.setViewDefault(fragment.binding.flStop); 306 ButtonAnimUtil.setViewDefault(fragment.binding.flStop);
255 //清空数据 307 //清空数据
256 - StepUtil.clearRunData(getContext(), uid); 308 + CommonInfo.reset(getContext());
257 dialog.dismiss(); 309 dialog.dismiss();
258 if (StepService.mClient != null) { 310 if (StepService.mClient != null) {
259 StepService.mClient.stopGather(StepService.traceListener); 311 StepService.mClient.stopGather(StepService.traceListener);
260 } 312 }
261 - MySpHelper.getInstance(getContext(), Context.MODE_MULTI_PROCESS).putLong("stepStartTime", 0); 313 + CommonInfo.setStepStartTime(getContext(), 0);
262 fragment.getActivity().stopService(new Intent(fragment.getActivity(), StepService.class)); 314 fragment.getActivity().stopService(new Intent(fragment.getActivity(), StepService.class));
263 - MySpHelper.getInstance(getContext(), Context.MODE_MULTI_PROCESS).putString("userId", "");  
264 RunningFinishBean runningFinishBean = new RunningFinishBean(); 315 RunningFinishBean runningFinishBean = new RunningFinishBean();
265 runningFinishBean.setStartPoint("开始地点"); 316 runningFinishBean.setStartPoint("开始地点");
266 runningFinishBean.setEndPoint("结束地点"); 317 runningFinishBean.setEndPoint("结束地点");
@@ -405,7 +456,7 @@ public class RunMainFragmentView implements MvpView { @@ -405,7 +456,7 @@ public class RunMainFragmentView implements MvpView {
405 */ 456 */
406 public void startStepService(Context context, String userId) { 457 public void startStepService(Context context, String userId) {
407 Intent intent = new Intent(fragment.getActivity(), StepService.class); 458 Intent intent = new Intent(fragment.getActivity(), StepService.class);
408 -// intent.putExtra("userId", userId); 459 + intent.putExtra("userId", userId);
409 ContextCompat.startForegroundService(fragment.getActivity(), intent); 460 ContextCompat.startForegroundService(fragment.getActivity(), intent);
410 461
411 } 462 }
@@ -419,7 +470,7 @@ public class RunMainFragmentView implements MvpView { @@ -419,7 +470,7 @@ public class RunMainFragmentView implements MvpView {
419 //设置行走公里 470 //设置行走公里
420 fragment.binding.tvRunDistance.setText(StepUtil.getWalkDistanceKM(step) + ""); 471 fragment.binding.tvRunDistance.setText(StepUtil.getWalkDistanceKM(step) + "");
421 //设置行走步数 472 //设置行走步数
422 - fragment.binding.tvStepCount.setText(step+""); 473 + fragment.binding.tvStepCount.setText(step + "");
423 //设置S速度 474 //设置S速度
424 int second = (int) ((SystemClock.elapsedRealtime() - fragment.binding.chronometer.getBase()) / 1000); 475 int second = (int) ((SystemClock.elapsedRealtime() - fragment.binding.chronometer.getBase()) / 1000);
425 if (second != 0) { 476 if (second != 0) {
@@ -436,6 +487,81 @@ public class RunMainFragmentView implements MvpView { @@ -436,6 +487,81 @@ public class RunMainFragmentView implements MvpView {
436 } 487 }
437 488
438 489
  490 + /**
  491 + * //设置定位监听器,获取到用户当前位置 杨帅
  492 + * 定位SDK监听函数
  493 + */
  494 + public class MyLocationListenner extends BDAbstractLocationListener {
  495 +
  496 +
  497 + @Override
  498 + public void onReceiveLocation(BDLocation location) {
  499 + if (location == null) {
  500 + return;
  501 + }
  502 + //正在搜索GPS信号
  503 + if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_UNKNOWN) {
  504 + if (!getContext().getString(R.string.loc_gps_accuracy_unknown).equals(fragment.binding.tvLookTrace.getText().toString())) {
  505 + fragment.binding.tvLookTrace.setText(getContext().getString(R.string.loc_gps_accuracy_unknown));
  506 + fragment.binding.tvLookTrace.setTextColor(getContext().getResources().getColor(R.color.red));
  507 + }
  508 + if (fragment.binding.tvLookTrace.getVisibility()!=View.VISIBLE){
  509 + fragment.binding.tvLookTrace.setVisibility(View.VISIBLE);
  510 + }
  511 + if (fragment.binding.ivGps.getTag()==null||!fragment.binding.ivGps.getTag().toString().equals("rt_training_gps_0")) {
  512 + fragment.binding.ivGps.setTag("rt_training_gps_0");
  513 + //设置图标
  514 + fragment.binding.ivGps.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_0));
  515 + }
  516 +
  517 +
  518 + }
  519 + //GPS 质量判断差
  520 + else if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_BAD) {
  521 + if (!getContext().getString(R.string.loc_gps_accuracy_bad).equals(fragment.binding.tvLookTrace.getText().toString())) {
  522 + fragment.binding.tvLookTrace.setText(getContext().getString(R.string.loc_gps_accuracy_bad));
  523 + fragment.binding.tvLookTrace.setTextColor(getContext().getResources().getColor(R.color.text_gray99));
  524 +
  525 + }
  526 + if (fragment.binding.tvLookTrace.getVisibility()!=View.VISIBLE){
  527 + fragment.binding.tvLookTrace.setVisibility(View.VISIBLE);
  528 + }
  529 + if (fragment.binding.ivGps.getTag()==null||!fragment.binding.ivGps.getTag().toString().equals("GPS_ACCURACY_BAD")) {
  530 + fragment.binding.ivGps.setTag("GPS_ACCURACY_BAD");
  531 + //设置图标
  532 + fragment.binding.ivGps.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_1));
  533 + }
  534 + }
  535 + //GPS 质量判断中等
  536 + else if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_MID) {
  537 + if (fragment.binding.tvLookTrace.getVisibility() == View.VISIBLE) {
  538 + fragment.binding.tvLookTrace.setVisibility(View.GONE);
  539 + }
  540 + if (fragment.binding.ivGps.getTag()==null||!fragment.binding.ivGps.getTag().toString().equals("GPS_ACCURACY_MID")) {
  541 + fragment.binding.ivGps.setTag("GPS_ACCURACY_MID");
  542 + //设置图标
  543 + fragment.binding.ivGps.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_2));
  544 + }
  545 + }//GPS 质量判断好
  546 + else if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_GOOD) {
  547 + if (fragment.binding.tvLookTrace.getVisibility() == View.VISIBLE) {
  548 + fragment.binding.tvLookTrace.setVisibility(View.GONE);
  549 + }
  550 + if (fragment.binding.ivGps.getTag()==null||!fragment.binding.ivGps.getTag().toString().equals("GPS_ACCURACY_GOOD")) {
  551 + fragment.binding.ivGps.setTag("GPS_ACCURACY_GOOD");
  552 + //设置图标
  553 + fragment.binding.ivGps.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_3));
  554 + }
  555 + }
  556 + }
  557 + }
  558 +
  559 + public void onDestroy() {
  560 + if (mLocClient != null) {
  561 + mLocClient.stop();
  562 + }
  563 + }
439 } 564 }
440 565
441 566
  567 +
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunRaceDetailFragmentView.java
@@ -103,7 +103,7 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener { @@ -103,7 +103,7 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener {
103 103
104 private String startPoint = "首都师范大学南门"; 104 private String startPoint = "首都师范大学南门";
105 private String endPoint = "首都师范大学篮球场"; 105 private String endPoint = "首都师范大学篮球场";
106 - private String test = "[{\"latitude\":39.933889208848,\"latitudeE6\":3.9933889208848E7,\"longitude\":116.30900265517,\"longitudeE6\":1.1630900265517001E8},{\"latitude\":39.933868507347,\"latitudeE6\":3.9933868507347E7,\"longitude\":116.30865416508,\"longitudeE6\":1.1630865416508E8},{\"latitude\":39.934756505077,\"latitudeE6\":3.9934756505077E7,\"longitude\":116.30860516469,\"longitudeE6\":1.1630860516468999E8},{\"latitude\":39.934781620502,\"latitudeE6\":3.9934781620502E7,\"longitude\":116.30961013007,\"longitudeE6\":1.1630961013007E8},{\"latitude\":39.934881620374,\"latitudeE6\":3.9934881620374E7,\"longitude\":116.30960513008,\"longitudeE6\":1.1630960513008E8},{\"latitude\":39.934077623132,\"latitudeE6\":3.9934077623132E7,\"longitude\":116.30965812942,\"longitudeE6\":1.1630965812942E8},{\"latitude\":39.933972618463,\"latitudeE6\":3.9933972618463E7,\"longitude\":116.30962113087,\"longitudeE6\":1.1630962113087E8},{\"latitude\":39.933932608856,\"latitudeE6\":3.9933932608856E7,\"longitude\":116.30953913383,\"longitudeE6\":1.1630953913383E8},{\"latitude\":39.933903844942,\"latitudeE6\":3.9933903844942E7,\"longitude\":116.30918357649,\"longitudeE6\":1.1630918357649E8}]"; 106 + private String test = "[{\"latitude\":39.933889208848,\"latitudeE6\":3.9933889208848E7,\"longitude\":116.30900265517,\"longitudeE6\":1.1630900265517001E8},{\"latitude\":39.933868507347,\"latitudeE6\":3.9933868507347E7,\"longitude\":116.30865416508,\"longitudeE6\":1.1630865416508E8},{\"latitude\":39.934756505077,\"latitudeE6\":3.9934756505077E7,\"longitude\":116.30860516469,\"longitudeE6\":1.1630860516468999E8},{\"latitude\":39.934781620502,\"latitudeE6\":3.9934781620502E7,\"longitude\":116.30961013007,\"longitudeE6\":1.1630961013007E8},{\"latitude\":39.934881620374,\"latitudeE6\":3.9934881620374E7,\"longitude\":116.30960513008,\"longitudeE6\":1.1630960513008E8},{\"latitude\":39.934077623132,\"latitudeE6\":3.9934077623132E7,\"longitude\":116.30965812942,\"longitudeE6\":1.1630965812942E8},{\"latitude\":39.933972618463,\"latitudeE6\":3.9933972618463E7,\"longitude\":116.30962113087,\"longitudeE6\":1.1630962113087E8},{\"latitude\":39.933932608856,\"latitudeE6\":3.9933932608856E7,\"longitude\":116.30953913383,\"longitudeE6\":1.1630953913383E8}]";
107 private LinkedList<LatLng> importLatLngs;//关键点 107 private LinkedList<LatLng> importLatLngs;//关键点
108 private LatLng startLatLng = new LatLng(39.934733, 116.308646);//起始点 108 private LatLng startLatLng = new LatLng(39.934733, 116.308646);//起始点
109 private List<LatLng> trackPoints; 109 private List<LatLng> trackPoints;
@@ -283,7 +283,7 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener { @@ -283,7 +283,7 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener {
283 //设置定位模式, 默认为 LocationMode.NORMAL 普通态 283 //设置定位模式, 默认为 LocationMode.NORMAL 普通态
284 mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL; 284 mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL;
285 // 设置定位图标修改为自定义marker 285 // 设置定位图标修改为自定义marker
286 - Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(getContext(), BitmapFactory.decodeResource(getContext().getResources(), R.drawable.rt_ic_location), 40, 40); 286 + Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(getContext(), BitmapFactory.decodeResource(getContext().getResources(), R.drawable.rt_ic_location), 50, 50);
287 mCurrentMarker = BitmapDescriptorFactory.fromBitmap(pointBitmap); 287 mCurrentMarker = BitmapDescriptorFactory.fromBitmap(pointBitmap);
288 //设置定位蓝点精度圆圈的填充颜色为透明色 288 //设置定位蓝点精度圆圈的填充颜色为透明色
289 accuracyCircleFillColor = getContext().getResources().getColor(R.color.transparent); 289 accuracyCircleFillColor = getContext().getResources().getColor(R.color.transparent);
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunningMapFragmentView.java
@@ -240,11 +240,61 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener { @@ -240,11 +240,61 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
240 240
241 @Override 241 @Override
242 public void onReceiveLocation(BDLocation location) { 242 public void onReceiveLocation(BDLocation location) {
243 - Log.e(TAG, "onReceiveLocation: 状态" + location.getGpsAccuracyStatus());  
244 // map view 销毁后不在处理新接收的位置 243 // map view 销毁后不在处理新接收的位置
245 if (location == null || mMapView == null) { 244 if (location == null || mMapView == null) {
246 return; 245 return;
247 } 246 }
  247 +
  248 + //正在搜索GPS信号
  249 + if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_UNKNOWN) {
  250 + if (fragment.binding.tvGpsPopBg.getVisibility() != View.VISIBLE) {
  251 + fragment.binding.tvGpsPopBg.setVisibility(View.VISIBLE);
  252 + }
  253 + if (!getContext().getResources().getString(R.string.loc_gps_accuracy_unknown).equals(fragment.binding.tvGpsPopBg.getText().toString())) {
  254 + fragment.binding.tvGpsPopBg.setText(getContext().getResources().getString(R.string.loc_gps_accuracy_unknown));
  255 + }
  256 + //设置图标
  257 + if (fragment.binding.ivGpsState.getTag() == null || !"GPS_ACCURACY_UNKNOWN".equals(fragment.binding.ivGpsState.getTag().toString())) {
  258 + fragment.binding.ivGpsState.setTag("GPS_ACCURACY_UNKNOWN");
  259 + fragment.binding.ivGpsState.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_0));
  260 + }
  261 + }
  262 + //GPS 质量判断差
  263 + else if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_BAD) {
  264 + if (fragment.binding.tvGpsPopBg.getVisibility() != View.VISIBLE) {
  265 + fragment.binding.tvGpsPopBg.setVisibility(View.VISIBLE);
  266 + }
  267 + if (!getContext().getResources().getString(R.string.loc_gps_accuracy_bad).equals(fragment.binding.tvGpsPopBg.getText().toString())) {
  268 + fragment.binding.tvGpsPopBg.setText(getContext().getResources().getString(R.string.loc_gps_accuracy_bad));
  269 + }
  270 + //设置图标
  271 + if (fragment.binding.ivGpsState.getTag() == null || !"GPS_ACCURACY_BAD".equals(fragment.binding.ivGpsState.getTag().toString())) {
  272 + fragment.binding.ivGpsState.setTag("GPS_ACCURACY_BAD");
  273 + fragment.binding.ivGpsState.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_1));
  274 + }
  275 + }
  276 + //GPS 质量判断中等
  277 + else if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_MID) {
  278 + if (fragment.binding.tvGpsPopBg.getVisibility() != View.GONE) {
  279 + fragment.binding.tvGpsPopBg.setVisibility(View.GONE);
  280 + }
  281 + //设置图标
  282 + if (fragment.binding.ivGpsState.getTag()== null || !"GPS_ACCURACY_MID".equals(fragment.binding.ivGpsState.getTag().toString())) {
  283 + fragment.binding.ivGpsState.setTag("GPS_ACCURACY_MID");
  284 + fragment.binding.ivGpsState.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_2));
  285 + }
  286 + }//GPS 质量判断好
  287 + else if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_GOOD) {
  288 + if (fragment.binding.tvGpsPopBg.getVisibility() != View.GONE) {
  289 + fragment.binding.tvGpsPopBg.setVisibility(View.GONE);
  290 + }
  291 + //设置图标
  292 + if (fragment.binding.ivGpsState.getTag() == null || !"GPS_ACCURACY_GOOD".equals(fragment.binding.ivGpsState.getTag().toString())) {
  293 + fragment.binding.ivGpsState.setTag("GPS_ACCURACY_GOOD");
  294 + fragment.binding.ivGpsState.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_3));
  295 + }
  296 + }
  297 +
248 if (isFirstLoc) { 298 if (isFirstLoc) {
249 isFirstLoc = false; 299 isFirstLoc = false;
250 if (location.getRadius() > 20) { 300 if (location.getRadius() > 20) {
@@ -268,7 +318,7 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener { @@ -268,7 +318,7 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
268 return; 318 return;
269 } 319 }
270 MapStatus.Builder builder = new MapStatus.Builder(); 320 MapStatus.Builder builder = new MapStatus.Builder();
271 - //不是第一次定位 321 + //不是第一次定位状态
272 if (!isFirstLoc) { 322 if (!isFirstLoc) {
273 if (currentPoints.size() > 0) { 323 if (currentPoints.size() > 0) {
274 //进行判断 324 //进行判断
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/receivers/ServiceReceiver.java
@@ -8,7 +8,6 @@ import android.os.Build; @@ -8,7 +8,6 @@ import android.os.Build;
8 import android.os.PowerManager; 8 import android.os.PowerManager;
9 import android.util.Log; 9 import android.util.Log;
10 10
11 -import com.cnlive.moudle.pedometer.service.KeepLiveService;  
12 import com.cnlive.moudle.pedometer.utils.MySpHelper; 11 import com.cnlive.moudle.pedometer.utils.MySpHelper;
13 import com.cnlive.moudle.pedometer.utils.ServiceUtils; 12 import com.cnlive.moudle.pedometer.utils.ServiceUtils;
14 13
@@ -41,9 +40,9 @@ public class ServiceReceiver extends BroadcastReceiver { @@ -41,9 +40,9 @@ public class ServiceReceiver extends BroadcastReceiver {
41 if (isRun) { 40 if (isRun) {
42 if (!ServiceUtils.isServiceRunning(context, "com.cnlive.moudle.pedometer.service.KeepLiveService")) { 41 if (!ServiceUtils.isServiceRunning(context, "com.cnlive.moudle.pedometer.service.KeepLiveService")) {
43 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 42 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
44 - context.startForegroundService(new Intent(context, KeepLiveService.class)); 43 +// context.startForegroundService(new Intent(context, KeepLiveService.class));
45 } else { 44 } else {
46 - context.startService(new Intent(context, KeepLiveService.class)); 45 +// context.startService(new Intent(context, KeepLiveService.class));
47 } 46 }
48 Log.e(TAG, "启动KeepLiveService"); 47 Log.e(TAG, "启动KeepLiveService");
49 } 48 }
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/service/KeepLiveService.java deleted 100644 → 0
1 -package com.cnlive.moudle.pedometer.service;  
2 -  
3 -import android.annotation.SuppressLint;  
4 -import android.app.Notification;  
5 -import android.app.NotificationChannel;  
6 -import android.app.NotificationManager;  
7 -import android.app.Service;  
8 -import android.content.ComponentName;  
9 -import android.content.Context;  
10 -import android.content.Intent;  
11 -import android.content.IntentFilter;  
12 -import android.media.MediaPlayer;  
13 -import android.os.Build;  
14 -import android.os.Handler;  
15 -import android.os.IBinder;  
16 -import android.os.PowerManager;  
17 -import android.support.v4.app.NotificationCompat;  
18 -import android.util.Log;  
19 -  
20 -import com.cnlive.moudle.pedometer.receivers.ServiceReceiver;  
21 -import com.cnlive.moudle.pedometer.utils.MySpHelper;  
22 -import com.example.moudle_pedometer.R;  
23 -  
24 -  
25 -/**  
26 - * @author ShinnyYang  
27 - * 维持后台运行的服务  
28 - */  
29 -public class KeepLiveService extends Service implements MediaPlayer.OnCompletionListener {  
30 - //唤醒锁  
31 - private PowerManager.WakeLock wakeLock = null;  
32 - //电源管理器  
33 - private PowerManager powerManager = null;  
34 - //音频播放器  
35 - public static MediaPlayer mMediaPlayer;  
36 - //广播  
37 - private static ServiceReceiver myReceiver;  
38 - private String CHANNEL_ONE_ID = "com.cnlive.keep";  
39 - private String CHANNEL_ONE_NAME = "KeepLive";  
40 - private NotificationManager mNM;  
41 - private Notification notification = null;  
42 - //是否在后台运行  
43 - public static boolean isKeepService = true;  
44 - public static KeepLiveService instance;  
45 - private int startId;  
46 - private final String TAG = "KeepLiveService";  
47 - private Handler handler;  
48 - private Runnable runnable;  
49 -  
50 - public KeepLiveService() {  
51 - }  
52 -  
53 - public static KeepLiveService getInstance() {  
54 - if (instance == null) {  
55 - instance = new KeepLiveService();  
56 - return instance;  
57 - } else {  
58 - return instance;  
59 - }  
60 - }  
61 -  
62 - @Override  
63 - public void onCreate() {  
64 - super.onCreate();  
65 - instance = this;  
66 -// if (!ServiceUtils.isServiceRunning(getApplicationContext(), "com.cnlive.moudle.pedometer.service.StepService")) {  
67 -// startService(new Intent(getApplicationContext(), StepService.class));  
68 -// }  
69 - init();  
70 - initBroadCastReceiver();  
71 - handler = new Handler();  
72 - runnable = new Runnable() {  
73 - @Override  
74 - public void run() {  
75 - //跨进程读取配置文件  
76 -// UserService.getUid(getApplicationContext()  
77 - boolean isRun = MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).getBoolean("keepService", false);  
78 - if (isRun) {  
79 - handler.postDelayed(this, 5000);  
80 - } else {  
81 - if (myReceiver != null) {  
82 - unregisterReceiver(myReceiver);  
83 - }  
84 - stopPlaySong();  
85 - stopForeground(true);  
86 - }  
87 -  
88 - }  
89 - };  
90 -  
91 - }  
92 -  
93 - @Override  
94 - public void onTaskRemoved(Intent rootIntent) {  
95 - super.onTaskRemoved(rootIntent);  
96 - Log.e("onTaskRemoved", "onTaskRemoved");  
97 - }  
98 -  
99 - /**  
100 - * 初始化广播  
101 - */  
102 - private void initBroadCastReceiver() {  
103 - if (wakeLock != null) {  
104 - myReceiver = new ServiceReceiver(wakeLock);  
105 - } else {  
106 - myReceiver = new ServiceReceiver();  
107 - }  
108 - IntentFilter intentFilter = new IntentFilter();  
109 - intentFilter.addAction(Intent.ACTION_SCREEN_OFF);  
110 - intentFilter.addAction(Intent.ACTION_SCREEN_ON);  
111 -// intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);  
112 - intentFilter.addAction(Intent.ACTION_TIME_CHANGED);  
113 -// intentFilter.addAction(Intent.ACTION_POWER_CONNECTED);  
114 -// intentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);  
115 - intentFilter.addAction("com.cnlive.strike.receiver.ServiceReceiver");  
116 - intentFilter.addAction("close.KeepService");  
117 - registerReceiver(myReceiver, intentFilter);  
118 - }  
119 -  
120 - /**  
121 - * 初始化相关参数  
122 - */  
123 - @SuppressLint("InvalidWakeLockTag")  
124 - private void init() {  
125 - if (null == powerManager) {  
126 - powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);  
127 - }  
128 - if (null == wakeLock) {  
129 - wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "track upload");  
130 - }  
131 - if (null == mNM) {  
132 - mNM = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
133 - }  
134 -  
135 - }  
136 -  
137 - @SuppressLint("WrongConstant")  
138 - @Override  
139 - public int onStartCommand(Intent intent, int flags, int startId) {  
140 - this.startId = startId;  
141 - //跨进程读取配置文件  
142 -// UserService.getUid(getApplicationContext()  
143 - boolean isRun = MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).getBoolean("keepService", false);  
144 - Log.e("isRun onStartCommand", "" + isRun);  
145 - if (isRun) {  
146 - if (runnable != null) {  
147 - handler.postDelayed(runnable, 5000);  
148 - }  
149 - showHideForegroundNotification();  
150 - Log.e(TAG, "启动HideKeepTipService");  
151 - startPlaySong();  
152 - }  
153 - return START_STICKY;  
154 - }  
155 -  
156 - //开始、暂停播放  
157 - public void startPlaySong() {  
158 - if (mMediaPlayer == null) {  
159 - mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.no_kill);  
160 - }  
161 - mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);  
162 - mMediaPlayer.setOnCompletionListener(this);  
163 -// mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {  
164 -// @Override  
165 -// public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {  
166 -// mMediaPlayer.reset();  
167 -// mMediaPlayer.release();  
168 -// mMediaPlayer = null;  
169 -// startPlaySong();  
170 -// return false;  
171 -// }  
172 -// });  
173 - if (!mMediaPlayer.isPlaying()) {  
174 - mMediaPlayer.start();  
175 - Log.e(TAG, "开始播放");  
176 - }  
177 -  
178 - }  
179 -  
180 - //停止播放销毁对象  
181 - public void stopPlaySong() {  
182 -  
183 - if (mMediaPlayer != null) {  
184 - mMediaPlayer.stop();  
185 - mMediaPlayer.release();  
186 - mMediaPlayer = null;  
187 - Log.e("停止播放", "停止");  
188 - }  
189 - }  
190 -  
191 -  
192 - private void showHideForegroundNotification() {  
193 - NotificationChannel channel = null;  
194 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {  
195 - channel = new NotificationChannel(CHANNEL_ONE_ID, CHANNEL_ONE_NAME,  
196 - NotificationManager.IMPORTANCE_HIGH);  
197 - channel.enableLights(false);  
198 - channel.enableVibration(false);  
199 - channel.setVibrationPattern(new long[]{0});  
200 - channel.setSound(null, null);  
201 - channel.setLockscreenVisibility(NotificationCompat.VISIBILITY_PRIVATE);  
202 - mNM.createNotificationChannel(channel);  
203 - }  
204 - notification = new NotificationCompat.Builder(this, CHANNEL_ONE_ID)  
205 - .setWhen(System.currentTimeMillis())  
206 - .setSound(null)  
207 - .build();  
208 - // 0 隐藏前台服务通知  
209 - startForeground(100, notification);  
210 -// stopForeground(true);  
211 - }  
212 -  
213 - @Override  
214 - public void onDestroy() {  
215 - super.onDestroy();  
216 - Log.e("onDestroy", "onDestroy:" + notification);  
217 - if (myReceiver != null) {  
218 - unregisterReceiver(myReceiver);  
219 - }  
220 - try {  
221 -// stopForeground(true);  
222 - } catch (Exception e) {  
223 - }  
224 - stopPlaySong();  
225 - // 重启自己  
226 - if (isKeepService) {  
227 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {  
228 - startForegroundService(new Intent(getApplicationContext(), KeepLiveService.class));  
229 - } else {  
230 - startService(new Intent(getApplicationContext(), KeepLiveService.class));  
231 - }  
232 - //发送重启广播  
233 - sendRestartBroadCast();  
234 - }  
235 -  
236 -  
237 - }  
238 -  
239 -  
240 - /**  
241 - * 发送重启广播  
242 - */  
243 - private void sendRestartBroadCast() {  
244 - Intent intent = new Intent(" com.cnlive.moudle.pedometer.receivers.MyReceiver");  
245 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {  
246 - intent.setComponent(new ComponentName(getPackageName(), " com.cnlive.moudle.pedometer.receivers.MyReceiver"));//高版本Android发送广播需要加这句  
247 - }  
248 - sendBroadcast(intent);  
249 - }  
250 -  
251 - @Override  
252 - public IBinder onBind(Intent intent) {  
253 - // TODO: Return the communication channel to the service.  
254 - throw new UnsupportedOperationException("Not yet implemented");  
255 - }  
256 -  
257 -  
258 - /**  
259 - * 歌曲播放完成  
260 - *  
261 - * @param mediaPlayer  
262 - */  
263 - @Override  
264 - public void onCompletion(MediaPlayer mediaPlayer) {  
265 -// UserService.getUid(getApplicationContext()  
266 - boolean isRun = MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).getBoolean("keepService", false);  
267 -  
268 - if (isRun) {  
269 - Log.e(TAG, "重新播放");  
270 - mediaPlayer.start();  
271 - Intent intent = new Intent("com.cnlive.strike.receiver.ServiceReceiver");  
272 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {  
273 - intent.setComponent(new ComponentName(getPackageName(), "com.cnlive.strike.receiver.ServiceReceiver"));//高版本Android发送广播需要加这句  
274 - }  
275 - sendBroadcast(intent);  
276 - } else {  
277 - Log.e(TAG, "停止重新播放");  
278 - stopPlaySong();  
279 - }  
280 -  
281 -  
282 - }  
283 -}  
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/service/StepService.java
@@ -11,7 +11,6 @@ import android.content.ComponentName; @@ -11,7 +11,6 @@ import android.content.ComponentName;
11 import android.content.Context; 11 import android.content.Context;
12 import android.content.Intent; 12 import android.content.Intent;
13 import android.content.IntentFilter; 13 import android.content.IntentFilter;
14 -import android.content.SharedPreferences;  
15 import android.hardware.Sensor; 14 import android.hardware.Sensor;
16 import android.hardware.SensorEvent; 15 import android.hardware.SensorEvent;
17 import android.hardware.SensorEventListener; 16 import android.hardware.SensorEventListener;
@@ -27,19 +26,18 @@ import android.util.Log; @@ -27,19 +26,18 @@ import android.util.Log;
27 import android.widget.RemoteViews; 26 import android.widget.RemoteViews;
28 import android.widget.Toast; 27 import android.widget.Toast;
29 28
30 -import com.baidu.mapapi.model.LatLng;  
31 import com.baidu.trace.LBSTraceClient; 29 import com.baidu.trace.LBSTraceClient;
32 import com.baidu.trace.Trace; 30 import com.baidu.trace.Trace;
33 -import com.baidu.trace.api.entity.OnEntityListener;  
34 import com.baidu.trace.api.fence.FenceAlarmPushInfo; 31 import com.baidu.trace.api.fence.FenceAlarmPushInfo;
35 import com.baidu.trace.api.fence.MonitoredAction; 32 import com.baidu.trace.api.fence.MonitoredAction;
36 import com.baidu.trace.api.track.LatestPoint; 33 import com.baidu.trace.api.track.LatestPoint;
37 import com.baidu.trace.api.track.LatestPointResponse; 34 import com.baidu.trace.api.track.LatestPointResponse;
38 import com.baidu.trace.api.track.OnTrackListener; 35 import com.baidu.trace.api.track.OnTrackListener;
  36 +import com.baidu.trace.model.LocationMode;
39 import com.baidu.trace.model.OnTraceListener; 37 import com.baidu.trace.model.OnTraceListener;
40 import com.baidu.trace.model.PushMessage; 38 import com.baidu.trace.model.PushMessage;
41 import com.baidu.trace.model.StatusCodes; 39 import com.baidu.trace.model.StatusCodes;
42 -import com.baidu.trace.model.TraceLocation; 40 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
43 import com.cnlive.moudle.pedometer.model.Constant; 41 import com.cnlive.moudle.pedometer.model.Constant;
44 import com.cnlive.moudle.pedometer.model.MessageEvent; 42 import com.cnlive.moudle.pedometer.model.MessageEvent;
45 import com.cnlive.moudle.pedometer.model.step.StepCount; 43 import com.cnlive.moudle.pedometer.model.step.StepCount;
@@ -49,9 +47,7 @@ import com.cnlive.moudle.pedometer.sql.db.DbCore; @@ -49,9 +47,7 @@ import com.cnlive.moudle.pedometer.sql.db.DbCore;
49 import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity; 47 import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity;
50 import com.cnlive.moudle.pedometer.ui.activity.PedometerMainActivity; 48 import com.cnlive.moudle.pedometer.ui.activity.PedometerMainActivity;
51 import com.cnlive.moudle.pedometer.utils.MySpHelper; 49 import com.cnlive.moudle.pedometer.utils.MySpHelper;
52 -import com.cnlive.moudle.pedometer.utils.TimeUtil;  
53 import com.example.moudle_pedometer.R; 50 import com.example.moudle_pedometer.R;
54 -import com.orhanobut.logger.Logger;  
55 51
56 import org.greenrobot.eventbus.EventBus; 52 import org.greenrobot.eventbus.EventBus;
57 import org.greenrobot.eventbus.Subscribe; 53 import org.greenrobot.eventbus.Subscribe;
@@ -180,6 +176,8 @@ public class StepService extends Service implements SensorEventListener { @@ -180,6 +176,8 @@ public class StepService extends Service implements SensorEventListener {
180 mClient = new LBSTraceClient(getApplicationContext()); 176 mClient = new LBSTraceClient(getApplicationContext());
181 // 设置定位和打包周期 177 // 设置定位和打包周期
182 mClient.setInterval(gatherInterval, packInterval); 178 mClient.setInterval(gatherInterval, packInterval);
  179 + //设置定位模式
  180 + mClient.setLocationMode(LocationMode.High_Accuracy);
183 } 181 }
184 if (mTrace == null) { 182 if (mTrace == null) {
185 mTrace = new Trace(serviceId, entityName); 183 mTrace = new Trace(serviceId, entityName);
@@ -314,6 +312,7 @@ public class StepService extends Service implements SensorEventListener { @@ -314,6 +312,7 @@ public class StepService extends Service implements SensorEventListener {
314 @Override 312 @Override
315 public void onPushCallback(byte messageType, PushMessage pushMessage) { 313 public void onPushCallback(byte messageType, PushMessage pushMessage) {
316 Log.e(TAG, "onPushCallback: "); 314 Log.e(TAG, "onPushCallback: ");
  315 +
317 if (messageType < 0x03 || messageType > 0x04) { 316 if (messageType < 0x03 || messageType > 0x04) {
318 return; 317 return;
319 } 318 }
@@ -341,9 +340,9 @@ public class StepService extends Service implements SensorEventListener { @@ -341,9 +340,9 @@ public class StepService extends Service implements SensorEventListener {
341 //开启轨迹服务 340 //开启轨迹服务
342 if (mClient != null) { 341 if (mClient != null) {
343 mClient.startTrace(mTrace, traceListener); 342 mClient.startTrace(mTrace, traceListener);
344 - long stepStartTime = MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).getLong("stepStartTime", 0); 343 + long stepStartTime = CommonInfo.getStepStartTime(getApplicationContext());
345 if (stepStartTime == 0) { 344 if (stepStartTime == 0) {
346 - MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).putLong("stepStartTime", TimeUtil.getCurrentTime()); 345 + CommonInfo.getStepStartTime(getApplicationContext());
347 } 346 }
348 } 347 }
349 348
@@ -357,13 +356,12 @@ public class StepService extends Service implements SensorEventListener { @@ -357,13 +356,12 @@ public class StepService extends Service implements SensorEventListener {
357 @SuppressLint("WrongConstant") 356 @SuppressLint("WrongConstant")
358 @Override 357 @Override
359 public int onStartCommand(Intent intent, int flags, int startId) { 358 public int onStartCommand(Intent intent, int flags, int startId) {
360 -// userId=intent.getExtras().getString("userId");  
361 - userId = MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).getString("userId", ""); 359 + userId =CommonInfo.getUserId(getApplicationContext());
362 if (userId != null && !TextUtils.isEmpty(userId)) { 360 if (userId != null && !TextUtils.isEmpty(userId)) {
363 if (!EventBus.getDefault().isRegistered(this)) { 361 if (!EventBus.getDefault().isRegistered(this)) {
364 EventBus.getDefault().register(this); 362 EventBus.getDefault().register(this);
365 } 363 }
366 - MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).putBoolean("writeUserStep:" + userId, true); 364 + CommonInfo.setIsWriteUserStep(getApplicationContext(), true);
367 entityName = userId; 365 entityName = userId;
368 initTodayData(userId); 366 initTodayData(userId);
369 initTrace(); 367 initTrace();
@@ -397,6 +395,7 @@ public class StepService extends Service implements SensorEventListener { @@ -397,6 +395,7 @@ public class StepService extends Service implements SensorEventListener {
397 } 395 }
398 396
399 private void init() { 397 private void init() {
  398 + CommonInfo.setIsRunStepService(getApplicationContext(), true);
400 if (null == mNM) { 399 if (null == mNM) {
401 mNM = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 400 mNM = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
402 } 401 }
@@ -896,7 +895,7 @@ public class StepService extends Service implements SensorEventListener { @@ -896,7 +895,7 @@ public class StepService extends Service implements SensorEventListener {
896 * 保存记步数据 895 * 保存记步数据
897 */ 896 */
898 private void save() { 897 private void save() {
899 - boolean isWriteUserStep = MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).getBoolean("writeUserStep:" + userId, false); 898 + boolean isWriteUserStep = CommonInfo.getIsWriteUserStep(getApplicationContext());
900 if (!isWriteUserStep) { 899 if (!isWriteUserStep) {
901 return; 900 return;
902 } 901 }
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/activity/PedometerMainActivity.java
@@ -246,4 +246,5 @@ public class PedometerMainActivity extends QMUIFragmentActivity { @@ -246,4 +246,5 @@ public class PedometerMainActivity extends QMUIFragmentActivity {
246 public void onBackPressed() { 246 public void onBackPressed() {
247 return; 247 return;
248 } 248 }
  249 +
249 } 250 }
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/activity/RunRaceDetailActivity.java
@@ -15,6 +15,7 @@ import com.baidu.mapapi.SDKInitializer; @@ -15,6 +15,7 @@ import com.baidu.mapapi.SDKInitializer;
15 import com.cnlive.libs.base.ui.QMUIFragment; 15 import com.cnlive.libs.base.ui.QMUIFragment;
16 import com.cnlive.libs.base.ui.QMUIFragmentActivity; 16 import com.cnlive.libs.base.ui.QMUIFragmentActivity;
17 import com.cnlive.libs.base.util.StatusBarUtil2; 17 import com.cnlive.libs.base.util.StatusBarUtil2;
  18 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
18 import com.cnlive.moudle.pedometer.model.RunningMapBean; 19 import com.cnlive.moudle.pedometer.model.RunningMapBean;
19 import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity; 20 import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity;
20 import com.cnlive.moudle.pedometer.ui.fragment.RunMainFragment; 21 import com.cnlive.moudle.pedometer.ui.fragment.RunMainFragment;
@@ -34,6 +35,7 @@ import java.util.List; @@ -34,6 +35,7 @@ import java.util.List;
34 */ 35 */
35 @Route(path = "/moudle_pedometer/RunRaceDetailActivity") 36 @Route(path = "/moudle_pedometer/RunRaceDetailActivity")
36 public class RunRaceDetailActivity extends QMUIFragmentActivity { 37 public class RunRaceDetailActivity extends QMUIFragmentActivity {
  38 + private QMUIFragment fragment;
37 39
38 @Override 40 @Override
39 protected int getContextViewId() { 41 protected int getContextViewId() {
@@ -45,15 +47,17 @@ public class RunRaceDetailActivity extends QMUIFragmentActivity { @@ -45,15 +47,17 @@ public class RunRaceDetailActivity extends QMUIFragmentActivity {
45 super.onCreate(savedInstanceState); 47 super.onCreate(savedInstanceState);
46 StatusBarUtil2.setColor(this, getResources().getColor(R.color.run_main_bg), 0); 48 StatusBarUtil2.setColor(this, getResources().getColor(R.color.run_main_bg), 0);
47 //判断用户是否结束运动 49 //判断用户是否结束运动
48 - String uid = "yangshuai";  
49 - UserStepEntity userStepEntity = StepUtil.getUserStepData(getApplicationContext(), uid);  
50 - //没有在数据库中找到相关记录  
51 - if (userStepEntity == null) {  
52 - addFragment(new RunRaceDetailFragment()); 50 + boolean isRunStep = CommonInfo.getIsRunStepService(this);
  51 + //没有找到相关记录
  52 + if (!isRunStep) {
  53 + fragment = new RunRaceDetailFragment();
53 } 54 }
54 //找到记录 55 //找到记录
55 else { 56 else {
56 - addFragment(new RunMainFragment()); 57 + fragment = new RunMainFragment();
  58 + }
  59 + if (fragment != null) {
  60 + addFragment(fragment);
57 } 61 }
58 } 62 }
59 63
@@ -71,4 +75,14 @@ public class RunRaceDetailActivity extends QMUIFragmentActivity { @@ -71,4 +75,14 @@ public class RunRaceDetailActivity extends QMUIFragmentActivity {
71 75
72 } 76 }
73 } 77 }
  78 +
  79 + @Override
  80 + public void onBackPressed() {
  81 + super.onBackPressed();
  82 + if (fragment != null) {
  83 + if (fragment instanceof RunMainFragment) {
  84 + return;
  85 + }
  86 + }
  87 + }
74 } 88 }
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/RunMainFragment.java
@@ -68,6 +68,9 @@ public class RunMainFragment extends QMUIFragment&lt;RunMainFragmentView, RunMainFr @@ -68,6 +68,9 @@ public class RunMainFragment extends QMUIFragment&lt;RunMainFragmentView, RunMainFr
68 if (EventBus.getDefault().isRegistered(this)) { 68 if (EventBus.getDefault().isRegistered(this)) {
69 EventBus.getDefault().unregister(this); 69 EventBus.getDefault().unregister(this);
70 } 70 }
  71 + if (getMvpView() != null) {
  72 + getMvpView().onDestroy();
  73 + }
71 } 74 }
72 75
73 @Override 76 @Override
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/RunningMapFragment.java
@@ -16,6 +16,7 @@ import android.view.View; @@ -16,6 +16,7 @@ import android.view.View;
16 import com.baidu.mapapi.model.LatLng; 16 import com.baidu.mapapi.model.LatLng;
17 import com.cnlive.libs.base.ui.QMUIFragment; 17 import com.cnlive.libs.base.ui.QMUIFragment;
18 import com.cnlive.libs.base.util.StatusBarUtil2; 18 import com.cnlive.libs.base.util.StatusBarUtil2;
  19 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
19 import com.cnlive.moudle.pedometer.frame.presenter.RunningMapFragmentPresenter; 20 import com.cnlive.moudle.pedometer.frame.presenter.RunningMapFragmentPresenter;
20 import com.cnlive.moudle.pedometer.frame.view.RunningMapFragmentView; 21 import com.cnlive.moudle.pedometer.frame.view.RunningMapFragmentView;
21 import com.cnlive.moudle.pedometer.model.RunningMapBean; 22 import com.cnlive.moudle.pedometer.model.RunningMapBean;
@@ -49,7 +50,7 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run @@ -49,7 +50,7 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run
49 private static final String TAG = "RunningMapFragment"; 50 private static final String TAG = "RunningMapFragment";
50 private RunningMapBean runningMapBean; 51 private RunningMapBean runningMapBean;
51 private SensorManager mSensorManager; 52 private SensorManager mSensorManager;
52 - private String test = "[{\"latitude\":39.933889208848,\"latitudeE6\":3.9933889208848E7,\"longitude\":116.30900265517,\"longitudeE6\":1.1630900265517001E8},{\"latitude\":39.933868507347,\"latitudeE6\":3.9933868507347E7,\"longitude\":116.30865416508,\"longitudeE6\":1.1630865416508E8},{\"latitude\":39.934756505077,\"latitudeE6\":3.9934756505077E7,\"longitude\":116.30860516469,\"longitudeE6\":1.1630860516468999E8},{\"latitude\":39.934781620502,\"latitudeE6\":3.9934781620502E7,\"longitude\":116.30961013007,\"longitudeE6\":1.1630961013007E8},{\"latitude\":39.934881620374,\"latitudeE6\":3.9934881620374E7,\"longitude\":116.30960513008,\"longitudeE6\":1.1630960513008E8},{\"latitude\":39.934077623132,\"latitudeE6\":3.9934077623132E7,\"longitude\":116.30965812942,\"longitudeE6\":1.1630965812942E8},{\"latitude\":39.933972618463,\"latitudeE6\":3.9933972618463E7,\"longitude\":116.30962113087,\"longitudeE6\":1.1630962113087E8},{\"latitude\":39.933932608856,\"latitudeE6\":3.9933932608856E7,\"longitude\":116.30953913383,\"longitudeE6\":1.1630953913383E8},{\"latitude\":39.933903844942,\"latitudeE6\":3.9933903844942E7,\"longitude\":116.30918357649,\"longitudeE6\":1.1630918357649E8}]"; 53 + private String test = "[{\"latitude\":39.933889208848,\"latitudeE6\":3.9933889208848E7,\"longitude\":116.30900265517,\"longitudeE6\":1.1630900265517001E8},{\"latitude\":39.933868507347,\"latitudeE6\":3.9933868507347E7,\"longitude\":116.30865416508,\"longitudeE6\":1.1630865416508E8},{\"latitude\":39.934756505077,\"latitudeE6\":3.9934756505077E7,\"longitude\":116.30860516469,\"longitudeE6\":1.1630860516468999E8},{\"latitude\":39.934781620502,\"latitudeE6\":3.9934781620502E7,\"longitude\":116.30961013007,\"longitudeE6\":1.1630961013007E8},{\"latitude\":39.934881620374,\"latitudeE6\":3.9934881620374E7,\"longitude\":116.30960513008,\"longitudeE6\":1.1630960513008E8},{\"latitude\":39.934077623132,\"latitudeE6\":3.9934077623132E7,\"longitude\":116.30965812942,\"longitudeE6\":1.1630965812942E8},{\"latitude\":39.933972618463,\"latitudeE6\":3.9933972618463E7,\"longitude\":116.30962113087,\"longitudeE6\":1.1630962113087E8},{\"latitude\":39.933932608856,\"latitudeE6\":3.9933932608856E7,\"longitude\":116.30953913383,\"longitudeE6\":1.1630953913383E8}]";
53 //创建震动服务对象 54 //创建震动服务对象
54 private Vibrator mVibrator; 55 private Vibrator mVibrator;
55 private TipDialog tipDialog; 56 private TipDialog tipDialog;
@@ -107,7 +108,7 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run @@ -107,7 +108,7 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run
107 } 108 }
108 //开始进行历史轨迹查询 109 //开始进行历史轨迹查询
109 if (getPresenter() != null && !TextUtils.isEmpty(StepService.entityName)) { 110 if (getPresenter() != null && !TextUtils.isEmpty(StepService.entityName)) {
110 - long stepStartTime = MySpHelper.getInstance(getActivity(), Context.MODE_MULTI_PROCESS).getLong("stepStartTime", 0); 111 + long stepStartTime = CommonInfo.getStepStartTime(getActivity());
111 long startTime = 0; 112 long startTime = 0;
112 if (stepStartTime != 0) { 113 if (stepStartTime != 0) {
113 startTime = stepStartTime; 114 startTime = stepStartTime;
@@ -179,6 +180,7 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run @@ -179,6 +180,7 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run
179 if (EventBus.getDefault().isRegistered(this)) { 180 if (EventBus.getDefault().isRegistered(this)) {
180 EventBus.getDefault().unregister(this); 181 EventBus.getDefault().unregister(this);
181 } 182 }
  183 +
182 } 184 }
183 185
184 @Subscribe(threadMode = ThreadMode.MAIN) 186 @Subscribe(threadMode = ThreadMode.MAIN)
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MyMapUtil.java
@@ -14,6 +14,7 @@ import com.baidu.mapapi.model.LatLng; @@ -14,6 +14,7 @@ import com.baidu.mapapi.model.LatLng;
14 import com.baidu.mapapi.utils.DistanceUtil; 14 import com.baidu.mapapi.utils.DistanceUtil;
15 import com.baidu.trace.model.SortType; 15 import com.baidu.trace.model.SortType;
16 import com.cnlive.moudle.pedometer.model.RoutePoint; 16 import com.cnlive.moudle.pedometer.model.RoutePoint;
  17 +import com.example.moudle_pedometer.R;
17 18
18 import java.util.ArrayList; 19 import java.util.ArrayList;
19 import java.util.List; 20 import java.util.List;
@@ -96,17 +97,23 @@ public class MyMapUtil { @@ -96,17 +97,23 @@ public class MyMapUtil {
96 /** 97 /**
97 * 绘制服务器传过来的轨迹 98 * 绘制服务器传过来的轨迹
98 */ 99 */
99 - public static Overlay drawServerLineTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) { 100 + public static List<Overlay> drawServerLineTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) {
100 // 绘制新覆盖物前,清空之前的覆盖物 101 // 绘制新覆盖物前,清空之前的覆盖物
101 if (points == null || points.size() == 0) { 102 if (points == null || points.size() == 0) {
102 return null; 103 return null;
103 } 104 }
  105 + List<Overlay> resultOverlays = new ArrayList<>();
104 //只有一个点 106 //只有一个点
105 if (points.size() == 1) { 107 if (points.size() == 1) {
106 - Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 40, 40);  
107 - OverlayOptions startOptions = new MarkerOptions().position(points.get(0)).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap));  
108 -// .zIndex(9).draggable(true);  
109 - return baiduMap.addOverlay(startOptions); 108 + Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
  109 + OverlayOptions startOptions = null;
  110 + if (pointBitmap != null) {
  111 + startOptions = new MarkerOptions().position(points.get(0)).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap));
  112 + if (startOptions != null) {
  113 + resultOverlays.add(baiduMap.addOverlay(startOptions));
  114 + }
  115 + return resultOverlays;
  116 + }
110 } 117 }
111 118
112 LatLng startPoint; 119 LatLng startPoint;
@@ -120,30 +127,73 @@ public class MyMapUtil { @@ -120,30 +127,73 @@ public class MyMapUtil {
120 } 127 }
121 128
122 // 添加起点图标 129 // 添加起点图标
123 - Bitmap startPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 40, 40);  
124 - OverlayOptions startOptions = new MarkerOptions()  
125 - .position(startPoint)  
126 - .icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap))  
127 - .perspective(false)  
128 - .animateType(MarkerOptions.MarkerAnimateType.grow)  
129 - ;  
130 -// .zIndex(9).draggable(true); 130 + Bitmap startPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
  131 + OverlayOptions startOptions = null;
  132 + if (startPointBitmap != null) {
  133 + startOptions = new MarkerOptions()
  134 + .position(startPoint)
  135 + .icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap))
  136 + .perspective(false)
  137 + .animateType(MarkerOptions.MarkerAnimateType.grow);
  138 + }
131 // 添加终点图标 139 // 添加终点图标
132 - Bitmap endPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), endIconRes), 40, 40);  
133 - OverlayOptions endOptions = new MarkerOptions()  
134 - .position(endPoint)  
135 - .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap))  
136 - .perspective(false)  
137 - .animateType(MarkerOptions.MarkerAnimateType.grow);  
138 -// .zIndex(9).draggable(true);  
139 - 140 + Bitmap endPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), endIconRes), 24, 30);
  141 + OverlayOptions endOptions = null;
  142 + if (endPointBitmap != null) {
  143 + endOptions = new MarkerOptions()
  144 + .position(endPoint)
  145 + .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap))
  146 + .perspective(false)
  147 + .anchor(0.6f, 0.96f)
  148 + .animateType(MarkerOptions.MarkerAnimateType.grow);
  149 + }
  150 + // 添加圆形范围
  151 + Bitmap startCircleBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), R.drawable.circle_point_raduis), 60, 60);
  152 + OverlayOptions startCircleOptions = null;
  153 + OverlayOptions endCircleOptions = null;
  154 + if (startCircleBitmap != null) {
  155 + startCircleOptions = new MarkerOptions()
  156 + .position(startPoint)
  157 + .icon(BitmapDescriptorFactory.fromBitmap(startCircleBitmap))
  158 + .perspective(false)
  159 + .anchor(0.5f, 0.6f)
  160 + .animateType(MarkerOptions.MarkerAnimateType.grow);
  161 +
  162 + endCircleOptions = new MarkerOptions()
  163 + .position(endPoint)
  164 + .icon(BitmapDescriptorFactory.fromBitmap(startCircleBitmap))
  165 + .perspective(false)
  166 + .anchor(0.5f, 0.6f)
  167 + .animateType(MarkerOptions.MarkerAnimateType.grow);
  168 + }
140 // 添加路线(轨迹) 169 // 添加路线(轨迹)
141 - OverlayOptions polylineOptions = new PolylineOptions().width(10)  
142 - .color(context.getResources().getColor(lineColor)).points(points); 170 + OverlayOptions polylineOptions = null;
  171 + if (points != null && points.size() > 1) {
  172 + polylineOptions = new PolylineOptions().width(10)
  173 + .color(context.getResources().getColor(lineColor)).points(points);
  174 + }
  175 + if (endCircleOptions != null) {
  176 + resultOverlays.add(baiduMap.addOverlay(endCircleOptions));
  177 + }
  178 + if (startCircleOptions != null) {
  179 + resultOverlays.add(baiduMap.addOverlay(startCircleOptions));
  180 + }
  181 + if (startOptions != null) {
  182 + resultOverlays.add(baiduMap.addOverlay(startOptions));
143 183
144 - baiduMap.addOverlay(startOptions);  
145 - baiduMap.addOverlay(endOptions);  
146 - return baiduMap.addOverlay(polylineOptions); 184 + }
  185 + if (endOptions != null) {
  186 + resultOverlays.add(baiduMap.addOverlay(endOptions));
  187 + }
  188 + if (polylineOptions != null) {
  189 + resultOverlays.add(baiduMap.addOverlay(polylineOptions));
  190 +
  191 + }
  192 + if (resultOverlays != null) {
  193 + return resultOverlays;
  194 + } else {
  195 + return null;
  196 + }
147 } 197 }
148 198
149 199
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MySpHelper.java
@@ -140,4 +140,14 @@ public class MySpHelper { @@ -140,4 +140,14 @@ public class MySpHelper {
140 private SharedPreferences getSP(String name) { 140 private SharedPreferences getSP(String name) {
141 return context.getSharedPreferences(name, SP_MODE); 141 return context.getSharedPreferences(name, SP_MODE);
142 } 142 }
  143 +
  144 + public void removeKey(String key) {
  145 + try {
  146 + SharedPreferences.Editor editor = getSP().edit();
  147 + editor.remove(key);
  148 + editor.commit();
  149 + } catch (NullPointerException e) {
  150 + Log.d("hcj", "" + e);
  151 + }
  152 + }
143 } 153 }
moudle_pedometer/src/main/res/drawable-hdpi/circle_point_raduis.png 0 → 100644

2.73 KB

moudle_pedometer/src/main/res/drawable-hdpi/circle_white_shadow_bg.png 0 → 100644

2.03 KB

moudle_pedometer/src/main/res/drawable-hdpi/gps_tip_bg.png 0 → 100644

1.38 KB

moudle_pedometer/src/main/res/drawable-hdpi/gps_white_shadow.png 0 → 100644

1.62 KB

moudle_pedometer/src/main/res/drawable-hdpi/icon_end.png

6.57 KB | W: | H:

2.85 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
moudle_pedometer/src/main/res/drawable-hdpi/icon_start.png

5.93 KB | W: | H:

2.97 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
moudle_pedometer/src/main/res/drawable-hdpi/rt_ic_location.png 0 → 100644

5.19 KB

moudle_pedometer/src/main/res/drawable-hdpi/rt_ic_location.webp deleted 100644 → 0
No preview for this file type
moudle_pedometer/src/main/res/drawable-hdpi/rt_training_gps_0.png 0 → 100644

414 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/rt_training_gps_1.png 0 → 100644

306 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/rt_training_gps_2.png 0 → 100644

440 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/rt_training_gps_3.png 0 → 100644

444 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/tc_bg_body_record_add_menu.9.png 0 → 100644

1.03 KB

moudle_pedometer/src/main/res/drawable-hdpi/white_shadow_bg.png 0 → 100644

6.33 KB

moudle_pedometer/src/main/res/drawable-xhdpi/circle_point_raduis.png 0 → 100644

3.11 KB

moudle_pedometer/src/main/res/drawable-xhdpi/circle_white_shadow_bg.png 0 → 100644

2.44 KB

moudle_pedometer/src/main/res/drawable-xhdpi/gps_tip_bg.png 0 → 100644

1.89 KB

moudle_pedometer/src/main/res/drawable-xhdpi/gps_white_shadow.png 0 → 100644

1.99 KB

moudle_pedometer/src/main/res/drawable-xhdpi/icon_end.png 0 → 100644

3.58 KB

moudle_pedometer/src/main/res/drawable-xhdpi/icon_start.png 0 → 100644

3.73 KB

moudle_pedometer/src/main/res/drawable-xhdpi/rt_ic_location.png 0 → 100644

5.19 KB

moudle_pedometer/src/main/res/drawable-xhdpi/rt_training_gps_0.png 0 → 100644

146 Bytes

moudle_pedometer/src/main/res/drawable-xhdpi/rt_training_gps_1.png 0 → 100644

133 Bytes

moudle_pedometer/src/main/res/drawable-xhdpi/rt_training_gps_2.png 0 → 100644

212 Bytes

moudle_pedometer/src/main/res/drawable-xhdpi/rt_training_gps_3.png 0 → 100644

188 Bytes

moudle_pedometer/src/main/res/drawable-xhdpi/white_shadow_bg.png 0 → 100644

9.53 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/circle_point_raduis.png 0 → 100644

6.3 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/circle_white_shadow_bg.png 0 → 100644

4.66 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/gps_tip_bg.png 0 → 100644

3.54 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/gps_white_shadow.png 0 → 100644

3.79 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/icon_end.png 0 → 100644

6.98 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/icon_start.png 0 → 100644

7.3 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/rt_ic_location.png 0 → 100644

5.19 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/rt_training_gps_0.png 0 → 100644

501 Bytes

moudle_pedometer/src/main/res/drawable-xxhdpi/rt_training_gps_1.png 0 → 100644

384 Bytes

moudle_pedometer/src/main/res/drawable-xxhdpi/rt_training_gps_2.png 0 → 100644

723 Bytes

moudle_pedometer/src/main/res/drawable-xxhdpi/rt_training_gps_3.png 0 → 100644

636 Bytes

moudle_pedometer/src/main/res/drawable-xxhdpi/white_shadow_bg.png 0 → 100644

18.7 KB

moudle_pedometer/src/main/res/drawable/layer_gps_shadow.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <!--边-->
  5 + <item>
  6 + <shape android:shape="rectangle">
  7 + <padding
  8 + android:bottom="3px"
  9 + android:left="2px"
  10 + android:right="2px"
  11 + android:top="2px" />
  12 +
  13 + <solid android:color="#00eeeeee" />
  14 +
  15 + <corners android:radius="50dp" />
  16 + </shape>
  17 + </item>
  18 + <item>
  19 + <shape android:shape="rectangle">
  20 + <padding
  21 + android:bottom="3px"
  22 + android:left="2px"
  23 + android:right="2px"
  24 + android:top="2px" />
  25 +
  26 + <solid android:color="#0Deeeeee" />
  27 +
  28 + <corners android:radius="50dp" />
  29 + </shape>
  30 + </item>
  31 + <item>
  32 + <shape android:shape="rectangle">
  33 + <padding
  34 + android:bottom="3px"
  35 + android:left="2px"
  36 + android:right="2px"
  37 + android:top="2px" />
  38 + <solid android:color="#0D4F4F4F" />
  39 + <corners android:radius="50dp" />
  40 + </shape>
  41 + </item>
  42 + <item>
  43 + <shape android:shape="rectangle">
  44 + <padding
  45 + android:bottom="3px"
  46 + android:left="2px"
  47 + android:right="2px"
  48 + android:top="2px" />
  49 + <solid android:color="#0D4F4F4F" />
  50 + <corners android:radius="50dp" />
  51 + </shape>
  52 + </item>
  53 + <item>
  54 + <shape android:shape="rectangle">
  55 + <padding
  56 + android:bottom="3px"
  57 + android:left="2px"
  58 + android:right="2px"
  59 + android:top="2px" />
  60 + <solid android:color="#1A4F4F4F" />
  61 + <corners android:radius="50dp" />
  62 + </shape>
  63 + </item>
  64 +
  65 + <!--中心背景 -->
  66 + <item>
  67 + <shape
  68 + android:shape="rectangle"
  69 + android:useLevel="false">
  70 + <!--实心 -->
  71 + <solid android:color="@color/white" />
  72 + <corners android:radius="50dp" />
  73 + <size
  74 + android:width="32dp"
  75 + android:height="32dp" />
  76 +
  77 + </shape>
  78 + </item>
  79 +
  80 +</layer-list>
0 \ No newline at end of file 81 \ No newline at end of file
moudle_pedometer/src/main/res/drawable/layer_shadow.xml
@@ -5,64 +5,64 @@ @@ -5,64 +5,64 @@
5 <item> 5 <item>
6 <shape android:shape="rectangle"> 6 <shape android:shape="rectangle">
7 <padding 7 <padding
8 - android:bottom="7px"  
9 - android:left="7px"  
10 - android:right="7px"  
11 - android:top="5px" />  
12 -  
13 - <solid android:color="#00eeeeee" />  
14 - 8 + android:bottom="6px"
  9 + android:left="3px"
  10 + android:right="3px"
  11 + android:top="3px" />
  12 + <solid android:color="#0DF8F8FF" />
15 <corners android:radius="5dp" /> 13 <corners android:radius="5dp" />
16 </shape> 14 </shape>
17 </item> 15 </item>
18 <item> 16 <item>
19 <shape android:shape="rectangle"> 17 <shape android:shape="rectangle">
20 <padding 18 <padding
21 - android:bottom="7px"  
22 - android:left="7px"  
23 - android:right="7px"  
24 - android:top="5px" />  
25 -  
26 - <solid android:color="#0Deeeeee" />  
27 - 19 + android:bottom="6px"
  20 + android:left="3px"
  21 + android:right="3px"
  22 + android:top="3px" />
  23 + <solid android:color="#0DE8E8E8" />
28 <corners android:radius="5dp" /> 24 <corners android:radius="5dp" />
29 </shape> 25 </shape>
30 </item> 26 </item>
31 <item> 27 <item>
32 <shape android:shape="rectangle"> 28 <shape android:shape="rectangle">
33 <padding 29 <padding
34 - android:bottom="7px"  
35 - android:left="7px"  
36 - android:right="7px"  
37 - android:top="5px" />  
38 - <solid android:color="#0Deeeeee" /> 30 + android:bottom="6px"
  31 + android:left="3px"
  32 + android:right="3px"
  33 + android:top="3px" />
  34 + <solid android:color="#0DCFCFCF" />
  35 +
39 <corners android:radius="5dp" /> 36 <corners android:radius="5dp" />
40 </shape> 37 </shape>
41 </item> 38 </item>
42 <item> 39 <item>
43 <shape android:shape="rectangle"> 40 <shape android:shape="rectangle">
44 <padding 41 <padding
45 - android:bottom="7px"  
46 - android:left="7px"  
47 - android:right="7px"  
48 - android:top="5px" />  
49 - <solid android:color="#0Deeeeee" /> 42 + android:bottom="6px"
  43 + android:left="3px"
  44 + android:right="3px"
  45 + android:top="3px" />
  46 + <solid android:color="#0DB5B5B5" />
50 <corners android:radius="5dp" /> 47 <corners android:radius="5dp" />
51 </shape> 48 </shape>
52 </item> 49 </item>
53 <item> 50 <item>
54 <shape android:shape="rectangle"> 51 <shape android:shape="rectangle">
55 <padding 52 <padding
56 - android:bottom="7px"  
57 - android:left="7px"  
58 - android:right="7px"  
59 - android:top="5px" /> 53 + android:bottom="6px"
  54 + android:left="3px"
  55 + android:right="3px"
  56 + android:top="3px" />
  57 +
  58 + <solid android:color="#0D9C9C9C" />
60 59
61 - <solid android:color="#0Deeeeee" />  
62 <corners android:radius="5dp" /> 60 <corners android:radius="5dp" />
63 </shape> 61 </shape>
64 </item> 62 </item>
65 63
  64 +
  65 +
66 <!--中心背景 --> 66 <!--中心背景 -->
67 <item> 67 <item>
68 <shape 68 <shape
moudle_pedometer/src/main/res/drawable/shape_30dp_white_raduis_bg.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <solid android:color="@color/white" />
  4 + <corners android:radius="50dp" />
  5 +</shape>
0 \ No newline at end of file 6 \ No newline at end of file
moudle_pedometer/src/main/res/drawable/shape_circle_green_25.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <corners android:radius="100dp" />
  4 + <solid android:color="@color/green_25" />
  5 +</shape>
0 \ No newline at end of file 6 \ No newline at end of file
moudle_pedometer/src/main/res/layout/fragment_run_main.xml
@@ -79,24 +79,47 @@ @@ -79,24 +79,47 @@
79 android:textSize="18sp" 79 android:textSize="18sp"
80 android:textStyle="bold" /> 80 android:textStyle="bold" />
81 81
  82 + <ImageView
  83 + android:id="@+id/iv_gps"
  84 + android:layout_width="18dp"
  85 + android:layout_height="5dp"
  86 + android:layout_centerVertical="true"
  87 + android:layout_marginLeft="5dp"
  88 + android:layout_toRightOf="@id/tv_gps"
  89 + />
  90 +
82 <TextView 91 <TextView
83 android:id="@+id/tv_look_trace" 92 android:id="@+id/tv_look_trace"
84 android:layout_width="wrap_content" 93 android:layout_width="wrap_content"
85 android:layout_height="wrap_content" 94 android:layout_height="wrap_content"
86 android:layout_centerVertical="true" 95 android:layout_centerVertical="true"
87 - android:layout_marginLeft="15dp"  
88 - android:layout_toRightOf="@id/tv_gps"  
89 - android:text="(点击查看轨迹)"  
90 - android:textColor="@color/text_gray" 96 + android:layout_marginLeft="5dp"
  97 + android:layout_toRightOf="@id/iv_gps"
  98 + android:textColor="@color/text_gray99"
91 android:textSize="12sp" 99 android:textSize="12sp"
92 android:textStyle="bold" /> 100 android:textStyle="bold" />
93 101
94 - <ImageView  
95 - android:layout_width="55dp"  
96 - android:layout_height="55dp" 102 + <LinearLayout
  103 + android:layout_width="wrap_content"
  104 + android:layout_height="wrap_content"
97 android:layout_alignParentRight="true" 105 android:layout_alignParentRight="true"
98 android:layout_marginRight="15dp" 106 android:layout_marginRight="15dp"
99 - android:src="@drawable/rt_ic_home_map" /> 107 + android:gravity="center"
  108 + android:orientation="vertical">
  109 +
  110 + <ImageView
  111 + android:layout_width="55dp"
  112 + android:layout_height="55dp"
  113 + android:src="@drawable/rt_ic_home_map" />
  114 +
  115 + <TextView
  116 + android:layout_width="wrap_content"
  117 + android:layout_height="wrap_content"
  118 + android:layout_marginTop="5dp"
  119 + android:text="点击查看轨迹"
  120 + android:textColor="@color/text_gray99"
  121 + android:textSize="10sp" />
  122 + </LinearLayout>
100 </RelativeLayout> 123 </RelativeLayout>
101 <!--计时--> 124 <!--计时-->
102 <LinearLayout 125 <LinearLayout
@@ -139,9 +162,9 @@ @@ -139,9 +162,9 @@
139 android:layout_marginTop="5dp" 162 android:layout_marginTop="5dp"
140 android:gravity="center" 163 android:gravity="center"
141 android:text="配速" 164 android:text="配速"
142 - android:textColor="@color/text_gray" 165 + android:textColor="@color/text_gray99"
143 android:textSize="15sp" 166 android:textSize="15sp"
144 - android:textStyle="bold" /> 167 + />
145 </LinearLayout> 168 </LinearLayout>
146 <!--用时--> 169 <!--用时-->
147 <LinearLayout 170 <LinearLayout
@@ -172,9 +195,9 @@ @@ -172,9 +195,9 @@
172 android:layout_marginTop="5dp" 195 android:layout_marginTop="5dp"
173 android:gravity="center" 196 android:gravity="center"
174 android:text="用时" 197 android:text="用时"
175 - android:textColor="@color/text_gray" 198 + android:textColor="@color/text_gray99"
176 android:textSize="15sp" 199 android:textSize="15sp"
177 - android:textStyle="bold" /> 200 + />
178 </LinearLayout> 201 </LinearLayout>
179 <!--热量--> 202 <!--热量-->
180 <LinearLayout 203 <LinearLayout
@@ -206,9 +229,9 @@ @@ -206,9 +229,9 @@
206 android:layout_marginTop="5dp" 229 android:layout_marginTop="5dp"
207 android:gravity="center" 230 android:gravity="center"
208 android:text="步" 231 android:text="步"
209 - android:textColor="@color/text_gray" 232 + android:textColor="@color/text_gray99"
210 android:textSize="15sp" 233 android:textSize="15sp"
211 - android:textStyle="bold" /> 234 + />
212 </LinearLayout> 235 </LinearLayout>
213 </LinearLayout> 236 </LinearLayout>
214 237
moudle_pedometer/src/main/res/layout/fragment_running_map.xml
@@ -11,11 +11,21 @@ @@ -11,11 +11,21 @@
11 android:layout_width="match_parent" 11 android:layout_width="match_parent"
12 android:layout_height="match_parent"></com.baidu.mapapi.map.MapView> 12 android:layout_height="match_parent"></com.baidu.mapapi.map.MapView>
13 13
  14 + <!--地图上面加一层类似于全透明黑色蒙版-->
  15 + <LinearLayout
  16 + android:layout_width="match_parent"
  17 + android:layout_height="match_parent"
  18 + android:background="#0D000000"
  19 + android:clickable="false"
  20 + android:focusable="false"
  21 + android:focusableInTouchMode="false"></LinearLayout>
  22 +
14 <FrameLayout 23 <FrameLayout
15 android:id="@+id/fl_back" 24 android:id="@+id/fl_back"
16 - android:layout_width="55dp"  
17 - android:layout_height="55dp"  
18 - android:background="@drawable/button_fab_white" 25 + android:layout_width="40dp"
  26 + android:layout_height="40dp"
  27 + android:layout_margin="10dp"
  28 + android:background="@drawable/circle_white_shadow_bg"
19 android:focusable="true"> 29 android:focusable="true">
20 30
21 <ImageView 31 <ImageView
@@ -23,11 +33,59 @@ @@ -23,11 +33,59 @@
23 android:layout_height="20dp" 33 android:layout_height="20dp"
24 android:layout_gravity="center" 34 android:layout_gravity="center"
25 android:layout_marginLeft="-2dp" 35 android:layout_marginLeft="-2dp"
  36 + android:layout_marginBottom="3dp"
26 android:background="@drawable/icon_back" 37 android:background="@drawable/icon_back"
27 android:focusable="false" /> 38 android:focusable="false" />
28 </FrameLayout> 39 </FrameLayout>
29 40
30 <LinearLayout 41 <LinearLayout
  42 + android:layout_width="wrap_content"
  43 + android:layout_height="wrap_content"
  44 + android:layout_gravity="top|right"
  45 + android:layout_marginTop="15dp"
  46 + android:layout_marginRight="10dp"
  47 + android:orientation="vertical">
  48 +
  49 + <LinearLayout
  50 + android:layout_width="80dp"
  51 + android:layout_height="35dp"
  52 + android:layout_gravity="right"
  53 + android:background="@drawable/gps_white_shadow"
  54 + android:gravity="center">
  55 +
  56 + <TextView
  57 + android:layout_width="wrap_content"
  58 + android:layout_height="wrap_content"
  59 + android:layout_marginBottom="3dp"
  60 + android:text="GPS"
  61 + android:textColor="@color/text_black"
  62 + android:textSize="12sp"
  63 + android:textStyle="bold" />
  64 +
  65 + <ImageView
  66 + android:id="@+id/iv_gps_state"
  67 + android:layout_width="18dp"
  68 + android:layout_height="5dp"
  69 + android:layout_marginLeft="5dp"
  70 + android:layout_marginBottom="3dp" />
  71 + </LinearLayout>
  72 + <!---->
  73 + <TextView
  74 + android:id="@+id/tv_gps_pop_bg"
  75 + android:layout_width="wrap_content"
  76 + android:layout_height="45dp"
  77 + android:layout_marginTop="-5dp"
  78 + android:background="@drawable/gps_tip_bg"
  79 + android:gravity="center"
  80 + android:paddingLeft="15dp"
  81 + android:paddingRight="15dp"
  82 + android:textColor="@color/text_black"
  83 + android:textSize="12sp"
  84 + android:visibility="gone"/>
  85 + <!---->
  86 + </LinearLayout>
  87 +
  88 + <LinearLayout
31 android:layout_width="match_parent" 89 android:layout_width="match_parent"
32 android:layout_height="wrap_content" 90 android:layout_height="wrap_content"
33 android:layout_gravity="bottom" 91 android:layout_gravity="bottom"
@@ -35,32 +93,33 @@ @@ -35,32 +93,33 @@
35 93
36 <FrameLayout 94 <FrameLayout
37 android:id="@+id/fl_location" 95 android:id="@+id/fl_location"
38 - android:layout_width="55dp"  
39 - android:layout_height="55dp" 96 + android:layout_width="40dp"
  97 + android:layout_height="40dp"
  98 + android:layout_marginLeft="10dp"
40 android:layout_marginBottom="20dp" 99 android:layout_marginBottom="20dp"
41 - android:background="@drawable/button_fab_white" 100 + android:background="@drawable/circle_white_shadow_bg"
42 android:focusable="true"> 101 android:focusable="true">
43 102
44 <ImageView 103 <ImageView
45 android:layout_width="20dp" 104 android:layout_width="20dp"
46 android:layout_height="20dp" 105 android:layout_height="20dp"
47 android:layout_gravity="center" 106 android:layout_gravity="center"
  107 + android:layout_marginBottom="3dp"
48 android:background="@drawable/rt_ic_location_blank" 108 android:background="@drawable/rt_ic_location_blank"
49 android:focusable="false" /> 109 android:focusable="false" />
50 </FrameLayout> 110 </FrameLayout>
51 111
52 <LinearLayout 112 <LinearLayout
53 android:layout_width="match_parent" 113 android:layout_width="match_parent"
54 - android:layout_height="100dp"  
55 - android:layout_marginLeft="10dp"  
56 - android:layout_marginRight="10dp"  
57 - android:layout_marginBottom="20dp"  
58 - android:background="@drawable/shape_10dp_white_raduis_bg"> 114 + android:layout_height="130dp"
  115 + android:layout_marginBottom="10dp"
  116 + android:background="@drawable/white_shadow_bg"
  117 + android:scaleX="1.02">
59 118
60 <LinearLayout 119 <LinearLayout
61 android:layout_width="0dp" 120 android:layout_width="0dp"
62 android:layout_height="match_parent" 121 android:layout_height="match_parent"
63 - android:layout_weight="1" 122 + android:layout_weight="1.2"
64 android:gravity="center" 123 android:gravity="center"
65 android:orientation="vertical" 124 android:orientation="vertical"
66 android:paddingLeft="5dp" 125 android:paddingLeft="5dp"
@@ -87,7 +146,7 @@ @@ -87,7 +146,7 @@
87 <LinearLayout 146 <LinearLayout
88 android:layout_width="0dp" 147 android:layout_width="0dp"
89 android:layout_height="match_parent" 148 android:layout_height="match_parent"
90 - android:layout_weight="1.5" 149 + android:layout_weight="1.2"
91 android:gravity="center" 150 android:gravity="center"
92 android:orientation="vertical"> 151 android:orientation="vertical">
93 152
moudle_pedometer/src/main/res/layout/layout_run_detail_person_score.xml
@@ -7,11 +7,12 @@ @@ -7,11 +7,12 @@
7 <LinearLayout 7 <LinearLayout
8 android:layout_width="match_parent" 8 android:layout_width="match_parent"
9 android:layout_height="180dp" 9 android:layout_height="180dp"
10 - android:layout_marginLeft="1dp"  
11 - android:layout_marginRight="1dp"  
12 - android:layout_marginBottom="5dp"  
13 - android:background="@drawable/layer_shadow"  
14 - android:orientation="vertical"> 10 + android:background="@drawable/white_shadow_bg"
  11 + android:orientation="vertical"
  12 + android:paddingLeft="15dp"
  13 + android:paddingTop="5dp"
  14 + android:paddingRight="15dp"
  15 + android:paddingBottom="15dp">
15 16
16 <LinearLayout 17 <LinearLayout
17 android:layout_width="match_parent" 18 android:layout_width="match_parent"
moudle_pedometer/src/main/res/layout/layout_run_detail_rank.xml
@@ -11,11 +11,11 @@ @@ -11,11 +11,11 @@
11 <LinearLayout 11 <LinearLayout
12 android:layout_width="match_parent" 12 android:layout_width="match_parent"
13 android:layout_height="150dp" 13 android:layout_height="150dp"
14 - android:layout_marginLeft="1dp"  
15 - android:layout_marginTop="10dp"  
16 - android:layout_marginRight="1dp"  
17 - android:layout_marginBottom="15dp"  
18 - android:background="@drawable/layer_shadow" 14 + android:paddingLeft="15dp"
  15 + android:paddingTop="5dp"
  16 + android:paddingRight="15dp"
  17 + android:paddingBottom="15dp"
  18 + android:background="@drawable/white_shadow_bg"
19 android:orientation="vertical"> 19 android:orientation="vertical">
20 20
21 <LinearLayout 21 <LinearLayout
moudle_pedometer/src/main/res/values/colors.xml
@@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
3 <color name="run_main_bg">#3D3745</color> 3 <color name="run_main_bg">#3D3745</color>
4 <color name="run_main_time_bg">#5BC4A4</color> 4 <color name="run_main_time_bg">#5BC4A4</color>
5 <color name="text_gray">#666666</color> 5 <color name="text_gray">#666666</color>
  6 + <color name="text_gray99">#999999</color>
  7 +
6 <color name="green_round">#5BC4A4</color> 8 <color name="green_round">#5BC4A4</color>
7 <color name="red_round">#F97070</color> 9 <color name="red_round">#F97070</color>
8 <color name="gray_round">#D6D6D6</color> 10 <color name="gray_round">#D6D6D6</color>
@@ -22,6 +24,8 @@ @@ -22,6 +24,8 @@
22 24
23 <color name="green">#23D026</color> 25 <color name="green">#23D026</color>
24 <color name="green_50">#8023D026</color> 26 <color name="green_50">#8023D026</color>
  27 + <color name="green_25">#4023D41E</color>
  28 +
25 29
26 <color name="red">#EF5544</color> 30 <color name="red">#EF5544</color>
27 <color name="bg">#012648</color> 31 <color name="bg">#012648</color>
moudle_pedometer/src/main/res/values/strings.xml
@@ -63,5 +63,9 @@ @@ -63,5 +63,9 @@
63 <string name="all_time">累计用时</string> 63 <string name="all_time">累计用时</string>
64 <string name="has_take_part_line">我跑过的线路</string> 64 <string name="has_take_part_line">我跑过的线路</string>
65 <string name="chek_all_line">查看全部路线</string> 65 <string name="chek_all_line">查看全部路线</string>
  66 + <string name="loc_gps_accuracy_unknown">无信号,无法进行数据记录</string>
  67 + <string name="loc_gps_accuracy_bad">信号糟糕,数据准确度低</string>
  68 + <string name="loc_gps_accuracy_mid">GPS信号质量中等</string>
  69 + <string name="loc_gps_accuracy_good">GPS信号质量好</string>
66 <!----> 70 <!---->
67 </resources> 71 </resources>