UILabelExt *labelstride = nullptr; // 训练步幅
UILabelExt *labelcalories = nullptr; // 训练卡路里
+ UILabelExt *gpsNoTrackLabel = nullptr; // GPS轨迹失败提示标签
+
UILabelExt *exitLabel = nullptr; // APP提醒
UILabelButtonExt *exitButton = nullptr; // 返回按键
bool GetSportExtraData(void); // 获取运动额外数据
uint8_t GetHeartRateData(void); // 获取心率数据
+ //判断是不是需要GPS的运动
+ bool IsNeedGPS(UIResourceTextId sportId_);
+
private:
TraingModel(const TraingModel &) = delete;
TraingModel &operator=(const TraingModel &) = delete;
scrollView_->Add(labelheart);
scrollView_->Add(labelstrong);
scrollView_->Add(labelcalories);
+
+ // 初始化GPS轨迹失败提示标签(默认隐藏)
+ InitLabel(gpsNoTrackLabel, 33, 100 + CANVAS_SIZE/2 - 20, CANVAS_SIZE, 40,
+ "gpsNoTrackLabel", "未定位成功,没有GPS轨迹", DEFAULT_VECTOR_FONT_FILENAME, 24);
+ gpsNoTrackLabel->SetTextColor(Color::Red());
+ gpsNoTrackLabel->SetVisible(false); // 默认隐藏
+ scrollView_->Add(gpsNoTrackLabel);
}
// 增加额外配置
void TraingEnddataView::BonusdataView() {
delete labelcalories;
labelcalories = nullptr;
}
+ if (gpsNoTrackLabel) {
+ delete gpsNoTrackLabel;
+ gpsNoTrackLabel = nullptr;
+ }
/* 删除图片 label */
if (imageIcon) {
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stride length set: %s\r\n",
strideStr.c_str()); // 打印步幅
}
+ // 判断是否需要GPS
+ if(TraingModel::GetInstance()->IsNeedGPS(enddata->sportId) == false)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "该运动项不需要GPS");
+ return;
+ }
#if defined(BOARD_W9) || defined(BOARD_N9)
//读取一下gps文件
std::string gpsFilePath =
GetRootContainer()->SetOnDragListener(presenter_);
SetKeyActListener();
+
+ // 判断是否需要GPS
+ if(TraingModel::GetInstance()->IsNeedGPS(TraingModel::GetInstance()->GetSportEvent()) == false)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "该运动项不需要GPS");
+ return;
+ }
#if defined(BOARD_W9) || defined(BOARD_N9)
///////////////////////////gps轨迹测试//////////////////////
canvas = new UICanvas();
canvas->SetPosition(33, 100);
scrollView_->Add(canvas);
GenerateTrackPoints();
- DrawTrackSegment(canvas);
- DrawMarkers(canvas);
+
+ // 检查是否有足够的GPS数据来绘制轨迹
+ std::vector<Point> canvasData = TraingModel::GetInstance()->GetCanvasData();
+ if (canvasData.size() >= 3) {
+ // 有足够数据,绘制轨迹
+ DrawTrackSegment(canvas);
+ DrawMarkers(canvas);
+ } else {
+ // 数据不足,只显示提示标签(已在GenerateTrackPoints中处理)
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPS轨迹数据不足,不绘制轨迹");
+ }
#endif
}
std::vector<Point> canvasData = TraingModel::GetInstance()->GetCanvasData();
//最小轨迹点数限制,防止绘制失败
if (canvasData.size() < 3) {
+ // GPS数据不足,显示提示标签
+ if (gpsNoTrackLabel) {
+ gpsNoTrackLabel->SetVisible(true);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPS轨迹数据不足,显示提示标签");
+ }
return;
}
+
+ // GPS数据充足,隐藏提示标签
+ if (gpsNoTrackLabel) {
+ gpsNoTrackLabel->SetVisible(false);
+ }
+
//将点位赋值
for (size_t i = 0; i < canvasData.size(); ++i) {
seg1.points.push_back(canvasData[i]);
return ExerciseClass::FREE_TRAINING;
}
}
+/*判断是否为需要Gps的运动*/
+bool TraingModel::IsNeedGPS(UIResourceTextId sportId_) {
+ //跑步 走路 骑行需要GPS
+ switch (sportId_) {
+ case UIResourceTextId::STR_EXERCISE_OUTDOORRUNNING:
+ case UIResourceTextId::STR_EXERCISE_OUTDOORWALKING:
+ case UIResourceTextId::STR_EXERCISE_INDOORRUNNING:
+ case UIResourceTextId::STR_EXERCISE_INDOORWALKING:
+ case UIResourceTextId::STR_EXERCISE_TREADMILL:
+ case UIResourceTextId::STR_EXERCISE_STROLLMACHINE:
+ return true;
+ default:
+ return false;
+ }
+}
/*判断是否为特殊运动*/
void TraingModel::IsSpecialSport(UIResourceTextId sportId_) {
switch (sportId_) {
{\r
//默认前往运动卡片\r
AppViewId viewid = VIEW_TRAININGCRAD;\r
- #if defined(BOARD_W9) || defined(BOARD_N9)\r
- bool gps_status = TraingModel::GetInstance()->GetGPSConnectState();\r
- if (!gps_status)\r
+ /*判断是否需要GPS*/\r
+ if(TraingModel::GetInstance()->IsNeedGPS(TraingModel::GetInstance()->GetSportEvent()) == true)\r
{\r
- //未连接进入GPS提示界面\r
- viewid = VIEW_TRAINING_GPSNOTE;\r
+ #if defined(BOARD_W9) || defined(BOARD_N9)\r
+ bool gps_status = TraingModel::GetInstance()->GetGPSConnectState();\r
+ if (!gps_status)\r
+ {\r
+ //未连接进入GPS提示界面\r
+ viewid = VIEW_TRAINING_GPSNOTE;\r
+ }\r
+ #endif\r
}\r
- #endif\r
NativeAbility::GetInstance().ChangeSlice(viewid);\r
// 获取运动项目\r
ExerciseClass type = TraingModel::GetInstance()->GetSportId();\r
TraingCardPresenter::GetInstance()->OpenSensor(type);\r
// 设置为手表开启运动\r
TraingModel::GetInstance()->SetSportOpenWay(false);\r
- enter_flag = true;\r
+ // 如果是进入运动卡片,设置进入标志位\r
+ if(viewid == VIEW_TRAININGCRAD)\r
+ {\r
+ // 设置进入标志位\r
+ enter_flag = true;\r
+ }\r
}\r
return true;\r
}\r
\r
void TraingNomalPresenter::Notify()\r
{\r
+ /*判断是否需要GPS*/\r
+ if(TraingModel::GetInstance()->IsNeedGPS(TraingModel::GetInstance()->GetSportEvent()) == false)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "该运动项不需要GPS");\r
+ return;\r
+ }\r
//获取gps定位状态\r
TraingNomalView::GetInstance()->updateview();\r
}\r
TraingNomalView::TraingNomalView()
{
- TraingModel::GetInstance()->start_heart_gps();
+ /*判断是否需要GPS*/
+ if(TraingModel::GetInstance()->IsNeedGPS(TraingModel::GetInstance()->GetSportEvent()) == true)
+ {
+ TraingModel::GetInstance()->start_heart_gps();
+ }
g_pTraingNomalView = this;
}
buttonGo_->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingNomalPresenter::GetInstance()));
buttonSet_->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingNomalPresenter::GetInstance()));
- AddViewToRootContainer(buttonGo_);
+ AddViewToRootContainer(buttonGo_);
AddViewToRootContainer(buttonSet_);
+ /*判断是否需要GPS*/
+ if(TraingModel::GetInstance()->IsNeedGPS(sport_id) == false)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "该运动项不需要GPS");
+ return;
+ }
#if defined(BOARD_W9) || defined(BOARD_N9)
InitUILabel(heartrate_label_, -32, 230, 200, 60, "heartrate_label_", "--", DEFAULT_VECTOR_FONT_FILENAME, 30);
AddViewToRootContainer(heartrate_label_);