From f3c6c811b6ef06e6fbf7384ac3ea2c4248bc5464 Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Mon, 24 Jun 2024 21:04:52 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E5=BF=83=E7=8E=87=E8=A1=80?= =?utf8?q?=E6=B0=A7=E5=AD=98=E5=82=A8=E4=BB=A5=E5=8F=8A=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../bloodoxygen/src/BloodCheckView.cpp | 4 +- .../bloodoxygen/src/BloodOxygenModel.cpp | 19 +- .../health_service/defult_health.json | 16 +- .../health_service/health_service.cpp | 275 +++++++++++++----- .../health_service/health_service.h | 22 +- .../nativeui/heartrate/include/HeartModel.h | 4 +- .../nativeui/heartrate/src/HeartModel.cpp | 13 + .../nativeui/heartrate/src/HeartView.cpp | 24 +- 8 files changed, 262 insertions(+), 115 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodCheckView.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodCheckView.cpp index 658836897..05ea9a9db 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodCheckView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodCheckView.cpp @@ -105,9 +105,9 @@ namespace OHOS titleLabel->SetStyle(STYLE_TEXT_FONT, 28); // titleLabel->SetText("正在检测"); titleLabel->SetTextId(STR_CHECKON); - titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - titleLabel->SetRollSpeed(0); + titleLabel->SetRollSpeed(30); titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28); BloodCheckScrollView->Add(titleLabel); /* -------------------------------------------------------------------------- */ diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp index 5194cfefd..1dcf25f05 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp @@ -17,11 +17,18 @@ namespace OHOS */ BloodOxygenModel::BloodOxygenModel() : OxygenView(false), BandoffView(false), CheckView(false), ResultView(false), CheckStatus(false), wearStatus(true) { - BloodOxygenData *data = new BloodOxygenData; - data = HealthService::GetInstance()->ReadBloodOxygenData(); - SPO2_ = data->SPO2; - timestamp_ms = data->timestamp; - delete data; + BloodOxygenData *data = HealthService::GetInstance()->ReadBloodOxygenData(); + if (data) + { + SPO2_ = data->SPO2; + timestamp_ms = data->timestamp; + delete data; + } + else + { + SPO2_ = 0; + timestamp_ms = 0; + } } BloodOxygenModel::~BloodOxygenModel() {} BloodOxygenModel *BloodOxygenModel::GetInstance(void) @@ -166,7 +173,7 @@ namespace OHOS BloodOxygenData *data = new BloodOxygenData; data->SPO2 = spo2; data->timestamp = BloodOxygenPresenter::GetInstance()->GetCurrentTime(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %lld", spo2, data->timestamp); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %d", spo2, data->timestamp); SetCheckTime(data->timestamp); HealthService::GetInstance()->UpdateBloodOxygenData(*data); delete data; diff --git a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/defult_health.json b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/defult_health.json index 77e0e542a..0abdbde23 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/defult_health.json +++ b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/defult_health.json @@ -1,21 +1,11 @@ -{ - "spo2_latest_data": { - "oxygen_value": 0, - "timestamp": 0 - }, - "spo2_data_list": [ - { - "oxygen_value": 0, - "timestamp": 0 - } - ], +data{ "heart_latest_data": { - "heart_value": 0, + "value": 0, "timestamp": 0 }, "heart_data_list": [ { - "heart_value": 0, + "value": 0, "timestamp": 0 } ] diff --git a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp index 7c1bb38fd..250a49e2c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp @@ -5,6 +5,7 @@ #include "cJSON.h" #include #include +#include "kv_store.h" namespace OHOS { @@ -40,13 +41,19 @@ namespace OHOS static constexpr const char *HEALTH_JSON_PATH = "/user/userdata/health/"; static constexpr const char *HEALTH_JSON_PATH_HEART = "/user/userdata/health/heart/"; static constexpr const char *HEALTH_JSON_PATH_OXYGEN = "/user/userdata/health/oxygen/"; - + const char *GET_HEALTH_JSON_PATH_C_STR_HEART() + { + return HEALTH_JSON_PATH_HEART; + } + const char *GET_HEALTH_JSON_PATH_C_STR_OXYGEN() + { + return HEALTH_JSON_PATH_OXYGEN; + } /* --------------------------------- 文件IO操作 --------------------------------- */ /*创建文件夹*/ bool HealthService::CreateHealthFolder() { struct stat info; - // 判断HEALTH_JSON_PATH是否存在 不存在就创建 if (stat(HEALTH_JSON_PATH, &info) != 0) { if (mkdir(HEALTH_JSON_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) @@ -55,7 +62,6 @@ namespace OHOS return false; // Failed to create folder } } - // 判断HEALTH_JSON_PATH_HEART是否存在 不存在就创建 if (stat(HEALTH_JSON_PATH_HEART, &info) != 0) { if (mkdir(HEALTH_JSON_PATH_HEART, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) @@ -64,7 +70,6 @@ namespace OHOS return false; // Failed to create folder } } - // 判断HEALTH_JSON_PATH_OXYGEN是否存在 不存在就创建 if (stat(HEALTH_JSON_PATH_OXYGEN, &info) != 0) { if (mkdir(HEALTH_JSON_PATH_OXYGEN, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) @@ -84,30 +89,34 @@ namespace OHOS return healthTypePath + currentDate + ".json"; } - const char *GET_HEALTH_JSON_PATH_C_STR_HEART() - { - return HEALTH_JSON_PATH_HEART; - } - const char *GET_HEALTH_JSON_PATH_C_STR_OXYGEN() - { - return HEALTH_JSON_PATH_OXYGEN; - } + // 加载 JSON 数据 bool HealthService::LoadJsonData(uint8_t type) { - // 创建健康数据文件夹 if (!CreateHealthFolder()) { return false; } - // 获取当天日期对应的JSON文件路径 std::string jsonFilePath = GetJsonFilePath(type); printf("GetJsonFilePath:%s\r\n", jsonFilePath.c_str()); + std::ifstream inFile(jsonFilePath); + if (!inFile.is_open()) + { + printf("Failed to open JSON file.\r\n"); + FILE *fp = fopen(jsonFilePath.c_str(), "wb"); + return false; + } - // 读取JSON文件内容 std::string jsonDataString((std::istreambuf_iterator(inFile)), std::istreambuf_iterator()); const char *jsonData = jsonDataString.c_str(); printf("jsonData:%s\r\n", jsonData); + if (jsonDataString.empty()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " jsonDataString is error"); + // printf("JSON file is empty.\r\n"); + return false; + } + if (type == HEALTH_TYPE_HEART) { heart_root = cJSON_Parse(jsonData); @@ -119,110 +128,225 @@ namespace OHOS return true; } + // 释放 JSON 数据 + void HealthService::ReleaseJsonData(uint8_t type) + { + if (type == HEALTH_TYPE_HEART) + { + cJSON_Delete(heart_root); + } + if (type == HEALTH_TYPE_OXYGEN) + { + cJSON_Delete(oxygen_root); + } + } + // 读取血氧数据 BloodOxygenData *HealthService::ReadBloodOxygenData() { - LoadJsonData(HEALTH_TYPE_OXYGEN); + if (!LoadJsonData(HEALTH_TYPE_OXYGEN)) + { + return nullptr; + } + BloodOxygenData *data = new BloodOxygenData(); cJSON *latestData = cJSON_GetObjectItem(oxygen_root, "spo2_latest_data"); - data->SPO2 = cJSON_GetObjectItem(latestData, "value")->valueint; - data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valuedouble; - cJSON_Delete(oxygen_root); + if (latestData != NULL) + { + data->SPO2 = cJSON_GetObjectItem(latestData, "value")->valueint; + data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valuedouble; + } + + ReleaseJsonData(HEALTH_TYPE_OXYGEN); + return data; + } + HeartRateData *HealthService::ReadHeartRateData() + { + if (!LoadJsonData(HEALTH_TYPE_HEART)) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error "); + return nullptr; + } + + HeartRateData *data = new HeartRateData(); + cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data"); + if (latestData != NULL) + { + // 读取心率值 + data->Heart = cJSON_GetObjectItem(latestData, "value")->valueint; + data->timestamp = static_cast(cJSON_GetObjectItem(latestData, "timestamp")->valueint); + + char *jsonStr = cJSON_Print(heart_root); + if (jsonStr != NULL) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartRootJSONData: %s", jsonStr); + cJSON_free(jsonStr); + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp %d", data->Heart, data->timestamp); + } + ReleaseJsonData(HEALTH_TYPE_HEART); + return data; } + bool HealthService::UpdateBloodOxygenData(const BloodOxygenData &data) { - LoadJsonData(HEALTH_TYPE_OXYGEN); - cJSON *latestData = cJSON_GetObjectItem(oxygen_root, "spo2_latest_data"); - if (latestData == NULL) + if (!LoadJsonData(HEALTH_TYPE_OXYGEN)) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error"); + // return false; + } + + if (oxygen_root == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "oxygen_root is first"); + oxygen_root = cJSON_CreateObject(); + if (oxygen_root == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create cJSON object for oxygen_root"); + return false; + } + cJSON_AddItemToObject(oxygen_root, "spo2_latest_data", cJSON_CreateObject()); + cJSON_AddItemToObject(oxygen_root, "spo2_data_list", cJSON_CreateArray()); + } + + cJSON *latestData = cJSON_GetObjectItemCaseSensitive(oxygen_root, "spo2_latest_data"); + if (latestData == NULL || !cJSON_IsObject(latestData)) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get spo2_latest_data object"); + cJSON_Delete(oxygen_root); + oxygen_root = nullptr; return false; } - cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.SPO2)); - cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); - // 将数据添加到列表的最后 + cJSON *SPO2 = cJSON_GetObjectItemCaseSensitive(latestData, "value"); + if (SPO2 == nullptr && cJSON_IsNumber(SPO2)) + { + // Add spo2_latest_data + cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.SPO2)); + cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); + } + else + { + cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.SPO2)); + cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); + } + + // Update or add to spo2_data_list cJSON *dataList = cJSON_GetObjectItem(oxygen_root, "spo2_data_list"); if (dataList != NULL && cJSON_IsArray(dataList)) { - cJSON *newData = cJSON_CreateObject(); - cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.SPO2)); - cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp)); - cJSON_AddItemToArray(dataList, newData); + // Check if data already exists in the list + bool dataExists = false; + cJSON *dataItem = NULL; + cJSON_ArrayForEach(dataItem, dataList) + { + cJSON *timestampItem = cJSON_GetObjectItemCaseSensitive(dataItem, "timestamp"); + if (timestampItem != NULL && cJSON_IsNumber(timestampItem) && timestampItem->valuedouble == data.timestamp) + { + cJSON_ReplaceItemInObject(dataItem, "value", cJSON_CreateNumber(data.SPO2)); + dataExists = true; + break; + } + } + + if (!dataExists) + { + cJSON *newData = cJSON_CreateObject(); + cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.SPO2)); + cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp)); + cJSON_AddItemToArray(dataList, newData); + } } - if (UpdateJsonData(HEALTH_TYPE_OXYGEN) == false) + + if (!UpdateJsonData(HEALTH_TYPE_OXYGEN)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error"); - cJSON_Delete(oxygen_root); + printf("UpdateJsonData failed.\r\n"); + ReleaseJsonData(HEALTH_TYPE_OXYGEN); return false; } - cJSON_Delete(oxygen_root); + + ReleaseJsonData(HEALTH_TYPE_OXYGEN); return true; } - HeartRateData *HealthService::ReadHeartRateData() + bool HealthService::UpdateHeartRateData(const HeartRateData &data) { - if (!LoadJsonData(HEALTH_TYPE_HEART) && (heart_root == nullptr)) + if (!LoadJsonData(HEALTH_TYPE_HEART)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData heart_root is error "); - return nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error"); + // return false; } - HeartRateData *data = new HeartRateData(); - cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data"); - // 读取心率值 - data->Heart = cJSON_GetObjectItem(latestData, "value")->valueint; - // 读取时间戳,并转换为 uint32_t 类型 - data->timestamp = static_cast(cJSON_GetObjectItem(latestData, "timestamp")->valueint); - // 打印 JSON 数据 - char *jsonStr = cJSON_Print(heart_root); - if (jsonStr != NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartRootJSONData: %s", jsonStr); - cJSON_free(jsonStr); - } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp %d", data->Heart, data->timestamp); - cJSON_Delete(heart_root); - return data; - } - bool HealthService::UpdateHeartRateData(const HeartRateData &data) - { - LoadJsonData(HEALTH_TYPE_HEART); - cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data"); - if (latestData == NULL) + if (heart_root == nullptr) { + heart_root = cJSON_CreateObject(); + if (heart_root == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create cJSON object for heart_root"); + return false; + } + + cJSON_AddItemToObject(heart_root, "heart_latest_data", cJSON_CreateObject()); + cJSON_AddItemToObject(heart_root, "heart_data_list", cJSON_CreateArray()); + } + + cJSON *latestData = cJSON_GetObjectItemCaseSensitive(heart_root, "heart_latest_data"); + if (latestData == NULL || !cJSON_IsObject(latestData)) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get heart_latest_data object"); + cJSON_Delete(heart_root); + heart_root = nullptr; return false; } - cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.Heart)); - cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); - // 将数据添加到列表的最后 - cJSON *dataList = cJSON_GetObjectItem(heart_root, "heart_data_list"); - // 获取当前数据列表长度 - int numData = cJSON_GetArraySize(dataList); + cJSON *Heart = cJSON_GetObjectItemCaseSensitive(latestData, "value"); + if (Heart == nullptr && !cJSON_IsNumber(Heart)) + { + // Add heart_latest_data + cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.Heart)); + cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); + } + else + { + cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.Heart)); + cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); + } - // 如果数据列表长度已经达到360个,不再添加新数据 - if (numData >= 360) + // // 更新heart_latest_data中的value和timestamp值 + // cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.Heart)); + // cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp)); + + cJSON *dataList = cJSON_GetObjectItem(heart_root, "heart_data_list"); + if (dataList == NULL || !cJSON_IsArray(dataList)) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heart_data_list is null or not an array"); cJSON_Delete(heart_root); + heart_root = nullptr; return false; } - if (dataList != NULL && cJSON_IsArray(dataList)) + int numData = cJSON_GetArraySize(dataList); + if (numData >= 360) { - cJSON *newData = cJSON_CreateObject(); - cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.Heart)); - cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp)); - cJSON_AddItemToArray(dataList, newData); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Data list is full (360 items)"); + return false; } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData"); + + // 添加新数据到dataList中 + cJSON *newData = cJSON_CreateObject(); + cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.Heart)); + cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp)); + cJSON_AddItemToArray(dataList, newData); + if (UpdateJsonData(HEALTH_TYPE_HEART) == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to update JSON data for heart rate"); cJSON_Delete(heart_root); + heart_root = nullptr; return false; } - cJSON_Delete(heart_root); + return true; } @@ -260,5 +384,4 @@ namespace OHOS cJSON_free(jsonData); return true; } - } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h index 2929060f1..a83c82ad4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h +++ b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-06-14 11:34:19 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-06-24 16:08:36 + * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h + */ #ifndef HEART_SERVICE_H #define HEART_SERVICE_H @@ -7,17 +13,18 @@ #define HEART_MAX_POINTS 360 namespace OHOS { - const char * GET_HEALTH_JSON_PATH_C_STR_HEART(); - const char * GET_HEALTH_JSON_PATH_C_STR_OXYGEN(); + const char *GET_HEALTH_JSON_PATH_C_STR_HEART(); + const char *GET_HEALTH_JSON_PATH_C_STR_OXYGEN(); - typedef enum { + typedef enum + { HEALTH_TYPE_HEART, HEALTH_TYPE_OXYGEN, } HEALTH_TYPE; typedef struct { - uint8_t SPO2; // 血氧值 + uint8_t SPO2; // 血氧值 uint32_t timestamp; // 最近一次检测时间 } BloodOxygenData; @@ -41,7 +48,7 @@ namespace OHOS typedef struct { - uint8_t Heart; // 心率值 + uint8_t Heart; // 心率值 uint32_t timestamp; // 最近一次检测时间 } HeartRateData; @@ -52,13 +59,14 @@ namespace OHOS ~HealthService(); static HealthService *GetInstance(void); bool CreateHealthFolder(); - bool LoadJsonData(uint8_t type); // 加载json + bool LoadJsonData(uint8_t type); // 加载json BloodOxygenData *ReadBloodOxygenData(); // 读取血氧数据 bool UpdateBloodOxygenData(const BloodOxygenData &data); // 更新血氧数据 HeartRateData *ReadHeartRateData(); // 读取心率数据 HeartPoints *ReadHeartRateDataList(); // 读取心率列表 bool UpdateHeartRateData(const HeartRateData &data); // 更新心率数据 - bool UpdateJsonData( uint8_t type); // 更新json + void ReleaseJsonData(uint8_t type); // 释放json + bool UpdateJsonData(uint8_t type); // 更新json }; } #endif // HEALTH_MODEL_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h b/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h index d7a157254..028337283 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h @@ -158,8 +158,8 @@ extern "C" bool CheckView; bool ResultView; bool CheckStatus; // 检测状态标志 - uint16_t Show_Heart_; // 显示血氧 - uint16_t Heart_; // 保存血氧 + uint16_t Show_Heart_; // 显示心率 + uint16_t Heart_; // 保存心率 uint64 TIME_; // 检测时间(存(时、分),大于24小时,改为1天前,小于1分钟为刚刚) bool initstatus = true; diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp index c56746522..a19f7a4f3 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp @@ -189,6 +189,19 @@ namespace OHOS ResultView = false; CheckStatus = false; wearStatus = true; + + HeartRateData *data = HealthService::GetInstance()->ReadHeartRateData(); + if (data != nullptr) + { + Heart_ = data->Heart; + TIME_ = data->timestamp; + delete data; + } + else + { + Heart_ = 0; + TIME_ = 0; + } } HeartModel::~HeartModel() diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp index a24feb31b..40eda2915 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp @@ -43,13 +43,19 @@ namespace OHOS { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartView::HeartView"); g_pMainView = this; - /*更新model*/ - HeartRateData *data; - data = HealthService::GetInstance()->ReadHeartRateData(); // 初始化心率值 - HeartModel::GetInstance()->UpHeartdata(data->Heart); - HeartModel::GetInstance()->SetCheckTime(data->timestamp); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp %d", data->Heart, data->timestamp); - delete data; + /*更新model 如果model数据为0,尝试再读一次*/ + if (!HeartModel::GetInstance()->GetHeartdata()) + { + HeartRateData *data; + data = HealthService::GetInstance()->ReadHeartRateData(); // 初始化心率值 + if (data != nullptr) + { + HeartModel::GetInstance()->UpHeartdata(data->Heart); + HeartModel::GetInstance()->SetCheckTime(data->timestamp); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp %d", data->Heart, data->timestamp); + } + delete data; + } } HeartView::~HeartView() @@ -170,9 +176,9 @@ namespace OHOS titleLabel->SetStyle(STYLE_TEXT_FONT, TITLE_FONT_SIZE); // titleLabel->SetText("心率检测结果"); titleLabel->SetTextId(STR_HEARTDATA); - titleLabel->SetLineBreakMode(UILabelExt::LINE_BREAK_ADAPT); + titleLabel->SetLineBreakMode(UILabelExt::LINE_BREAK_MARQUEE); titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - titleLabel->SetRollSpeed(0); + titleLabel->SetRollSpeed(30); titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, TITLE_FONT_SIZE); UpHeartText(); -- 2.17.1