Commit 54e1430c9a9ac12a4e6b41ab95efaeff3a151454
Merge branch 'master' of bj.gitlab.cnlive.com:cnlive-team/ModulePedometer
Showing
24 changed files
with
872 additions
and
324 deletions
.idea/gradle.xml
| ... | ... | @@ -9,8 +9,11 @@ |
| 9 | 9 | <set> |
| 10 | 10 | <option value="$PROJECT_DIR$" /> |
| 11 | 11 | <option value="$PROJECT_DIR$/app" /> |
| 12 | + <option value="$PROJECT_DIR$/app_user" /> | |
| 13 | + <option value="$PROJECT_DIR$/lib_network" /> | |
| 12 | 14 | <option value="$PROJECT_DIR$/library_baidumap" /> |
| 13 | 15 | <option value="$PROJECT_DIR$/moudle_pedometer" /> |
| 16 | + <option value="$PROJECT_DIR$/share" /> | |
| 14 | 17 | </set> |
| 15 | 18 | </option> |
| 16 | 19 | <option name="resolveModulePerSourceSet" value="false" /> | ... | ... |
lib_network/src/main/java/com/cnlive/strike/data/network/api/ApiServiceDaren.java
| ... | ... | @@ -10,6 +10,7 @@ import com.cnlive.strike.data.network.model.GifListData; |
| 10 | 10 | import com.cnlive.strike.data.network.model.RaceRecordInfo; |
| 11 | 11 | import com.cnlive.strike.data.network.model.ShortLinkInfo; |
| 12 | 12 | import com.cnlive.strike.data.network.model.TakePartPeopleInfo; |
| 13 | +import com.cnlive.strike.data.network.model.runAbout.RunRaceDetailInfo; | |
| 13 | 14 | |
| 14 | 15 | import java.util.List; |
| 15 | 16 | import java.util.Map; |
| ... | ... | @@ -18,6 +19,7 @@ import io.reactivex.Observable; |
| 18 | 19 | import okhttp3.MultipartBody; |
| 19 | 20 | import okhttp3.RequestBody; |
| 20 | 21 | import retrofit2.adapter.rxjava2.Result; |
| 22 | +import retrofit2.http.GET; | |
| 21 | 23 | import retrofit2.http.Multipart; |
| 22 | 24 | import retrofit2.http.POST; |
| 23 | 25 | import retrofit2.http.Part; |
| ... | ... | @@ -106,5 +108,15 @@ public interface ApiServiceDaren { |
| 106 | 108 | */ |
| 107 | 109 | @POST("Daren/event/getByEventGetRecord.action") |
| 108 | 110 | Observable<Result<BaseInfo<RaceRecordInfo>>> getAllRaceRecordInfo(@QueryMap() Map<String, String> maps); |
| 111 | + /************************************体育中国跑步相关网络接口**********************************************************/ | |
| 112 | + /** | |
| 113 | + * http://bj.gitlab.cnlive.com/cnlive/BOSS-Wiki/wikis/getEventDetails | |
| 114 | + * 线下约跑赛事详情页 | |
| 115 | + * 杨帅 | |
| 116 | + * id int true 赛事id | |
| 117 | + * sid String true 用户sid | |
| 118 | + */ | |
| 119 | + @GET("Daren/event/getEventDetails.action") | |
| 120 | + Observable<Result<BaseInfo<RunRaceDetailInfo>>> getRunRaceDetail(@QueryMap Map<String, String> map); | |
| 109 | 121 | } |
| 110 | 122 | ... | ... |
lib_network/src/main/java/com/cnlive/strike/data/network/model/runAbout/RunRaceDetailInfo.java
0 → 100644
| 1 | +package com.cnlive.strike.data.network.model.runAbout; | |
| 2 | + | |
| 3 | +import java.util.List; | |
| 4 | + | |
| 5 | +/** | |
| 6 | + * 线下约跑赛事详情页 | |
| 7 | + * | |
| 8 | + * @author ShinnyYang | |
| 9 | + */ | |
| 10 | +public class RunRaceDetailInfo { | |
| 11 | + | |
| 12 | + /** | |
| 13 | + * address : 澳大利亚黄金海岸 | |
| 14 | + * employTime : 00:0:30 | |
| 15 | + * endLocation : 首都师范大学操场西门 | |
| 16 | + * end_time : 1571140800000 | |
| 17 | + * faceUrl : ["http://yweb0.cnliveimg.com/images/headImg/2019/0505/1557039035723_small.jpg","http://yweb0.cnliveimg.com/images/headImg/2019/0505/1557034319038_small.jpg","http://yweb0.cnliveimg.com/images/headImg/2018/0902/1535858459612_small.jpg"] | |
| 18 | + * finishFaceUrl : ["http://yweb0.cnliveimg.com/images/headImg/2019/0505/1557039035723_small.jpg","http://yweb0.cnliveimg.com/images/headImg/2019/0523/1558599016203_small.jpg","http://yweb0.cnliveimg.com/images/headImg/2019/0523/1558599016203_small.jpg","http://yweb0.cnliveimg.com/images/headImg/2019/0523/1558599016203_small.jpg","http://yweb0.cnliveimg.com/images/headImg/2019/0523/1558599016203_small.jpg"] | |
| 19 | + * firstEmployTime : 33 | |
| 20 | + * firstFaceUrl : http://yweb0.cnliveimg.com/images/headImg/2019/0523/1558599016203_small.jpg | |
| 21 | + * firstName : 峨眉派掌门候选人 | |
| 22 | + * id : 116 | |
| 23 | + * latLongitude : ["39.74788,116.14294","39.74888,116.14394"] | |
| 24 | + * mileage : 全长4.42公里 | |
| 25 | + * pace : 22.33 | |
| 26 | + * roadmap : http://yweb0.cnliveimg.com/images/headImg/2019/051 | |
| 27 | + * sign_up_end_time : 1521043200000 | |
| 28 | + * sign_up_start_time : 1509494400000 | |
| 29 | + * signupNum : 3 | |
| 30 | + * startLocation : 首都师范大学操场东门 | |
| 31 | + * start_time : 1522454400000 | |
| 32 | + * step : 10000 | |
| 33 | + * title : 2018国际网络徒步大赛黄金海岸站 | |
| 34 | + * userMileage : 5.5 | |
| 35 | + */ | |
| 36 | + | |
| 37 | + private String address; | |
| 38 | + private String employTime; | |
| 39 | + private String endLocation; | |
| 40 | + private long end_time; | |
| 41 | + private String firstEmployTime; | |
| 42 | + private String firstFaceUrl; | |
| 43 | + private String firstName; | |
| 44 | + private int id; | |
| 45 | + private String latLongitude; | |
| 46 | + private String mileage; | |
| 47 | + private String pace; | |
| 48 | + private String roadmap; | |
| 49 | + private long sign_up_end_time; | |
| 50 | + private long sign_up_start_time; | |
| 51 | + private int signupNum; | |
| 52 | + private String startLocation; | |
| 53 | + private long start_time; | |
| 54 | + private String step; | |
| 55 | + private String title; | |
| 56 | + private String userMileage; | |
| 57 | + private List<String> faceUrl; | |
| 58 | + private List<String> finishFaceUrl; | |
| 59 | + | |
| 60 | + public String getAddress() { | |
| 61 | + return address; | |
| 62 | + } | |
| 63 | + | |
| 64 | + public void setAddress(String address) { | |
| 65 | + this.address = address; | |
| 66 | + } | |
| 67 | + | |
| 68 | + public String getEmployTime() { | |
| 69 | + return employTime; | |
| 70 | + } | |
| 71 | + | |
| 72 | + public void setEmployTime(String employTime) { | |
| 73 | + this.employTime = employTime; | |
| 74 | + } | |
| 75 | + | |
| 76 | + public String getEndLocation() { | |
| 77 | + return endLocation; | |
| 78 | + } | |
| 79 | + | |
| 80 | + public void setEndLocation(String endLocation) { | |
| 81 | + this.endLocation = endLocation; | |
| 82 | + } | |
| 83 | + | |
| 84 | + public long getEnd_time() { | |
| 85 | + return end_time; | |
| 86 | + } | |
| 87 | + | |
| 88 | + public void setEnd_time(long end_time) { | |
| 89 | + this.end_time = end_time; | |
| 90 | + } | |
| 91 | + | |
| 92 | + public String getFirstEmployTime() { | |
| 93 | + return firstEmployTime; | |
| 94 | + } | |
| 95 | + | |
| 96 | + public void setFirstEmployTime(String firstEmployTime) { | |
| 97 | + this.firstEmployTime = firstEmployTime; | |
| 98 | + } | |
| 99 | + | |
| 100 | + public String getFirstFaceUrl() { | |
| 101 | + return firstFaceUrl; | |
| 102 | + } | |
| 103 | + | |
| 104 | + public void setFirstFaceUrl(String firstFaceUrl) { | |
| 105 | + this.firstFaceUrl = firstFaceUrl; | |
| 106 | + } | |
| 107 | + | |
| 108 | + public String getFirstName() { | |
| 109 | + return firstName; | |
| 110 | + } | |
| 111 | + | |
| 112 | + public void setFirstName(String firstName) { | |
| 113 | + this.firstName = firstName; | |
| 114 | + } | |
| 115 | + | |
| 116 | + public int getId() { | |
| 117 | + return id; | |
| 118 | + } | |
| 119 | + | |
| 120 | + public void setId(int id) { | |
| 121 | + this.id = id; | |
| 122 | + } | |
| 123 | + | |
| 124 | + public String getLatLongitude() { | |
| 125 | + return latLongitude; | |
| 126 | + } | |
| 127 | + | |
| 128 | + public void setLatLongitude(String latLongitude) { | |
| 129 | + this.latLongitude = latLongitude; | |
| 130 | + } | |
| 131 | + | |
| 132 | + public String getMileage() { | |
| 133 | + return mileage; | |
| 134 | + } | |
| 135 | + | |
| 136 | + public void setMileage(String mileage) { | |
| 137 | + this.mileage = mileage; | |
| 138 | + } | |
| 139 | + | |
| 140 | + public String getPace() { | |
| 141 | + return pace; | |
| 142 | + } | |
| 143 | + | |
| 144 | + public void setPace(String pace) { | |
| 145 | + this.pace = pace; | |
| 146 | + } | |
| 147 | + | |
| 148 | + public String getRoadmap() { | |
| 149 | + return roadmap; | |
| 150 | + } | |
| 151 | + | |
| 152 | + public void setRoadmap(String roadmap) { | |
| 153 | + this.roadmap = roadmap; | |
| 154 | + } | |
| 155 | + | |
| 156 | + public long getSign_up_end_time() { | |
| 157 | + return sign_up_end_time; | |
| 158 | + } | |
| 159 | + | |
| 160 | + public void setSign_up_end_time(long sign_up_end_time) { | |
| 161 | + this.sign_up_end_time = sign_up_end_time; | |
| 162 | + } | |
| 163 | + | |
| 164 | + public long getSign_up_start_time() { | |
| 165 | + return sign_up_start_time; | |
| 166 | + } | |
| 167 | + | |
| 168 | + public void setSign_up_start_time(long sign_up_start_time) { | |
| 169 | + this.sign_up_start_time = sign_up_start_time; | |
| 170 | + } | |
| 171 | + | |
| 172 | + public int getSignupNum() { | |
| 173 | + return signupNum; | |
| 174 | + } | |
| 175 | + | |
| 176 | + public void setSignupNum(int signupNum) { | |
| 177 | + this.signupNum = signupNum; | |
| 178 | + } | |
| 179 | + | |
| 180 | + public String getStartLocation() { | |
| 181 | + return startLocation; | |
| 182 | + } | |
| 183 | + | |
| 184 | + public void setStartLocation(String startLocation) { | |
| 185 | + this.startLocation = startLocation; | |
| 186 | + } | |
| 187 | + | |
| 188 | + public long getStart_time() { | |
| 189 | + return start_time; | |
| 190 | + } | |
| 191 | + | |
| 192 | + public void setStart_time(long start_time) { | |
| 193 | + this.start_time = start_time; | |
| 194 | + } | |
| 195 | + | |
| 196 | + public String getStep() { | |
| 197 | + return step; | |
| 198 | + } | |
| 199 | + | |
| 200 | + public void setStep(String step) { | |
| 201 | + this.step = step; | |
| 202 | + } | |
| 203 | + | |
| 204 | + public String getTitle() { | |
| 205 | + return title; | |
| 206 | + } | |
| 207 | + | |
| 208 | + public void setTitle(String title) { | |
| 209 | + this.title = title; | |
| 210 | + } | |
| 211 | + | |
| 212 | + public String getUserMileage() { | |
| 213 | + return userMileage; | |
| 214 | + } | |
| 215 | + | |
| 216 | + public void setUserMileage(String userMileage) { | |
| 217 | + this.userMileage = userMileage; | |
| 218 | + } | |
| 219 | + | |
| 220 | + public List<String> getFaceUrl() { | |
| 221 | + return faceUrl; | |
| 222 | + } | |
| 223 | + | |
| 224 | + public void setFaceUrl(List<String> faceUrl) { | |
| 225 | + this.faceUrl = faceUrl; | |
| 226 | + } | |
| 227 | + | |
| 228 | + public List<String> getFinishFaceUrl() { | |
| 229 | + return finishFaceUrl; | |
| 230 | + } | |
| 231 | + | |
| 232 | + public void setFinishFaceUrl(List<String> finishFaceUrl) { | |
| 233 | + this.finishFaceUrl = finishFaceUrl; | |
| 234 | + } | |
| 235 | +} | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/RunRaceDetailFragmentPresenter.java
| 1 | 1 | package com.cnlive.moudle.pedometer.frame.presenter; |
| 2 | 2 | |
| 3 | +import android.content.Context; | |
| 4 | + | |
| 5 | +import com.cnlive.libs.base.logic.Logic; | |
| 6 | +import com.cnlive.libs.base.logic.callback.FailureCallback; | |
| 7 | +import com.cnlive.libs.data.network.model.IBaseInfo; | |
| 3 | 8 | import com.cnlive.moudle.pedometer.frame.view.RunRaceDetailFragmentView; |
| 4 | 9 | import com.cnlive.moudle.pedometer.frame.view.RunningMapFragmentView; |
| 5 | 10 | import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter; |
| 6 | 11 | |
| 12 | +import java.util.HashMap; | |
| 13 | +import java.util.Map; | |
| 14 | + | |
| 15 | +import io.reactivex.disposables.Disposable; | |
| 16 | + | |
| 7 | 17 | public class RunRaceDetailFragmentPresenter extends MvpBasePresenter<RunRaceDetailFragmentView> { |
| 18 | + | |
| 19 | + public void getRunRaceDetailInfo(Context context, String id, String userId) { | |
| 20 | + //设置请求参数 | |
| 21 | + Map<String, String> paramsMap = new HashMap<>(); | |
| 22 | + //赛事id | |
| 23 | + paramsMap.put("id", id); | |
| 24 | + paramsMap.put("userId", userId); | |
| 25 | + | |
| 26 | +// Logic.create(paramsMap) | |
| 27 | +// .action(new Logic.Action<Map<String, String>, BaseInfo>() { | |
| 28 | +// @Override | |
| 29 | +// public Disposable action(Map<String, String> paramsMap, DataCallback<SubscriptionBaseInfo> dataCallback) { | |
| 30 | +// return SubscriptionRequest.service(ApiServiceInterest.class, api -> api.userFollowAddGroup(paramsMap)).subscribe(context, dataCallback); | |
| 31 | +// } | |
| 32 | +// }).<SubscriptionBaseInfo>event() | |
| 33 | +// .setSuccessCallback(new SuccessCallback<SubscriptionBaseInfo>() { | |
| 34 | +// @Override | |
| 35 | +// public void onSuccess(SubscriptionBaseInfo subscriptionBaseInfo) { | |
| 36 | +// if (getView() != null) { | |
| 37 | +// getView().hideQmuiDialog(); | |
| 38 | +// } | |
| 39 | +// callBack.onSuccess(); | |
| 40 | +// } | |
| 41 | +// | |
| 42 | +// }) | |
| 43 | +// .setFailureCallback(new FailureCallback() { | |
| 44 | +// @Override | |
| 45 | +// public void onFailure(int i, String s) { | |
| 46 | +// if (getView() != null) { | |
| 47 | +// getView().hideQmuiDialog(); | |
| 48 | +// getView().showFailDailog("网络请求失败,请稍后重试", 2); | |
| 49 | +// if (!TextUtils.isEmpty(s)) { | |
| 50 | +// callBack.onFailed(s); | |
| 51 | +// } else { | |
| 52 | +// callBack.onFailed("接口请求失败,请重试!"); | |
| 53 | +// } | |
| 54 | +// } | |
| 55 | +// } | |
| 56 | +// }) | |
| 57 | +// | |
| 58 | +// .start(); | |
| 59 | + | |
| 60 | + } | |
| 8 | 61 | } | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/RunningMapFragmentPresenter.java
| ... | ... | @@ -12,6 +12,7 @@ import com.baidu.mapapi.map.MarkerOptions; |
| 12 | 12 | import com.baidu.mapapi.map.Overlay; |
| 13 | 13 | import com.baidu.mapapi.map.OverlayOptions; |
| 14 | 14 | import com.baidu.mapapi.model.LatLng; |
| 15 | +import com.baidu.mapapi.utils.DistanceUtil; | |
| 15 | 16 | import com.baidu.trace.api.entity.AddEntityResponse; |
| 16 | 17 | import com.baidu.trace.api.entity.AroundSearchResponse; |
| 17 | 18 | import com.baidu.trace.api.entity.BoundSearchResponse; |
| ... | ... | @@ -72,6 +73,7 @@ import com.example.moudle_pedometer.R; |
| 72 | 73 | import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter; |
| 73 | 74 | |
| 74 | 75 | import java.util.ArrayList; |
| 76 | +import java.util.HashMap; | |
| 75 | 77 | import java.util.List; |
| 76 | 78 | |
| 77 | 79 | public class RunningMapFragmentPresenter extends MvpBasePresenter<RunningMapFragmentView> { |
| ... | ... | @@ -105,7 +107,9 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter<RunningMapFrag |
| 105 | 107 | */ |
| 106 | 108 | private List<LatLng> trackPoints; |
| 107 | 109 | private List<LatLng> realTimePoints; |
| 108 | - | |
| 110 | + private String imports = "[{\"latitude\":39.93395837223,\"latitudeE6\":3.993395837223E7,\"longitude\":116.30855458458,\"longitudeE6\":1.1630855458457999E8},{\"latitude\":39.93396326228,\"latitudeE6\":3.993396326228E7,\"longitude\":116.30861833018,\"longitudeE6\":1.1630861833017999E8},{\"latitude\":39.934156956749995,\"latitudeE6\":3.993415695675E7,\"longitude\":116.30869672329999,\"longitudeE6\":1.163086967233E8},{\"latitude\":39.934220163784,\"latitudeE6\":3.9934220163784E7,\"longitude\":116.3087100148,\"longitudeE6\":1.163087100148E8},{\"latitude\":39.934285263072,\"latitudeE6\":3.9934285263072E7,\"longitude\":116.30866498582,\"longitudeE6\":1.1630866498582E8},{\"latitude\":39.934351994321,\"latitudeE6\":3.9934351994320996E7,\"longitude\":116.30865820422,\"longitudeE6\":1.1630865820422E8},{\"latitude\":39.934393506188,\"latitudeE6\":3.9934393506188005E7,\"longitude\":116.3087268324,\"longitudeE6\":1.163087268324E8},{\"latitude\":39.934515310648,\"latitudeE6\":3.9934515310648E7,\"longitude\":116.30877023341,\"longitudeE6\":1.1630877023341E8},{\"latitude\":39.934576888398,\"latitudeE6\":3.9934576888398E7,\"longitude\":116.30876860572,\"longitudeE6\":1.1630876860572E8},{\"latitude\":39.934641987882,\"latitudeE6\":3.9934641987882E7,\"longitude\":116.30872520428,\"longitudeE6\":1.1630872520427999E8},{\"latitude\":39.934720386354,\"latitudeE6\":3.9934720386354E7,\"longitude\":116.30874175083,\"longitudeE6\":1.1630874175083E8},{\"latitude\":39.934703845843,\"latitudeE6\":3.9934703845843E7,\"longitude\":116.30880197017,\"longitudeE6\":1.1630880197016999E8},{\"latitude\":39.934719055573,\"latitudeE6\":3.9934719055573E7,\"longitude\":116.30896553874,\"longitudeE6\":1.1630896553874E8},{\"latitude\":39.93482461107,\"latitudeE6\":3.993482461107E7,\"longitude\":116.30924466304002,\"longitudeE6\":1.1630924466304001E8},{\"latitude\":39.934804821527,\"latitudeE6\":3.9934804821527004E7,\"longitude\":116.30935804892,\"longitudeE6\":1.1630935804892E8},{\"latitude\":39.934856643274,\"latitudeE6\":3.9934856643274E7,\"longitude\":116.30943996874,\"longitudeE6\":1.1630943996874E8},{\"latitude\":39.934844987999,\"latitudeE6\":3.9934844987999E7,\"longitude\":116.30952026112,\"longitudeE6\":1.1630952026112E8},{\"latitude\":39.934722121282,\"latitudeE6\":3.9934722121282004E7,\"longitude\":116.30967542086,\"longitudeE6\":1.1630967542086E8},{\"latitude\":39.934828721701,\"latitudeE6\":3.9934828721701E7,\"longitude\":116.30960516489,\"longitudeE6\":1.1630960516489E8},{\"latitude\":39.934408798988,\"latitudeE6\":3.9934408798988E7,\"longitude\":116.30961357453,\"longitudeE6\":1.1630961357453E8},{\"latitude\":39.934345321571,\"latitudeE6\":3.9934345321571E7,\"longitude\":116.30960842073,\"longitudeE6\":1.1630960842073E8},{\"latitude\":39.93436159016,\"latitudeE6\":3.9934361590160005E7,\"longitude\":116.30954331882,\"longitudeE6\":1.1630954331882E8},{\"latitude\":39.934295133241,\"latitudeE6\":3.9934295133241E7,\"longitude\":116.30957668364,\"longitudeE6\":1.1630957668364E8},{\"latitude\":39.934188525341,\"latitudeE6\":3.9934188525341E7,\"longitude\":116.30958183769,\"longitudeE6\":1.1630958183769001E8},{\"latitude\":39.933976660469,\"latitudeE6\":3.9933976660469E7,\"longitude\":116.30954494693,\"longitudeE6\":1.1630954494693E8},{\"latitude\":39.933993190121,\"latitudeE6\":3.9933993190121E7,\"longitude\":116.30939114375,\"longitudeE6\":1.1630939114375001E8},{\"latitude\":39.933938115564,\"latitudeE6\":3.9933938115563996E7,\"longitude\":116.30932956832,\"longitudeE6\":1.1630932956831999E8},{\"latitude\":39.933916130555,\"latitudeE6\":3.9933916130555E7,\"longitude\":116.30922269279,\"longitudeE6\":1.1630922269279E8},{\"latitude\":39.933836097011,\"latitudeE6\":3.9933836097011E7,\"longitude\":116.30914077307,\"longitudeE6\":1.1630914077307E8}]\n"; | |
| 111 | + private HashMap<Integer, Boolean> importHash; | |
| 112 | + private static int matchIndex = 0; | |
| 109 | 113 | |
| 110 | 114 | /** |
| 111 | 115 | * 查询历史轨迹 |
| ... | ... | @@ -114,6 +118,20 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter<RunningMapFrag |
| 114 | 118 | * @param endTime |
| 115 | 119 | */ |
| 116 | 120 | public void queryHistoryTrace(Context context, String entityName, long startTime, long endTime) { |
| 121 | + Log.e(TAG, "queryHistoryTrace: 时间:" + startTime); | |
| 122 | + importHash = new HashMap<>(); | |
| 123 | + matchIndex = 0; | |
| 124 | + //打的重要点 | |
| 125 | + List<LatLng> importPoints = GsonUtil.jsonToList(imports, LatLng.class); | |
| 126 | + for (int i = 0; i < importPoints.size(); i++) { | |
| 127 | + if (i % 3 != 0) { | |
| 128 | + importPoints.remove(i); | |
| 129 | + } | |
| 130 | + } | |
| 131 | + | |
| 132 | + for (int i = 0; i < importPoints.size(); i++) { | |
| 133 | + importHash.put(i, false); | |
| 134 | + } | |
| 117 | 135 | |
| 118 | 136 | if (historyTrackRequest == null) { |
| 119 | 137 | historyTrackRequest = new HistoryTrackRequest(tag, StepService.serviceId, entityName); |
| ... | ... | @@ -210,11 +228,62 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter<RunningMapFrag |
| 210 | 228 | queryHistoryTrace(context, entityName, startTime, endTime); |
| 211 | 229 | } else { |
| 212 | 230 | if (getView() != null) { |
| 213 | - List<RoutePoint> routePoints = new ArrayList<>(); | |
| 214 | - for (LatLng latLng : trackPoints) { | |
| 215 | - routePoints.add(new RoutePoint(latLng.latitude, latLng.longitude)); | |
| 231 | + | |
| 232 | + //开始比较(杨帅的思路) | |
| 233 | +// for (int i = 0; i < trackPoints.size(); i++) { | |
| 234 | +// if (matchIndex < importPoints.size() - 1) { | |
| 235 | +// LatLng matchLatLng = importPoints.get(matchIndex); | |
| 236 | +// LatLng historyLatLng = trackPoints.get(i); | |
| 237 | +// Log.e(TAG, "距离: " + DistanceUtil.getDistance(matchLatLng, historyLatLng)); | |
| 238 | +// double distance = DistanceUtil.getDistance(matchLatLng, historyLatLng); | |
| 239 | +// if (distance < 200) { | |
| 240 | +// importHash.put(matchIndex, true); | |
| 241 | +// matchIndex++; | |
| 242 | +// } | |
| 243 | +// } | |
| 244 | +// } | |
| 245 | +// //输出 | |
| 246 | +// int result = 0; | |
| 247 | +// for (int i = 0; i < importHash.size(); i++) { | |
| 248 | +// if (!importHash.get(i)) { | |
| 249 | +// result++; | |
| 250 | +// Log.e(TAG, "onHistoryTrackCallback: 没过:" + i + importHash.get(i)); | |
| 251 | +// } | |
| 252 | +// } | |
| 253 | +// if (result > importPoints.size() * 0.4) { | |
| 254 | +// Toast.makeText(context, "没有完成", Toast.LENGTH_LONG).show(); | |
| 255 | +// | |
| 256 | +// } else { | |
| 257 | +// Toast.makeText(context, "已完成", Toast.LENGTH_LONG).show(); | |
| 258 | +// } | |
| 259 | + //郭瑞鹏的思路 | |
| 260 | + int index = 0; | |
| 261 | + for (int i = 0; i < importPoints.size(); i++) { | |
| 262 | + LatLng importLatLng = importPoints.get(i); | |
| 263 | + for (int j = index; j < trackPoints.size(); j++) { | |
| 264 | + double distance = DistanceUtil.getDistance(importLatLng, trackPoints.get(j)); | |
| 265 | + if (distance<100){ | |
| 266 | + importHash.put(i,true); | |
| 267 | + index=j; | |
| 268 | + } | |
| 269 | + } | |
| 270 | + } | |
| 271 | + //输出 | |
| 272 | + int result = 0; | |
| 273 | + for (int i = 0; i < importHash.size(); i++) { | |
| 274 | + if (!importHash.get(i)) { | |
| 275 | + result++; | |
| 276 | + Log.e(TAG, "onHistoryTrackCallback: 没过:" + i + importHash.get(i)); | |
| 277 | + } | |
| 278 | + } | |
| 279 | + if (result > importPoints.size() * 0.4) { | |
| 280 | + Toast.makeText(context, "没有完成", Toast.LENGTH_LONG).show(); | |
| 281 | + | |
| 282 | + } else { | |
| 283 | + Toast.makeText(context, "已完成", Toast.LENGTH_LONG).show(); | |
| 216 | 284 | } |
| 217 | - Log.e(TAG, "onHistoryTrackCallback: 轨迹点:"+trackPoints.size()+",详情"+GsonUtil.GsonString(trackPoints) ); | |
| 285 | + Log.e(TAG, "结果: " + result); | |
| 286 | + Log.e(TAG, "onHistoryTrackCallback: 轨迹点:" + trackPoints.size() + ",详情" + GsonUtil.GsonString(trackPoints)); | |
| 218 | 287 | MyMapUtil.drawHistoryTrack(context, getView().baiduMap, trackPoints, SortType.asc, R.color.red, R.drawable.icon_start, R.drawable.icon_end); |
| 219 | 288 | // MyMapUtil.drawMapLineRoutePoint(context, getView().baiduMap, MyMapUtil.optimizePoints(routePoints), R.color.red); |
| 220 | 289 | } |
| ... | ... | @@ -224,7 +293,7 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter<RunningMapFrag |
| 224 | 293 | @Override |
| 225 | 294 | public void onDistanceCallback(DistanceResponse distanceResponse) { |
| 226 | 295 | super.onDistanceCallback(distanceResponse); |
| 227 | - Toast.makeText(context,"查询的里程数:"+(int)distanceResponse.getDistance()+"米",Toast.LENGTH_SHORT).show(); | |
| 296 | +// Toast.makeText(context, "查询的里程数:" + (int) distanceResponse.getDistance() + "米", Toast.LENGTH_SHORT).show(); | |
| 228 | 297 | Log.e(TAG, "onDistanceCallback: " + distanceResponse.getDistance()); |
| 229 | 298 | } |
| 230 | 299 | }; |
| ... | ... | @@ -257,7 +326,7 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter<RunningMapFrag |
| 257 | 326 | public void onEntityListCallback(EntityListResponse entityListResponse) { |
| 258 | 327 | super.onEntityListCallback(entityListResponse); |
| 259 | 328 | Log.e(TAG, "onEntityListCallback"); |
| 260 | - Toast.makeText(context, "onEntityListCallback", Toast.LENGTH_SHORT).show(); | |
| 329 | +// Toast.makeText(context, "onEntityListCallback", Toast.LENGTH_SHORT).show(); | |
| 261 | 330 | } |
| 262 | 331 | |
| 263 | 332 | @Override |
| ... | ... | @@ -325,7 +394,7 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter<RunningMapFrag |
| 325 | 394 | @Override |
| 326 | 395 | public void onCreateFenceCallback(CreateFenceResponse createFenceResponse) { |
| 327 | 396 | if ("成功".equals(createFenceResponse.getMessage())) { |
| 328 | - Toast.makeText(context, "创建围栏回调成功", Toast.LENGTH_SHORT).show(); | |
| 397 | +// Toast.makeText(context, "创建围栏回调成功", Toast.LENGTH_SHORT).show(); | |
| 329 | 398 | Log.e(TAG, "onCreateFenceCallback: " + createFenceResponse.getFenceId()); |
| 330 | 399 | // 查询围栏监控者状态 |
| 331 | 400 | List<Long> list = new ArrayList<>(); |
| ... | ... | @@ -351,7 +420,7 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter<RunningMapFrag |
| 351 | 420 | @Override |
| 352 | 421 | public void onFenceListCallback(FenceListResponse fenceListResponse) { |
| 353 | 422 | if ("成功".equals(fenceListResponse.getMessage())) { |
| 354 | - Toast.makeText(context, "围栏列表回调成功:" + fenceListResponse.getSize(), Toast.LENGTH_SHORT).show(); | |
| 423 | +// Toast.makeText(context, "围栏列表回调成功:" + fenceListResponse.getSize(), Toast.LENGTH_SHORT).show(); | |
| 355 | 424 | } |
| 356 | 425 | |
| 357 | 426 | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunMainFragmentView.java
| ... | ... | @@ -310,7 +310,6 @@ public class RunMainFragmentView implements MvpView { |
| 310 | 310 | if (StepService.mClient != null) { |
| 311 | 311 | StepService.mClient.stopGather(StepService.traceListener); |
| 312 | 312 | } |
| 313 | - CommonInfo.setStepStartTime(getContext(), 0); | |
| 314 | 313 | fragment.getActivity().stopService(new Intent(fragment.getActivity(), StepService.class)); |
| 315 | 314 | RunningFinishBean runningFinishBean = new RunningFinishBean(); |
| 316 | 315 | runningFinishBean.setStartPoint("开始地点"); |
| ... | ... | @@ -455,6 +454,9 @@ public class RunMainFragmentView implements MvpView { |
| 455 | 454 | * @param userId |
| 456 | 455 | */ |
| 457 | 456 | public void startStepService(Context context, String userId) { |
| 457 | + if (CommonInfo.getStepStartTime(context) == 0) { | |
| 458 | + CommonInfo.setStepStartTime(context, TimeUtil.getNowTimeStamp()); | |
| 459 | + } | |
| 458 | 460 | Intent intent = new Intent(fragment.getActivity(), StepService.class); |
| 459 | 461 | intent.putExtra("userId", userId); |
| 460 | 462 | ContextCompat.startForegroundService(fragment.getActivity(), intent); |
| ... | ... | @@ -505,10 +507,10 @@ public class RunMainFragmentView implements MvpView { |
| 505 | 507 | fragment.binding.tvLookTrace.setText(getContext().getString(R.string.loc_gps_accuracy_unknown)); |
| 506 | 508 | fragment.binding.tvLookTrace.setTextColor(getContext().getResources().getColor(R.color.red)); |
| 507 | 509 | } |
| 508 | - if (fragment.binding.tvLookTrace.getVisibility()!=View.VISIBLE){ | |
| 510 | + if (fragment.binding.tvLookTrace.getVisibility() != View.VISIBLE) { | |
| 509 | 511 | fragment.binding.tvLookTrace.setVisibility(View.VISIBLE); |
| 510 | 512 | } |
| 511 | - if (fragment.binding.ivGps.getTag()==null||!fragment.binding.ivGps.getTag().toString().equals("rt_training_gps_0")) { | |
| 513 | + if (fragment.binding.ivGps.getTag() == null || !fragment.binding.ivGps.getTag().toString().equals("rt_training_gps_0")) { | |
| 512 | 514 | fragment.binding.ivGps.setTag("rt_training_gps_0"); |
| 513 | 515 | //设置图标 |
| 514 | 516 | fragment.binding.ivGps.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_0)); |
| ... | ... | @@ -523,10 +525,10 @@ public class RunMainFragmentView implements MvpView { |
| 523 | 525 | fragment.binding.tvLookTrace.setTextColor(getContext().getResources().getColor(R.color.text_gray99)); |
| 524 | 526 | |
| 525 | 527 | } |
| 526 | - if (fragment.binding.tvLookTrace.getVisibility()!=View.VISIBLE){ | |
| 528 | + if (fragment.binding.tvLookTrace.getVisibility() != View.VISIBLE) { | |
| 527 | 529 | fragment.binding.tvLookTrace.setVisibility(View.VISIBLE); |
| 528 | 530 | } |
| 529 | - if (fragment.binding.ivGps.getTag()==null||!fragment.binding.ivGps.getTag().toString().equals("GPS_ACCURACY_BAD")) { | |
| 531 | + if (fragment.binding.ivGps.getTag() == null || !fragment.binding.ivGps.getTag().toString().equals("GPS_ACCURACY_BAD")) { | |
| 530 | 532 | fragment.binding.ivGps.setTag("GPS_ACCURACY_BAD"); |
| 531 | 533 | //设置图标 |
| 532 | 534 | fragment.binding.ivGps.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_1)); |
| ... | ... | @@ -537,7 +539,7 @@ public class RunMainFragmentView implements MvpView { |
| 537 | 539 | if (fragment.binding.tvLookTrace.getVisibility() == View.VISIBLE) { |
| 538 | 540 | fragment.binding.tvLookTrace.setVisibility(View.GONE); |
| 539 | 541 | } |
| 540 | - if (fragment.binding.ivGps.getTag()==null||!fragment.binding.ivGps.getTag().toString().equals("GPS_ACCURACY_MID")) { | |
| 542 | + if (fragment.binding.ivGps.getTag() == null || !fragment.binding.ivGps.getTag().toString().equals("GPS_ACCURACY_MID")) { | |
| 541 | 543 | fragment.binding.ivGps.setTag("GPS_ACCURACY_MID"); |
| 542 | 544 | //设置图标 |
| 543 | 545 | fragment.binding.ivGps.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_2)); |
| ... | ... | @@ -547,7 +549,7 @@ public class RunMainFragmentView implements MvpView { |
| 547 | 549 | if (fragment.binding.tvLookTrace.getVisibility() == View.VISIBLE) { |
| 548 | 550 | fragment.binding.tvLookTrace.setVisibility(View.GONE); |
| 549 | 551 | } |
| 550 | - if (fragment.binding.ivGps.getTag()==null||!fragment.binding.ivGps.getTag().toString().equals("GPS_ACCURACY_GOOD")) { | |
| 552 | + if (fragment.binding.ivGps.getTag() == null || !fragment.binding.ivGps.getTag().toString().equals("GPS_ACCURACY_GOOD")) { | |
| 551 | 553 | fragment.binding.ivGps.setTag("GPS_ACCURACY_GOOD"); |
| 552 | 554 | //设置图标 |
| 553 | 555 | fragment.binding.ivGps.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_3)); | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunRaceDetailFragmentView.java
| ... | ... | @@ -4,13 +4,16 @@ import android.content.Context; |
| 4 | 4 | import android.content.Intent; |
| 5 | 5 | import android.graphics.Bitmap; |
| 6 | 6 | import android.graphics.BitmapFactory; |
| 7 | +import android.graphics.drawable.AnimationDrawable; | |
| 7 | 8 | import android.hardware.Sensor; |
| 8 | 9 | import android.hardware.SensorEvent; |
| 9 | 10 | import android.hardware.SensorEventListener; |
| 10 | 11 | import android.hardware.SensorManager; |
| 11 | 12 | import android.util.Log; |
| 13 | +import android.view.LayoutInflater; | |
| 12 | 14 | import android.view.View; |
| 13 | 15 | import android.view.ViewGroup; |
| 16 | +import android.widget.ImageView; | |
| 14 | 17 | import android.widget.LinearLayout; |
| 15 | 18 | import android.widget.Toast; |
| 16 | 19 | |
| ... | ... | @@ -261,7 +264,7 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener { |
| 261 | 264 | fragment.binding.ivBack.setOnClickListener(new View.OnClickListener() { |
| 262 | 265 | @Override |
| 263 | 266 | public void onClick(View view) { |
| 264 | - if (fragment.getActivity()==null){ | |
| 267 | + if (fragment.getActivity() == null) { | |
| 265 | 268 | return; |
| 266 | 269 | } |
| 267 | 270 | fragment.getActivity().finish(); |
| ... | ... | @@ -270,6 +273,14 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener { |
| 270 | 273 | } |
| 271 | 274 | |
| 272 | 275 | private void initMap() { |
| 276 | + List<String> icons = new ArrayList<>(); | |
| 277 | + icons.add("http://yweb0.cnliveimg.com/images/headImg/2019/0505/1557039035723_small.jpg"); | |
| 278 | + icons.add("http://yweb0.cnliveimg.com/images/headImg/2019/0505/1557034319038_small.jpg"); | |
| 279 | + icons.add("http://yweb0.cnliveimg.com/images/headImg/2018/0902/1535858459612_small.jpg"); | |
| 280 | + icons.add("http://yweb0.cnliveimg.com/images/headImg/2019/0523/1558599016203_small.jpg"); | |
| 281 | + icons.add("http://yweb0.cnliveimg.com/images/headImg/2019/0505/1557039035723_small.jpg"); | |
| 282 | + | |
| 283 | + fragment.binding.includeStreet.fiveJoinPerson.initIconData(icons); | |
| 273 | 284 | this.mMapView = fragment.binding.mapView; |
| 274 | 285 | if (baiduMap == null) { |
| 275 | 286 | baiduMap = mMapView.getMap(); |
| ... | ... | @@ -284,6 +295,13 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener { |
| 284 | 295 | mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL; |
| 285 | 296 | // 设置定位图标修改为自定义marker |
| 286 | 297 | Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(getContext(), BitmapFactory.decodeResource(getContext().getResources(), R.drawable.rt_ic_location), 50, 50); |
| 298 | +// View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_anim, null); | |
| 299 | +// ImageView image = (ImageView) view.findViewById(R.id.iv_anim); | |
| 300 | +//// image.setBackgroundResource(R.drawable.fat_po); | |
| 301 | +// image.setImageResource(R.drawable.fat_po); | |
| 302 | +// AnimationDrawable anim = (AnimationDrawable) image.getDrawable(); | |
| 303 | +// anim.start(); | |
| 304 | +// BitmapDescriptorFactory.fromView(view); | |
| 287 | 305 | mCurrentMarker = BitmapDescriptorFactory.fromBitmap(pointBitmap); |
| 288 | 306 | //设置定位蓝点精度圆圈的填充颜色为透明色 |
| 289 | 307 | accuracyCircleFillColor = getContext().getResources().getColor(R.color.transparent); | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunningMapFragmentView.java
| ... | ... | @@ -74,10 +74,6 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener { |
| 74 | 74 | private List<LatLng> trackPoints; |
| 75 | 75 | private Overlay currentLine; |
| 76 | 76 | private List<LatLng> currentPoints; |
| 77 | - private HashMap<Integer, Boolean> importHash; | |
| 78 | - List<LatLng> importPoints; | |
| 79 | - private String imports = "[{\"latitude\":39.933908761246,\"latitudeE6\":3.9933908761246E7,\"longitude\":116.30882855517,\"longitudeE6\":1.1630882855517E8},{\"latitude\":39.933706935562,\"latitudeE6\":3.9933706935562E7,\"longitude\":116.30881011005,\"longitudeE6\":1.1630881011005001E8},{\"latitude\":39.93371370814,\"latitudeE6\":3.993371370814E7,\"longitude\":116.30872981771,\"longitudeE6\":1.1630872981771E8},{\"latitude\":39.933935049796,\"latitudeE6\":3.9933935049796E7,\"longitude\":116.30861317635,\"longitudeE6\":1.1630861317635E8},{\"latitude\":39.93395837223,\"latitudeE6\":3.993395837223E7,\"longitude\":116.30855458458,\"longitudeE6\":1.1630855458457999E8},{\"latitude\":39.93396326228,\"latitudeE6\":3.993396326228E7,\"longitude\":116.30861833018,\"longitudeE6\":1.1630861833017999E8},{\"latitude\":39.934156956749995,\"latitudeE6\":3.993415695675E7,\"longitude\":116.30869672329999,\"longitudeE6\":1.163086967233E8},{\"latitude\":39.934220163784,\"latitudeE6\":3.9934220163784E7,\"longitude\":116.3087100148,\"longitudeE6\":1.163087100148E8},{\"latitude\":39.934285263072,\"latitudeE6\":3.9934285263072E7,\"longitude\":116.30866498582,\"longitudeE6\":1.1630866498582E8},{\"latitude\":39.934351994321,\"latitudeE6\":3.9934351994320996E7,\"longitude\":116.30865820422,\"longitudeE6\":1.1630865820422E8},{\"latitude\":39.934393506188,\"latitudeE6\":3.9934393506188005E7,\"longitude\":116.3087268324,\"longitudeE6\":1.163087268324E8},{\"latitude\":39.934515310648,\"latitudeE6\":3.9934515310648E7,\"longitude\":116.30877023341,\"longitudeE6\":1.1630877023341E8},{\"latitude\":39.934576888398,\"latitudeE6\":3.9934576888398E7,\"longitude\":116.30876860572,\"longitudeE6\":1.1630876860572E8},{\"latitude\":39.934641987882,\"latitudeE6\":3.9934641987882E7,\"longitude\":116.30872520428,\"longitudeE6\":1.1630872520427999E8},{\"latitude\":39.934720386354,\"latitudeE6\":3.9934720386354E7,\"longitude\":116.30874175083,\"longitudeE6\":1.1630874175083E8},{\"latitude\":39.934703845843,\"latitudeE6\":3.9934703845843E7,\"longitude\":116.30880197017,\"longitudeE6\":1.1630880197016999E8},{\"latitude\":39.934719055573,\"latitudeE6\":3.9934719055573E7,\"longitude\":116.30896553874,\"longitudeE6\":1.1630896553874E8},{\"latitude\":39.93482461107,\"latitudeE6\":3.993482461107E7,\"longitude\":116.30924466304002,\"longitudeE6\":1.1630924466304001E8},{\"latitude\":39.934804821527,\"latitudeE6\":3.9934804821527004E7,\"longitude\":116.30935804892,\"longitudeE6\":1.1630935804892E8},{\"latitude\":39.934856643274,\"latitudeE6\":3.9934856643274E7,\"longitude\":116.30943996874,\"longitudeE6\":1.1630943996874E8},{\"latitude\":39.934844987999,\"latitudeE6\":3.9934844987999E7,\"longitude\":116.30952026112,\"longitudeE6\":1.1630952026112E8},{\"latitude\":39.934722121282,\"latitudeE6\":3.9934722121282004E7,\"longitude\":116.30967542086,\"longitudeE6\":1.1630967542086E8},{\"latitude\":39.934828721701,\"latitudeE6\":3.9934828721701E7,\"longitude\":116.30960516489,\"longitudeE6\":1.1630960516489E8},{\"latitude\":39.934408798988,\"latitudeE6\":3.9934408798988E7,\"longitude\":116.30961357453,\"longitudeE6\":1.1630961357453E8},{\"latitude\":39.934345321571,\"latitudeE6\":3.9934345321571E7,\"longitude\":116.30960842073,\"longitudeE6\":1.1630960842073E8},{\"latitude\":39.93436159016,\"latitudeE6\":3.9934361590160005E7,\"longitude\":116.30954331882,\"longitudeE6\":1.1630954331882E8},{\"latitude\":39.934295133241,\"latitudeE6\":3.9934295133241E7,\"longitude\":116.30957668364,\"longitudeE6\":1.1630957668364E8},{\"latitude\":39.934188525341,\"latitudeE6\":3.9934188525341E7,\"longitude\":116.30958183769,\"longitudeE6\":1.1630958183769001E8},{\"latitude\":39.933976660469,\"latitudeE6\":3.9933976660469E7,\"longitude\":116.30954494693,\"longitudeE6\":1.1630954494693E8},{\"latitude\":39.933993190121,\"latitudeE6\":3.9933993190121E7,\"longitude\":116.30939114375,\"longitudeE6\":1.1630939114375001E8},{\"latitude\":39.933938115564,\"latitudeE6\":3.9933938115563996E7,\"longitude\":116.30932956832,\"longitudeE6\":1.1630932956831999E8},{\"latitude\":39.933916130555,\"latitudeE6\":3.9933916130555E7,\"longitude\":116.30922269279,\"longitudeE6\":1.1630922269279E8},{\"latitude\":39.933836097011,\"latitudeE6\":3.9933836097011E7,\"longitude\":116.30914077307,\"longitudeE6\":1.1630914077307E8}]\n"; | |
| 80 | - private static int currentIndex = 0; | |
| 81 | 77 | |
| 82 | 78 | public RunningMapFragmentView(RunningMapFragment fragment) { |
| 83 | 79 | this.fragment = fragment; |
| ... | ... | @@ -88,19 +84,6 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener { |
| 88 | 84 | } |
| 89 | 85 | |
| 90 | 86 | public void initView(List<LatLng> trackPoints) { |
| 91 | - importHash = new HashMap<>(); | |
| 92 | - //打的重要点 | |
| 93 | - List<LatLng> importPoints = GsonUtil.jsonToList(imports, LatLng.class); | |
| 94 | - for (int i = 0; i < importPoints.size(); i++) { | |
| 95 | - if (i % 3 != 0) { | |
| 96 | - importPoints.remove(i); | |
| 97 | - } | |
| 98 | - } | |
| 99 | - for (int i = 0; i < importPoints.size(); i++) { | |
| 100 | - importHash.put(i, false); | |
| 101 | - } | |
| 102 | - | |
| 103 | - Log.e(TAG, "重要点数量: " + importPoints.size()); | |
| 104 | 87 | currentPoints = new ArrayList<>(); |
| 105 | 88 | this.trackPoints = trackPoints; |
| 106 | 89 | this.mMapView = fragment.binding.mapView; |
| ... | ... | @@ -365,17 +348,6 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener { |
| 365 | 348 | currentLine = MyMapUtil.drawMapLine(getContext(), baiduMap, currentPoints, R.color.red); |
| 366 | 349 | } |
| 367 | 350 | |
| 368 | - //开始比较 | |
| 369 | - if (currentIndex < importPoints.size()) { | |
| 370 | - LatLng curLatLng = new LatLng(location.getLatitude(), | |
| 371 | - location.getLongitude()); | |
| 372 | - LatLng importLatLng = importPoints.get(currentIndex); | |
| 373 | - if (DistanceUtil.getDistance(importLatLng, curLatLng) < 50) { | |
| 374 | - importHash.put(currentIndex, true); | |
| 375 | - currentIndex++; | |
| 376 | - Toast.makeText(getContext(), "开始比较第" + currentIndex + "个点", Toast.LENGTH_SHORT).show(); | |
| 377 | - } | |
| 378 | - } | |
| 379 | 351 | } |
| 380 | 352 | myCurLatLng = new LatLng(location.getLatitude(), |
| 381 | 353 | location.getLongitude()); | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/sql/db/DBMigrationHelper.java deleted
100644 → 0
| 1 | -package com.cnlive.moudle.pedometer.sql.db; | |
| 2 | - | |
| 3 | -import android.database.Cursor; | |
| 4 | -import android.database.SQLException; | |
| 5 | -import android.database.sqlite.SQLiteDatabase; | |
| 6 | -import android.support.annotation.NonNull; | |
| 7 | -import android.text.TextUtils; | |
| 8 | -import android.util.Log; | |
| 9 | - | |
| 10 | -import org.greenrobot.greendao.AbstractDao; | |
| 11 | -import org.greenrobot.greendao.database.Database; | |
| 12 | -import org.greenrobot.greendao.database.StandardDatabase; | |
| 13 | -import org.greenrobot.greendao.internal.DaoConfig; | |
| 14 | - | |
| 15 | -import java.lang.reflect.InvocationTargetException; | |
| 16 | -import java.lang.reflect.Method; | |
| 17 | -import java.util.ArrayList; | |
| 18 | -import java.util.Arrays; | |
| 19 | -import java.util.List; | |
| 20 | - | |
| 21 | - | |
| 22 | -/** | |
| 23 | - * greenDao升级类 | |
| 24 | - */ | |
| 25 | -public class DBMigrationHelper { | |
| 26 | - public static boolean DEBUG = false; | |
| 27 | - private static String TAG = "MigrationHelper2"; | |
| 28 | - private static final String SQLITE_MASTER = "sqlite_master"; | |
| 29 | - private static final String SQLITE_TEMP_MASTER = "sqlite_temp_master"; | |
| 30 | - | |
| 31 | - public static void migrate(SQLiteDatabase db, Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 32 | - printLog("【The Old Database Version】" + db.getVersion()); | |
| 33 | - Database database = new StandardDatabase(db); | |
| 34 | - migrate(database, daoClasses); | |
| 35 | - } | |
| 36 | - | |
| 37 | - public static void migrate(Database database, Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 38 | - printLog("【Generate temp table】start"); | |
| 39 | - generateTempTables(database, daoClasses); | |
| 40 | - printLog("【Generate temp table】complete"); | |
| 41 | - | |
| 42 | - dropAllTables(database, true, daoClasses); | |
| 43 | - createAllTables(database, false, daoClasses); | |
| 44 | - | |
| 45 | - printLog("【Restore data】start"); | |
| 46 | - restoreData(database, daoClasses); | |
| 47 | - printLog("【Restore data】complete"); | |
| 48 | - } | |
| 49 | - | |
| 50 | - private static void generateTempTables(Database db, Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 51 | - for (int i = 0; i < daoClasses.length; i++) { | |
| 52 | - String tempTableName = null; | |
| 53 | - | |
| 54 | - DaoConfig daoConfig = new DaoConfig(db, daoClasses[i]); | |
| 55 | - String tableName = daoConfig.tablename; | |
| 56 | - if (!isTableExists(db, false, tableName)) { | |
| 57 | - printLog("【New Table】" + tableName); | |
| 58 | - continue; | |
| 59 | - } | |
| 60 | - try { | |
| 61 | - tempTableName = daoConfig.tablename.concat("_TEMP"); | |
| 62 | - StringBuilder dropTableStringBuilder = new StringBuilder(); | |
| 63 | - dropTableStringBuilder.append("DROP TABLE IF EXISTS ").append(tempTableName).append(";"); | |
| 64 | - db.execSQL(dropTableStringBuilder.toString()); | |
| 65 | - | |
| 66 | - StringBuilder insertTableStringBuilder = new StringBuilder(); | |
| 67 | - insertTableStringBuilder.append("CREATE TEMPORARY TABLE ").append(tempTableName); | |
| 68 | - insertTableStringBuilder.append(" AS SELECT * FROM ").append(tableName).append(";"); | |
| 69 | - db.execSQL(insertTableStringBuilder.toString()); | |
| 70 | - printLog("【Table】" + tableName + "\n ---Columns-->" + getColumnsStr(daoConfig)); | |
| 71 | - printLog("【Generate temp table】" + tempTableName); | |
| 72 | - } catch (SQLException e) { | |
| 73 | - Log.e(TAG, "【Failed to generate temp table】" + tempTableName, e); | |
| 74 | - } | |
| 75 | - } | |
| 76 | - } | |
| 77 | - | |
| 78 | - private static boolean isTableExists(Database db, boolean isTemp, String tableName) { | |
| 79 | - if (db == null || TextUtils.isEmpty(tableName)) { | |
| 80 | - return false; | |
| 81 | - } | |
| 82 | - String dbName = isTemp ? SQLITE_TEMP_MASTER : SQLITE_MASTER; | |
| 83 | - String sql = "SELECT COUNT(*) FROM " + dbName + " WHERE type = ? AND name = ?"; | |
| 84 | - Cursor cursor = null; | |
| 85 | - int count = 0; | |
| 86 | - try { | |
| 87 | - cursor = db.rawQuery(sql, new String[]{"table", tableName}); | |
| 88 | - if (cursor == null || !cursor.moveToFirst()) { | |
| 89 | - return false; | |
| 90 | - } | |
| 91 | - count = cursor.getInt(0); | |
| 92 | - } catch (Exception e) { | |
| 93 | - e.printStackTrace(); | |
| 94 | - } finally { | |
| 95 | - if (cursor != null) { | |
| 96 | - cursor.close(); | |
| 97 | - } | |
| 98 | - } | |
| 99 | - return count > 0; | |
| 100 | - } | |
| 101 | - | |
| 102 | - | |
| 103 | - private static String getColumnsStr(DaoConfig daoConfig) { | |
| 104 | - if (daoConfig == null) { | |
| 105 | - return "no columns"; | |
| 106 | - } | |
| 107 | - StringBuilder builder = new StringBuilder(); | |
| 108 | - for (int i = 0; i < daoConfig.allColumns.length; i++) { | |
| 109 | - builder.append(daoConfig.allColumns[i]); | |
| 110 | - builder.append(","); | |
| 111 | - } | |
| 112 | - if (builder.length() > 0) { | |
| 113 | - builder.deleteCharAt(builder.length() - 1); | |
| 114 | - } | |
| 115 | - return builder.toString(); | |
| 116 | - } | |
| 117 | - | |
| 118 | - | |
| 119 | - private static void dropAllTables(Database db, boolean ifExists, @NonNull Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 120 | - reflectMethod(db, "dropTable", ifExists, daoClasses); | |
| 121 | - printLog("【Drop all table】"); | |
| 122 | - } | |
| 123 | - | |
| 124 | - private static void createAllTables(Database db, boolean ifNotExists, @NonNull Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 125 | - reflectMethod(db, "createTable", ifNotExists, daoClasses); | |
| 126 | - printLog("【Create all table】"); | |
| 127 | - } | |
| 128 | - | |
| 129 | - /** | |
| 130 | - * dao class already define the sql exec method, so just invoke it | |
| 131 | - */ | |
| 132 | - private static void reflectMethod(Database db, String methodName, boolean isExists, @NonNull Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 133 | - if (daoClasses.length < 1) { | |
| 134 | - return; | |
| 135 | - } | |
| 136 | - try { | |
| 137 | - for (Class cls : daoClasses) { | |
| 138 | - Method method = cls.getDeclaredMethod(methodName, Database.class, boolean.class); | |
| 139 | - method.invoke(null, db, isExists); | |
| 140 | - } | |
| 141 | - } catch (NoSuchMethodException e) { | |
| 142 | - e.printStackTrace(); | |
| 143 | - } catch (InvocationTargetException e) { | |
| 144 | - e.printStackTrace(); | |
| 145 | - } catch (IllegalAccessException e) { | |
| 146 | - e.printStackTrace(); | |
| 147 | - } | |
| 148 | - } | |
| 149 | - | |
| 150 | - private static void restoreData(Database db, Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 151 | - for (int i = 0; i < daoClasses.length; i++) { | |
| 152 | - DaoConfig daoConfig = new DaoConfig(db, daoClasses[i]); | |
| 153 | - String tableName = daoConfig.tablename; | |
| 154 | - String tempTableName = daoConfig.tablename.concat("_TEMP"); | |
| 155 | - | |
| 156 | - if (!isTableExists(db, true, tempTableName)) { | |
| 157 | - continue; | |
| 158 | - } | |
| 159 | - | |
| 160 | - try { | |
| 161 | - // get all columns from tempTable, take careful to use the columns list | |
| 162 | - List<String> columns = getColumns(db, tempTableName); | |
| 163 | - ArrayList<String> properties = new ArrayList<>(columns.size()); | |
| 164 | - for (int j = 0; j < daoConfig.properties.length; j++) { | |
| 165 | - String columnName = daoConfig.properties[j].columnName; | |
| 166 | - if (columns.contains(columnName)) { | |
| 167 | - properties.add(columnName); | |
| 168 | - } | |
| 169 | - } | |
| 170 | - if (properties.size() > 0) { | |
| 171 | - final String columnSQL = TextUtils.join(",", properties); | |
| 172 | - | |
| 173 | - StringBuilder insertTableStringBuilder = new StringBuilder(); | |
| 174 | - insertTableStringBuilder.append("INSERT INTO ").append(tableName).append(" ("); | |
| 175 | - insertTableStringBuilder.append(columnSQL); | |
| 176 | - insertTableStringBuilder.append(") SELECT "); | |
| 177 | - insertTableStringBuilder.append(columnSQL); | |
| 178 | - insertTableStringBuilder.append(" FROM ").append(tempTableName).append(";"); | |
| 179 | - db.execSQL(insertTableStringBuilder.toString()); | |
| 180 | - printLog("【Restore data】 to " + tableName); | |
| 181 | - } | |
| 182 | - StringBuilder dropTableStringBuilder = new StringBuilder(); | |
| 183 | - dropTableStringBuilder.append("DROP TABLE ").append(tempTableName); | |
| 184 | - db.execSQL(dropTableStringBuilder.toString()); | |
| 185 | - printLog("【Drop temp table】" + tempTableName); | |
| 186 | - } catch (SQLException e) { | |
| 187 | - Log.e(TAG, "【Failed to restore data from temp table 】" + tempTableName, e); | |
| 188 | - } | |
| 189 | - } | |
| 190 | - } | |
| 191 | - | |
| 192 | - private static List<String> getColumns(Database db, String tableName) { | |
| 193 | - List<String> columns = null; | |
| 194 | - Cursor cursor = null; | |
| 195 | - try { | |
| 196 | - cursor = db.rawQuery("SELECT * FROM " + tableName + " limit 0", null); | |
| 197 | - if (null != cursor && cursor.getColumnCount() > 0) { | |
| 198 | - columns = Arrays.asList(cursor.getColumnNames()); | |
| 199 | - } | |
| 200 | - } catch (Exception e) { | |
| 201 | - e.printStackTrace(); | |
| 202 | - } finally { | |
| 203 | - if (cursor != null) { | |
| 204 | - cursor.close(); | |
| 205 | - } | |
| 206 | - if (null == columns) { | |
| 207 | - columns = new ArrayList<>(); | |
| 208 | - } | |
| 209 | - } | |
| 210 | - return columns; | |
| 211 | - } | |
| 212 | - | |
| 213 | - private static void printLog(String info) { | |
| 214 | - if (DEBUG) { | |
| 215 | - Log.d(TAG, info); | |
| 216 | - } | |
| 217 | - } | |
| 218 | - | |
| 219 | - | |
| 220 | -} |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/sql/db/MyOpenHelper.java
| ... | ... | @@ -47,7 +47,7 @@ import android.content.Context; |
| 47 | 47 | |
| 48 | 48 | import com.cnlive.moudle.pedometer.sql.dao.DaoMaster; |
| 49 | 49 | import com.cnlive.moudle.pedometer.sql.dao.UserStepEntityDao; |
| 50 | -import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity; | |
| 50 | +import com.cnlive.moudle.pedometer.sql.updateDB.UpgradeHelper; | |
| 51 | 51 | |
| 52 | 52 | import org.greenrobot.greendao.database.Database; |
| 53 | 53 | |
| ... | ... | @@ -64,6 +64,8 @@ import org.greenrobot.greendao.database.Database; |
| 64 | 64 | */ |
| 65 | 65 | |
| 66 | 66 | public class MyOpenHelper extends DaoMaster.OpenHelper { |
| 67 | + private final String TAG = "MyOpenHelper"; | |
| 68 | + | |
| 67 | 69 | public MyOpenHelper(Context context, String name) { |
| 68 | 70 | super(context, name); |
| 69 | 71 | } |
| ... | ... | @@ -71,37 +73,25 @@ public class MyOpenHelper extends DaoMaster.OpenHelper { |
| 71 | 73 | @Override |
| 72 | 74 | public void onUpgrade(Database db, int oldVersion, int newVersion) { |
| 73 | 75 | try { |
| 74 | - //判断版本, 设置需要修改得表 我这边设置一个 FileInfo | |
| 75 | - DBMigrationHelper.migrate(db, UserStepEntityDao.class); | |
| 76 | + //进行数据库升级 | |
| 77 | + new UpgradeHelper().migrate(db, | |
| 78 | + UserStepEntityDao.class | |
| 79 | + ); | |
| 76 | 80 | } catch (ClassCastException e) { |
| 77 | 81 | } |
| 78 | -// KLog.w("db version update from " + oldVersion + " to " + newVersion); | |
| 79 | -// MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() { | |
| 82 | +// switch (oldVersion) { | |
| 83 | +// case 1: | |
| 80 | 84 | // |
| 81 | -// @Override | |
| 82 | -// public void onCreateAllTables(Database db, boolean ifNotExists) { | |
| 83 | -// DaoMaster.createAllTables(db, ifNotExists); | |
| 84 | -// } | |
| 85 | +// //不能先删除表,否则数据都木了 | |
| 86 | +//// StudentDao.dropTable(db, true); | |
| 85 | 87 | // |
| 86 | -// @Override | |
| 87 | -// public void onDropAllTables(Database db, boolean ifExists) { | |
| 88 | -// DaoMaster.dropAllTables(db, ifExists); | |
| 89 | -// } | |
| 90 | -// },G106InfoDao.class);//, GovernanceTechnologyDao.class, TestData3Dao.class | |
| 91 | -// } | |
| 92 | - switch (oldVersion) { | |
| 93 | - case 1: | |
| 94 | - | |
| 95 | - //不能先删除表,否则数据都木了 | |
| 96 | -// StudentDao.dropTable(db, true); | |
| 97 | - | |
| 98 | -// StudentDao.createTable(db, true); | |
| 99 | - | |
| 100 | - // 加入新字段 score | |
| 101 | -// db.execSQL("ALTER TABLE 'STUDENT' ADD 'SCORE' TEXT;"); | |
| 102 | - | |
| 103 | - break; | |
| 104 | - } | |
| 88 | +//// StudentDao.createTable(db, true); | |
| 89 | +// | |
| 90 | +// // 加入新字段 score | |
| 91 | +//// db.execSQL("ALTER TABLE 'STUDENT' ADD 'SCORE' TEXT;"); | |
| 92 | +// | |
| 93 | +// break; | |
| 94 | +// } | |
| 105 | 95 | |
| 106 | 96 | } |
| 107 | 97 | } | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/sql/entity/UserStepEntity.java
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/sql/updateDB/UpgradeHelper.java
0 → 100644
| 1 | +package com.cnlive.moudle.pedometer.sql.updateDB; | |
| 2 | + | |
| 3 | +import android.database.Cursor; | |
| 4 | +import android.text.TextUtils; | |
| 5 | + | |
| 6 | +import com.cnlive.moudle.pedometer.sql.dao.DaoMaster; | |
| 7 | + | |
| 8 | +import org.greenrobot.greendao.AbstractDao; | |
| 9 | +import org.greenrobot.greendao.database.Database; | |
| 10 | +import org.greenrobot.greendao.internal.DaoConfig; | |
| 11 | + | |
| 12 | +import java.util.ArrayList; | |
| 13 | +import java.util.Arrays; | |
| 14 | +import java.util.List; | |
| 15 | + | |
| 16 | +/** | |
| 17 | + * Created by cnlive20080010 on 2018/8/27. | |
| 18 | + */ | |
| 19 | + | |
| 20 | +public class UpgradeHelper { | |
| 21 | + | |
| 22 | + private static final String CONVERSION_CLASS_NOT_FOUND_EXCEPTION = "MIGRATION HELPER - CLASS DOESN'T MATCH WITH THE CURRENT PARAMETERS"; | |
| 23 | + | |
| 24 | + public void migrate(final Database db, final Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 25 | + generateTempTables(db, daoClasses); | |
| 26 | + DaoMaster.dropAllTables(db, true); | |
| 27 | + DaoMaster.createAllTables(db, false); | |
| 28 | + restoreData(db, daoClasses); | |
| 29 | + } | |
| 30 | + | |
| 31 | + private void generateTempTables(Database db, Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 32 | + for (int i = 0; i < daoClasses.length; i++) { | |
| 33 | + try { | |
| 34 | + DaoConfig daoConfig = new DaoConfig(db, daoClasses[i]); | |
| 35 | + String divider = ""; | |
| 36 | + String tableName = daoConfig.tablename; | |
| 37 | + String tempTableName = daoConfig.tablename.concat("_TEMP"); | |
| 38 | + ArrayList<String> properties = new ArrayList<>(); | |
| 39 | + | |
| 40 | + StringBuilder createTableStringBuilder = new StringBuilder(); | |
| 41 | + | |
| 42 | + createTableStringBuilder.append("CREATE TABLE ").append(tempTableName).append(" ("); | |
| 43 | + | |
| 44 | + for (int j = 0; j < daoConfig.properties.length; j++) { | |
| 45 | + String columnName = daoConfig.properties[j].columnName; | |
| 46 | + | |
| 47 | + if (getColumns(db, tableName).contains(columnName)) { | |
| 48 | + properties.add(columnName); | |
| 49 | + | |
| 50 | + String type = null; | |
| 51 | + | |
| 52 | + try { | |
| 53 | + type = getTypeByClass(daoConfig.properties[j].type); | |
| 54 | + } catch (Exception exception) { | |
| 55 | + exception.printStackTrace(); | |
| 56 | + } | |
| 57 | + | |
| 58 | + createTableStringBuilder.append(divider).append(columnName).append(" ").append(type); | |
| 59 | + | |
| 60 | + if (daoConfig.properties[j].primaryKey) { | |
| 61 | + createTableStringBuilder.append(" PRIMARY KEY"); | |
| 62 | + } | |
| 63 | + | |
| 64 | + divider = ","; | |
| 65 | + } | |
| 66 | + } | |
| 67 | + createTableStringBuilder.append(");"); | |
| 68 | + | |
| 69 | + db.execSQL(createTableStringBuilder.toString()); | |
| 70 | + | |
| 71 | + StringBuilder insertTableStringBuilder = new StringBuilder(); | |
| 72 | + | |
| 73 | + insertTableStringBuilder.append("INSERT INTO ").append(tempTableName).append(" ("); | |
| 74 | + insertTableStringBuilder.append(TextUtils.join(",", properties)); | |
| 75 | + insertTableStringBuilder.append(") SELECT "); | |
| 76 | + insertTableStringBuilder.append(TextUtils.join(",", properties)); | |
| 77 | + insertTableStringBuilder.append(" FROM ").append(tableName).append(";"); | |
| 78 | + | |
| 79 | + db.execSQL(insertTableStringBuilder.toString()); | |
| 80 | + } catch (Exception e) { | |
| 81 | + e.printStackTrace(); | |
| 82 | + } finally { | |
| 83 | + continue; | |
| 84 | + } | |
| 85 | + } | |
| 86 | + } | |
| 87 | + | |
| 88 | + private void restoreData(Database db, Class<? extends AbstractDao<?, ?>>... daoClasses) { | |
| 89 | + for (int i = 0; i < daoClasses.length; i++) { | |
| 90 | + try { | |
| 91 | + DaoConfig daoConfig = new DaoConfig(db, daoClasses[i]); | |
| 92 | + String tableName = daoConfig.tablename; | |
| 93 | + String tempTableName = daoConfig.tablename.concat("_TEMP"); | |
| 94 | + ArrayList<String> properties = new ArrayList(); | |
| 95 | + | |
| 96 | + for (int j = 0; j < daoConfig.properties.length; j++) { | |
| 97 | + String columnName = daoConfig.properties[j].columnName; | |
| 98 | + | |
| 99 | + if (getColumns(db, tempTableName).contains(columnName)) { | |
| 100 | + properties.add(columnName); | |
| 101 | + } | |
| 102 | + } | |
| 103 | + | |
| 104 | + StringBuilder insertTableStringBuilder = new StringBuilder(); | |
| 105 | + | |
| 106 | + insertTableStringBuilder.append("INSERT INTO ").append(tableName).append(" ("); | |
| 107 | + insertTableStringBuilder.append(TextUtils.join(",", properties)); | |
| 108 | + insertTableStringBuilder.append(") SELECT "); | |
| 109 | + insertTableStringBuilder.append(TextUtils.join(",", properties)); | |
| 110 | + insertTableStringBuilder.append(" FROM ").append(tempTableName).append(";"); | |
| 111 | + | |
| 112 | + StringBuilder dropTableStringBuilder = new StringBuilder(); | |
| 113 | + | |
| 114 | + dropTableStringBuilder.append("DROP TABLE ").append(tempTableName); | |
| 115 | + | |
| 116 | + db.execSQL(insertTableStringBuilder.toString()); | |
| 117 | + db.execSQL(dropTableStringBuilder.toString()); | |
| 118 | + } catch (Exception e) { | |
| 119 | + e.printStackTrace(); | |
| 120 | + } finally { | |
| 121 | + continue; | |
| 122 | + } | |
| 123 | + } | |
| 124 | + } | |
| 125 | + | |
| 126 | + private String getTypeByClass(Class<?> type) throws Exception { | |
| 127 | + if (type.equals(String.class)) { | |
| 128 | + return " TEXT"; | |
| 129 | + } | |
| 130 | + if (type.equals(Integer.class) || type.equals(int.class) || | |
| 131 | + type.equals(byte.class) || type.equals(Byte.class) || | |
| 132 | + type.equals(short.class) || type.equals(Short.class)) { | |
| 133 | + return " INTEGER DEFAULT 0"; | |
| 134 | + } | |
| 135 | + | |
| 136 | + if (type.equals(Double.class) || type.equals(double.class)) { | |
| 137 | + return "DOUBLE DEFAULT 0"; | |
| 138 | + } | |
| 139 | + | |
| 140 | + if(type.equals(float.class) || type.equals(Float.class)){ | |
| 141 | + return "FLOAT DEFAULT 0"; | |
| 142 | + } | |
| 143 | + | |
| 144 | + if (type.equals(Long.class) || type.equals(long.class)) { | |
| 145 | + return " Long DEFAULT 0"; | |
| 146 | + } | |
| 147 | + if (type.equals(Boolean.class) || type.equals(boolean.class)) { | |
| 148 | + return " NUMERIC DEFAULT 0"; | |
| 149 | + } | |
| 150 | + | |
| 151 | + Exception exception = new Exception(CONVERSION_CLASS_NOT_FOUND_EXCEPTION.concat(" - Class: ").concat(type.toString())); | |
| 152 | + exception.printStackTrace(); | |
| 153 | + throw exception; | |
| 154 | + } | |
| 155 | + | |
| 156 | + private static List<String> getColumns(Database db, String tableName) { | |
| 157 | + | |
| 158 | + List<String> columns = new ArrayList<>(); | |
| 159 | + Cursor cursor = null; | |
| 160 | + try { | |
| 161 | + cursor = db.rawQuery("SELECT * FROM " + tableName + " limit 1", null); | |
| 162 | + if (cursor != null) { | |
| 163 | + columns = new ArrayList<>(Arrays.asList(cursor.getColumnNames())); | |
| 164 | + } | |
| 165 | + } catch (Exception e) { | |
| 166 | + e.printStackTrace(); | |
| 167 | + } finally { | |
| 168 | + if (cursor != null) | |
| 169 | + cursor.close(); | |
| 170 | + } | |
| 171 | + return columns; | |
| 172 | + } | |
| 173 | +} | |
| 174 | + | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/activity/PedometerMainActivity.java
| ... | ... | @@ -24,6 +24,7 @@ import com.cnlive.libs.base.ui.QMUIFragment; |
| 24 | 24 | import com.cnlive.libs.base.ui.QMUIFragmentActivity; |
| 25 | 25 | import com.cnlive.libs.base.util.StatusBarUtil2; |
| 26 | 26 | import com.cnlive.moudle.pedometer.ui.fragment.RunMainFragment; |
| 27 | +import com.cnlive.moudle.pedometer.utils.MyMapUtil; | |
| 27 | 28 | import com.cnlive.moudle.pedometer.utils.lib_permisshelper.PermissionsListener; |
| 28 | 29 | import com.cnlive.moudle.pedometer.utils.lib_permisshelper.PermissionsUtils; |
| 29 | 30 | import com.example.moudle_pedometer.R; |
| ... | ... | @@ -54,7 +55,7 @@ public class PedometerMainActivity extends QMUIFragmentActivity { |
| 54 | 55 | super.onCreate(savedInstanceState); |
| 55 | 56 | StatusBarUtil2.setColor(this, getResources().getColor(R.color.run_main_bg), 0); |
| 56 | 57 | // setContentView(R.layout.activity_pedometer_main); |
| 57 | - getPermissionsWithTip(); | |
| 58 | + | |
| 58 | 59 | } |
| 59 | 60 | |
| 60 | 61 | |
| ... | ... | @@ -149,6 +150,7 @@ public class PedometerMainActivity extends QMUIFragmentActivity { |
| 149 | 150 | // } |
| 150 | 151 | // } |
| 151 | 152 | // } |
| 153 | + getPermissionsWithTip(); | |
| 152 | 154 | } |
| 153 | 155 | |
| 154 | 156 | private void addFragment() { |
| ... | ... | @@ -176,11 +178,11 @@ public class PedometerMainActivity extends QMUIFragmentActivity { |
| 176 | 178 | public void onGranted() { |
| 177 | 179 | |
| 178 | 180 | //判断GPS是否开启 |
| 179 | - if (!isOPen(getApplicationContext())) { | |
| 180 | -// KLog.e("gps未开启"); | |
| 181 | -// //开启GPS | |
| 181 | + if (!MyMapUtil.isOPenGps(getApplicationContext())) { | |
| 182 | + //开启GPS | |
| 182 | 183 | Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); |
| 183 | 184 | startActivityForResult(intent, 10); |
| 185 | + Toast.makeText(getApplicationContext(), getString(R.string.open_gps_tip), Toast.LENGTH_LONG).show(); | |
| 184 | 186 | } else { |
| 185 | 187 | addFragment(); |
| 186 | 188 | } |
| ... | ... | @@ -206,25 +208,6 @@ public class PedometerMainActivity extends QMUIFragmentActivity { |
| 206 | 208 | // , Manifest.permission.ACCESS_FINE_LOCATION); |
| 207 | 209 | } |
| 208 | 210 | |
| 209 | - /** | |
| 210 | - * 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的 | |
| 211 | - * | |
| 212 | - * @param context | |
| 213 | - * @return true 表示开启 | |
| 214 | - */ | |
| 215 | - public static final boolean isOPen(final Context context) { | |
| 216 | - LocationManager locationManager | |
| 217 | - = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); | |
| 218 | - // 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快) | |
| 219 | - boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); | |
| 220 | - // 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位) | |
| 221 | - boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); | |
| 222 | - if (gps || network) { | |
| 223 | - return true; | |
| 224 | - } | |
| 225 | - | |
| 226 | - return false; | |
| 227 | - } | |
| 228 | 211 | |
| 229 | 212 | /** |
| 230 | 213 | * 权限回调 |
| ... | ... | @@ -241,7 +224,6 @@ public class PedometerMainActivity extends QMUIFragmentActivity { |
| 241 | 224 | } |
| 242 | 225 | |
| 243 | 226 | |
| 244 | - | |
| 245 | 227 | @Override |
| 246 | 228 | public void onBackPressed() { |
| 247 | 229 | return; | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/RunningMapFragment.java
| ... | ... | @@ -110,16 +110,13 @@ public class RunningMapFragment extends QMUIFragment<RunningMapFragmentView, Run |
| 110 | 110 | //开始进行历史轨迹查询 |
| 111 | 111 | if (getPresenter() != null && !TextUtils.isEmpty(StepService.entityName)) { |
| 112 | 112 | long stepStartTime = CommonInfo.getStepStartTime(getActivity()); |
| 113 | + Log.e(TAG, "onViewCreated: 时间"+stepStartTime ); | |
| 113 | 114 | long startTime = 0; |
| 114 | 115 | if (stepStartTime != 0) { |
| 115 | 116 | startTime = stepStartTime; |
| 116 | 117 | } else { |
| 117 | - startTime = (int) (System.currentTimeMillis() / 1000 - 12 * 60 * 60); | |
| 118 | + startTime = (int) (System.currentTimeMillis() / 1000 -12 * 60 * 60); | |
| 118 | 119 | } |
| 119 | -// long base = runningMapBean.getTimeBase() + (SystemClock.elapsedRealtime() - runningMapBean.getRecordTime()); | |
| 120 | -// int hour = (int) ((SystemClock.elapsedRealtime() - base) / 1000 / 60 / 60); | |
| 121 | -// int minute = (int) ((SystemClock.elapsedRealtime() - base) / 1000 / 60) % 60; | |
| 122 | -// int second = (int) ((SystemClock.elapsedRealtime() - base) / 1000) % 60; | |
| 123 | 120 | long current = TimeUtil.getCurrentTime(); |
| 124 | 121 | // long startTime = current - hour * 3600 * 1000 - minute * 60 * 1000 - second * 1000; |
| 125 | 122 | long endTime = current; | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/widget/FivePersonIconView.java
| ... | ... | @@ -94,6 +94,49 @@ public class FivePersonIconView extends LinearLayout { |
| 94 | 94 | } |
| 95 | 95 | } |
| 96 | 96 | } |
| 97 | + if (iconList == null) { | |
| 98 | + qr1.setVisibility(View.GONE); | |
| 99 | + qr2.setVisibility(View.GONE); | |
| 100 | + qr3.setVisibility(View.GONE); | |
| 101 | + qr4.setVisibility(View.GONE); | |
| 102 | + qr5.setVisibility(View.GONE); | |
| 103 | + } else if (iconList.size() == 0) { | |
| 104 | + qr1.setVisibility(View.GONE); | |
| 105 | + qr2.setVisibility(View.GONE); | |
| 106 | + qr3.setVisibility(View.GONE); | |
| 107 | + qr4.setVisibility(View.GONE); | |
| 108 | + qr5.setVisibility(View.GONE); | |
| 109 | + } else if (iconList.size() == 1) { | |
| 110 | + qr1.setVisibility(View.VISIBLE); | |
| 111 | + qr2.setVisibility(View.GONE); | |
| 112 | + qr3.setVisibility(View.GONE); | |
| 113 | + qr4.setVisibility(View.GONE); | |
| 114 | + qr5.setVisibility(View.GONE); | |
| 115 | + } else if (iconList.size() == 2) { | |
| 116 | + qr1.setVisibility(View.VISIBLE); | |
| 117 | + qr2.setVisibility(View.VISIBLE); | |
| 118 | + qr3.setVisibility(View.GONE); | |
| 119 | + qr4.setVisibility(View.GONE); | |
| 120 | + qr5.setVisibility(View.GONE); | |
| 121 | + } else if (iconList.size() == 3) { | |
| 122 | + qr1.setVisibility(View.VISIBLE); | |
| 123 | + qr2.setVisibility(View.VISIBLE); | |
| 124 | + qr3.setVisibility(View.VISIBLE); | |
| 125 | + qr4.setVisibility(View.GONE); | |
| 126 | + qr5.setVisibility(View.GONE); | |
| 127 | + } else if (iconList.size() == 4) { | |
| 128 | + qr1.setVisibility(View.VISIBLE); | |
| 129 | + qr2.setVisibility(View.VISIBLE); | |
| 130 | + qr3.setVisibility(View.VISIBLE); | |
| 131 | + qr4.setVisibility(View.VISIBLE); | |
| 132 | + qr5.setVisibility(View.GONE); | |
| 133 | + } else if (iconList.size() == 5) { | |
| 134 | + qr1.setVisibility(View.VISIBLE); | |
| 135 | + qr2.setVisibility(View.VISIBLE); | |
| 136 | + qr3.setVisibility(View.VISIBLE); | |
| 137 | + qr4.setVisibility(View.VISIBLE); | |
| 138 | + qr5.setVisibility(View.VISIBLE); | |
| 139 | + } | |
| 97 | 140 | |
| 98 | 141 | |
| 99 | 142 | } | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MyMapUtil.java
| ... | ... | @@ -3,6 +3,7 @@ package com.cnlive.moudle.pedometer.utils; |
| 3 | 3 | import android.content.Context; |
| 4 | 4 | import android.graphics.Bitmap; |
| 5 | 5 | import android.graphics.BitmapFactory; |
| 6 | +import android.location.LocationManager; | |
| 6 | 7 | |
| 7 | 8 | import com.baidu.mapapi.map.BaiduMap; |
| 8 | 9 | import com.baidu.mapapi.map.BitmapDescriptorFactory; |
| ... | ... | @@ -24,6 +25,26 @@ import java.util.List; |
| 24 | 25 | */ |
| 25 | 26 | public class MyMapUtil { |
| 26 | 27 | /** |
| 28 | + * 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的 | |
| 29 | + * | |
| 30 | + * @param context | |
| 31 | + * @return true 表示开启 | |
| 32 | + */ | |
| 33 | + public static final boolean isOPenGps(final Context context) { | |
| 34 | + LocationManager locationManager | |
| 35 | + = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); | |
| 36 | + // 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快) | |
| 37 | + boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); | |
| 38 | + // 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位) | |
| 39 | + boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); | |
| 40 | + if (gps || network) { | |
| 41 | + return true; | |
| 42 | + } | |
| 43 | + | |
| 44 | + return false; | |
| 45 | + } | |
| 46 | + | |
| 47 | + /** | |
| 27 | 48 | * 将轨迹坐标对象转换为地图坐标对象 |
| 28 | 49 | * |
| 29 | 50 | * @param traceLatLng | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MySpHelper.java
| ... | ... | @@ -11,6 +11,7 @@ import android.util.Log; |
| 11 | 11 | * @author ShinnyYang |
| 12 | 12 | */ |
| 13 | 13 | public class MySpHelper { |
| 14 | + private static final String TAG = "MySpHelper"; | |
| 14 | 15 | private static MySpHelper sharedPreferencesHelper = null; |
| 15 | 16 | private static int SP_MODE;//指定模式 |
| 16 | 17 | |
| ... | ... | @@ -147,7 +148,7 @@ public class MySpHelper { |
| 147 | 148 | editor.remove(key); |
| 148 | 149 | editor.commit(); |
| 149 | 150 | } catch (NullPointerException e) { |
| 150 | - Log.d("hcj", "" + e); | |
| 151 | + Log.d(TAG, "removeKey:" + e); | |
| 151 | 152 | } |
| 152 | 153 | } |
| 153 | 154 | } | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/QMUITipDialogUtil.java
0 → 100644
| 1 | +package com.cnlive.moudle.pedometer.utils; | |
| 2 | + | |
| 3 | +import android.content.Context; | |
| 4 | +import android.os.Build; | |
| 5 | +import android.os.Handler; | |
| 6 | + | |
| 7 | +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * 文 件 名: QMUITipDialogUtil | |
| 11 | + * 创 建 人: 杨帅 | |
| 12 | + * 创建日期: 2018/10/22 18:51 | |
| 13 | + * 描 述: | |
| 14 | + * 修 改 人: | |
| 15 | + * 修改时间: | |
| 16 | + * 修改备注: | |
| 17 | + */ | |
| 18 | +public class QMUITipDialogUtil { | |
| 19 | + private static QMUITipDialog tipDialog; | |
| 20 | + | |
| 21 | + | |
| 22 | + /** | |
| 23 | + * 初始化 | |
| 24 | + */ | |
| 25 | + public static void QMUITipDialogUtil(Context context) { | |
| 26 | + QMUITipDialog.Builder builder = new QMUITipDialog.Builder(context); | |
| 27 | + } | |
| 28 | + | |
| 29 | + /** | |
| 30 | + * Loading 类型提示框 | |
| 31 | + * | |
| 32 | + * @param context | |
| 33 | + * @param tipStr | |
| 34 | + */ | |
| 35 | + public static void loadingDialog(Context context, String tipStr, boolean isCancel) { | |
| 36 | + tipDialog = new QMUITipDialog.Builder(context) | |
| 37 | + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) | |
| 38 | + .setTipWord(tipStr) | |
| 39 | + .create(); | |
| 40 | + tipDialog.setCanceledOnTouchOutside(isCancel);//屏蔽返回键 | |
| 41 | + tipDialog.setCancelable(isCancel); | |
| 42 | + tipDialog.show(); | |
| 43 | + } | |
| 44 | + | |
| 45 | + /** | |
| 46 | + * 成功提示类型提示框 | |
| 47 | + * | |
| 48 | + * @param context | |
| 49 | + */ | |
| 50 | + public static void successDialog(Context context, String tipStr, int second) { | |
| 51 | + tipDialog = new QMUITipDialog.Builder(context) | |
| 52 | + .setIconType(QMUITipDialog.Builder.ICON_TYPE_SUCCESS) | |
| 53 | + .setTipWord(tipStr) | |
| 54 | + .create(); | |
| 55 | + tipDialog.setCanceledOnTouchOutside(false);//屏蔽返回键 | |
| 56 | + tipDialog.show(); | |
| 57 | + new Handler().postDelayed(new Runnable() { | |
| 58 | + @Override | |
| 59 | + public void run() { | |
| 60 | + | |
| 61 | + /** | |
| 62 | + * 延时执行的代码 | |
| 63 | + */ | |
| 64 | + tipDialog.dismiss(); | |
| 65 | + } | |
| 66 | + }, second * 1000); // 延时2秒 | |
| 67 | + } | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * 失败提示类型提示框 | |
| 71 | + * | |
| 72 | + * @param context | |
| 73 | + */ | |
| 74 | + public static void failedDialog(Context context, String tipStr, int second) { | |
| 75 | + tipDialog = new QMUITipDialog.Builder(context) | |
| 76 | + .setIconType(QMUITipDialog.Builder.ICON_TYPE_FAIL) | |
| 77 | + .setTipWord(tipStr) | |
| 78 | + .create(); | |
| 79 | + tipDialog.setCanceledOnTouchOutside(false);//屏蔽返回键 | |
| 80 | + tipDialog.show(); | |
| 81 | + new Handler().postDelayed(new Runnable() { | |
| 82 | + @Override | |
| 83 | + public void run() { | |
| 84 | + | |
| 85 | + /** | |
| 86 | + * 延时执行的代码 | |
| 87 | + */ | |
| 88 | + tipDialog.dismiss(); | |
| 89 | + } | |
| 90 | + }, second * 1000); // 延时2秒 | |
| 91 | + | |
| 92 | + } | |
| 93 | + | |
| 94 | + /** | |
| 95 | + * 信息提示类型提示框 | |
| 96 | + * | |
| 97 | + * @param context | |
| 98 | + */ | |
| 99 | + public static void messageDialog(Context context, String tipStr, int second) { | |
| 100 | + tipDialog = new QMUITipDialog.Builder(context) | |
| 101 | + .setIconType(QMUITipDialog.Builder.ICON_TYPE_INFO) | |
| 102 | + .setTipWord(tipStr) | |
| 103 | + .create(); | |
| 104 | + tipDialog.setCanceledOnTouchOutside(false);//屏蔽返回键 | |
| 105 | + tipDialog.show(); | |
| 106 | + new Handler().postDelayed(new Runnable() { | |
| 107 | + @Override | |
| 108 | + public void run() { | |
| 109 | + | |
| 110 | + /** | |
| 111 | + * 延时执行的代码 | |
| 112 | + */ | |
| 113 | + tipDialog.dismiss(); | |
| 114 | + } | |
| 115 | + }, second * 1000); // 延时2秒 | |
| 116 | + } | |
| 117 | + | |
| 118 | + | |
| 119 | + /** | |
| 120 | + * 单独文字类型提示框 | |
| 121 | + * | |
| 122 | + * @param context | |
| 123 | + */ | |
| 124 | + public static void textDialog(Context context, String tipStr, int second) { | |
| 125 | + tipDialog = new QMUITipDialog.Builder(context) | |
| 126 | + .setTipWord(tipStr) | |
| 127 | + .create(); | |
| 128 | + tipDialog.setCanceledOnTouchOutside(false);//屏蔽返回键 | |
| 129 | + tipDialog.show(); | |
| 130 | + new Handler().postDelayed(new Runnable() { | |
| 131 | + @Override | |
| 132 | + public void run() { | |
| 133 | + | |
| 134 | + /** | |
| 135 | + * 延时执行的代码 | |
| 136 | + */ | |
| 137 | + tipDialog.dismiss(); | |
| 138 | + } | |
| 139 | + }, second * 1000); // 延时2秒 | |
| 140 | + } | |
| 141 | + | |
| 142 | + public static void dismessDialog() { | |
| 143 | + if (tipDialog != null) { | |
| 144 | + tipDialog.dismiss(); | |
| 145 | + } | |
| 146 | + } | |
| 147 | +} | ... | ... |
moudle_pedometer/src/main/res/drawable-hdpi/sport_type.png
0 → 100644
652 Bytes
moudle_pedometer/src/main/res/drawable-xhdpi/sport_type.png
0 → 100644
747 Bytes
moudle_pedometer/src/main/res/drawable-xxhdpi/sport_type.png
0 → 100644
1.29 KB
moudle_pedometer/src/main/res/layout/fragment_run_race_detail.xml
| ... | ... | @@ -25,6 +25,14 @@ |
| 25 | 25 | android:layout_width="match_parent" |
| 26 | 26 | android:layout_height="match_parent"></com.baidu.mapapi.map.MapView> |
| 27 | 27 | |
| 28 | + <!--地图上面加一层类似于全透明黑色蒙版--> | |
| 29 | + <LinearLayout | |
| 30 | + android:layout_width="match_parent" | |
| 31 | + android:layout_height="match_parent" | |
| 32 | + android:background="#0D000000" | |
| 33 | + android:clickable="false" | |
| 34 | + android:focusable="false" | |
| 35 | + android:focusableInTouchMode="false"></LinearLayout> | |
| 28 | 36 | |
| 29 | 37 | <ImageView |
| 30 | 38 | android:id="@+id/iv_back" | ... | ... |
moudle_pedometer/src/main/res/layout/layout_run_detail_street.xml
| ... | ... | @@ -314,6 +314,44 @@ |
| 314 | 314 | android:layout_marginTop="5dp" |
| 315 | 315 | android:layout_marginRight="10dp" |
| 316 | 316 | android:background="@color/line" /> |
| 317 | + <!--活动类型--> | |
| 318 | + <LinearLayout | |
| 319 | + android:layout_width="match_parent" | |
| 320 | + android:layout_height="wrap_content" | |
| 321 | + android:layout_marginLeft="10dp" | |
| 322 | + android:layout_marginTop="10dp" | |
| 323 | + android:gravity="center_vertical"> | |
| 324 | + | |
| 325 | + <ImageView | |
| 326 | + android:layout_width="14dp" | |
| 327 | + android:layout_height="14dp" | |
| 328 | + android:background="@drawable/sport_type" /> | |
| 329 | + | |
| 330 | + <TextView | |
| 331 | + android:layout_width="wrap_content" | |
| 332 | + android:layout_height="wrap_content" | |
| 333 | + android:layout_marginLeft="5dp" | |
| 334 | + android:text="@string/layout_street_active_type" | |
| 335 | + android:textColor="@color/bottom_sheet_dialog_race_location_text" | |
| 336 | + android:textSize="14sp" /> | |
| 337 | + </LinearLayout> | |
| 338 | + <!--类型--> | |
| 339 | + <LinearLayout | |
| 340 | + android:layout_width="match_parent" | |
| 341 | + android:layout_height="wrap_content" | |
| 342 | + android:layout_marginLeft="10dp" | |
| 343 | + android:layout_marginTop="10dp"> | |
| 344 | + | |
| 345 | + <TextView | |
| 346 | + android:layout_width="wrap_content" | |
| 347 | + android:layout_height="wrap_content" | |
| 348 | + android:layout_marginLeft="25dp" | |
| 349 | + android:text="徒步" | |
| 350 | + android:textColor="@color/text_black" | |
| 351 | + android:textStyle="bold" | |
| 352 | + android:textSize="15sp" /> | |
| 353 | + | |
| 354 | + </LinearLayout> | |
| 317 | 355 | <!--参与人数--> |
| 318 | 356 | <LinearLayout |
| 319 | 357 | android:layout_width="match_parent" |
| ... | ... | @@ -350,7 +388,7 @@ |
| 350 | 388 | <TextView |
| 351 | 389 | android:layout_width="wrap_content" |
| 352 | 390 | android:layout_height="wrap_content" |
| 353 | - android:layout_marginLeft="28dp" | |
| 391 | + android:layout_marginLeft="33dp" | |
| 354 | 392 | android:text="123" |
| 355 | 393 | android:textColor="@color/text_black" |
| 356 | 394 | android:textSize="17sp" | ... | ... |
moudle_pedometer/src/main/res/values/strings.xml
| ... | ... | @@ -67,5 +67,7 @@ |
| 67 | 67 | <string name="loc_gps_accuracy_bad">信号糟糕,数据准确度低</string> |
| 68 | 68 | <string name="loc_gps_accuracy_mid">GPS信号质量中等</string> |
| 69 | 69 | <string name="loc_gps_accuracy_good">GPS信号质量好</string> |
| 70 | + <string name="layout_street_active_type">活动类型</string> | |
| 71 | + <string name="open_gps_tip">您尚未开启GPS,为确保定位准确性,请您打开后使用!</string> | |
| 70 | 72 | <!----> |
| 71 | 73 | </resources> | ... | ... |