Commit f561e9e0382d9fad42ec92219d338dd74bf497dc
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
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<RunMainFragmentView, RunMainFr | @@ -68,6 +68,9 @@ public class RunMainFragment extends QMUIFragment<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<RunningMapFragmentView, Run | @@ -49,7 +50,7 @@ public class RunningMapFragment extends QMUIFragment<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<RunningMapFragmentView, Run | @@ -107,7 +108,7 @@ public class RunningMapFragment extends QMUIFragment<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<RunningMapFragmentView, Run | @@ -179,6 +180,7 @@ public class RunningMapFragment extends QMUIFragment<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
moudle_pedometer/src/main/res/drawable-hdpi/icon_start.png
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
moudle_pedometer/src/main/res/drawable/shape_circle_green_25.xml
0 → 100644
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> |