diff --git a/app/(tabs)/statistics.tsx b/app/(tabs)/statistics.tsx
index 4c12fac..c43fbd3 100644
--- a/app/(tabs)/statistics.tsx
+++ b/app/(tabs)/statistics.tsx
@@ -64,7 +64,7 @@ export default function ExploreScreen() {
// 开发调试:设置为true来使用mock数据
// 在真机测试时,可以暂时设置为true来验证组件显示逻辑
- const useMockData = __DEV__ || false; // 改为true来启用mock数据调试
+ const useMockData = false; // 改为true来启用mock数据调试
const { pushIfAuthedElseLogin, isLoggedIn } = useAuthGuard();
@@ -92,7 +92,7 @@ export default function ExploreScreen() {
const hourlySteps = useMockData ? (mockData?.hourlySteps ?? []) : (healthData?.hourlySteps ?? []);
const activeCalories = useMockData ? (mockData?.activeEnergyBurned ?? null) : (healthData?.activeEnergyBurned ?? null);
const basalMetabolism: number | null = useMockData ? (mockData?.basalEnergyBurned ?? null) : (healthData?.basalEnergyBurned ?? null);
- const hrvValue = useMockData ? (mockData?.hrv ?? null) : (healthData?.hrv ?? null);
+
const oxygenSaturation = useMockData ? (mockData?.oxygenSaturation ?? null) : (healthData?.oxygenSaturation ?? null);
// 调试HRV数据
@@ -100,7 +100,6 @@ export default function ExploreScreen() {
console.log('useMockData:', useMockData);
console.log('mockData?.hrv:', mockData?.hrv);
console.log('healthData?.hrv:', healthData?.hrv);
- console.log('final hrvValue:', hrvValue);
console.log('healthData:', healthData);
console.log('==================');
@@ -563,9 +562,7 @@ export default function ExploreScreen() {
diff --git a/components/StressMeter.tsx b/components/StressMeter.tsx
index 86b01b4..cad2bd6 100644
--- a/components/StressMeter.tsx
+++ b/components/StressMeter.tsx
@@ -1,17 +1,15 @@
+import { fetchHRVForDate } from '@/utils/health';
import dayjs from 'dayjs';
import { LinearGradient } from 'expo-linear-gradient';
-import React, { useState } from 'react';
+import React, { useEffect, useState } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { StressAnalysisModal } from './StressAnalysisModal';
interface StressMeterProps {
- value: number | null;
- updateTime?: Date;
- style?: any;
- hrvValue: number | null;
+ curDate: Date
}
-export function StressMeter({ value, updateTime, style, hrvValue }: StressMeterProps) {
+export function StressMeter({ curDate }: StressMeterProps) {
// 格式化更新时间显示
const formatUpdateTime = (date: Date): string => {
const now = dayjs();
@@ -41,12 +39,31 @@ export function StressMeter({ value, updateTime, style, hrvValue }: StressMeterP
// HRV 范围: 30-110ms,对应压力指数: 100-0
// 线性映射: stressIndex = 100 - ((hrv - 30) / (110 - 30)) * 100
- const normalizedHrv = Math.max(30, Math.min(110, hrv));
- const stressIndex = 100 - ((normalizedHrv - 30) / (110 - 30)) * 100;
+ const normalizedHrv = Math.max(30, Math.min(130, hrv));
+ const stressIndex = 100 - ((normalizedHrv - 30) / (130 - 30)) * 100;
return Math.round(stressIndex);
};
+ const [hrvValue, setHrvValue] = useState(0)
+
+
+ useEffect(() => {
+ getHrvData()
+ }, [curDate])
+
+ const getHrvData = async () => {
+ try {
+ const data = await fetchHRVForDate(curDate)
+
+ if (data) {
+ setHrvValue(data)
+ }
+ } catch (error) {
+
+ }
+ }
+
// 使用传入的 hrvValue 进行转换
const stressIndex = convertHrvToStressIndex(hrvValue);
@@ -72,7 +89,7 @@ export function StressMeter({ value, updateTime, style, hrvValue }: StressMeterP
return (
<>
@@ -81,15 +98,15 @@ export function StressMeter({ value, updateTime, style, hrvValue }: StressMeterP
压力
- {updateTime && (
+ {/* {updateTime && (
{formatUpdateTime(updateTime)}
- )}
+ )} */}
{/* 数值显示区域 */}
- {stressIndex === null ? '--' : stressIndex}
- %
+ {hrvValue || '--'}
+ ms
{/* 进度条区域 */}
@@ -116,7 +133,7 @@ export function StressMeter({ value, updateTime, style, hrvValue }: StressMeterP
visible={showStressModal}
onClose={() => setShowStressModal(false)}
hrvValue={hrvValue}
- updateTime={updateTime || new Date()}
+ // updateTime={updateTime || new Date()}
/>
>
);
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 3839b59..59524e7 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -116,7 +116,7 @@ PODS:
- ExpoModulesCore
- ExpoSystemUI (6.0.7):
- ExpoModulesCore
- - ExpoUI (0.2.0-beta.0):
+ - ExpoUI (0.2.0-beta.1):
- ExpoModulesCore
- ExpoWebBrowser (15.0.6):
- ExpoModulesCore
@@ -3018,9 +3018,9 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - SDWebImage (5.21.2):
- - SDWebImage/Core (= 5.21.2)
- - SDWebImage/Core (5.21.2)
+ - SDWebImage (5.21.1):
+ - SDWebImage/Core (= 5.21.1)
+ - SDWebImage/Core (5.21.1)
- SDWebImageAVIFCoder (0.11.0):
- libavif/core (>= 0.11.0)
- SDWebImage (~> 5.10)
@@ -3444,7 +3444,7 @@ SPEC CHECKSUMS:
ExpoSplashScreen: 1665809071bd907c6fdbfd9c09583ee4d51b41d4
ExpoSymbols: 3efee6865b1955fe3805ca88b36e8674ce6970dd
ExpoSystemUI: 6cd74248a2282adf6dec488a75fa532d69dee314
- ExpoUI: b219c02a788f7cefd7976e657e97c14aea64dac1
+ ExpoUI: 1e4b3045678eb66004d78d9a6602afdcbdc06bbd
ExpoWebBrowser: 84d4438464d9754a4c1f1eaa97cd747f3752187e
EXTaskManager: eedcd03c1a574c47d3f48d83d4e4659b3c1fa29b
fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6
@@ -3539,7 +3539,7 @@ SPEC CHECKSUMS:
RNSentry: f2c39f1113e22413c9bb6e3faa6b27f110d95eaf
RNSVG: 6f39605a4c4d200b11435c35bd077553c6b5963a
RNWorklets: ad0606bee2a8103c14adb412149789c60b72bfb2
- SDWebImage: 9f177d83116802728e122410fb25ad88f5c7608a
+ SDWebImage: f29024626962457f3470184232766516dee8dfea
SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90
SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c
SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380
diff --git a/package-lock.json b/package-lock.json
index 6626e68..5378fcf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,7 +8,7 @@
"name": "digital-pilates",
"version": "1.0.2",
"dependencies": {
- "@expo/ui": "~0.2.0-beta.0",
+ "@expo/ui": "~0.2.0-beta.1",
"@expo/vector-icons": "^15.0.2",
"@react-native-async-storage/async-storage": "^2.2.0",
"@react-native-community/datetimepicker": "^8.4.4",
@@ -2295,9 +2295,9 @@
"license": "MIT"
},
"node_modules/@expo/ui": {
- "version": "0.2.0-beta.0",
- "resolved": "https://registry.npmjs.org/@expo/ui/-/ui-0.2.0-beta.0.tgz",
- "integrity": "sha512-bxLMKBbodqLzGMC8GVPZw6FugB2LpnocgdBP5JYJ8oWojy7RkGl6fcki+97w6EJagRr/+82XAGTCzyOUFBUCoQ==",
+ "version": "0.2.0-beta.1",
+ "resolved": "https://registry.npmjs.org/@expo/ui/-/ui-0.2.0-beta.1.tgz",
+ "integrity": "sha512-9eEbZmpWHLbpApwWNpeAC7Xf4rzlWsBcgHzGGN1QAfKvAq2S9eJfoIqPergrnnjN8Ju8G3EAos1DCk84q3oBgw==",
"license": "MIT",
"peerDependencies": {
"expo": "*",
diff --git a/services/backgroundTaskManager.ts b/services/backgroundTaskManager.ts
index bf236a0..44cb2e2 100644
--- a/services/backgroundTaskManager.ts
+++ b/services/backgroundTaskManager.ts
@@ -40,10 +40,6 @@ async function executeWaterReminderTask(): Promise {
// 检查时间限制(避免深夜打扰)
const currentHour = new Date().getHours();
- if (currentHour < 8 || currentHour >= 21) {
- console.log(`当前时间${currentHour}点,不在提醒时间范围内,跳过喝水提醒`);
- return;
- }
// 获取用户名
const userName = userProfile?.name || '朋友';
@@ -152,7 +148,7 @@ async function executeBackgroundTasks(): Promise {
return;
}
- await sendTestNotification()
+ // await sendTestNotification()
// 执行喝水提醒检查任务
await executeWaterReminderTask();
diff --git a/utils/health.ts b/utils/health.ts
index 4b4ef4b..5a1827a 100644
--- a/utils/health.ts
+++ b/utils/health.ts
@@ -461,27 +461,7 @@ async function fetchHeartRateVariability(options: HealthDataOptions): Promise ({
- value: sample.value,
- startDate: sample.startDate,
- endDate: sample.endDate
- })));
-
- const latestHrv = res[res.length - 1];
- if (latestHrv && latestHrv.value !== undefined && latestHrv.value !== null) {
- // HealthKit 中的 HRV 数据已经是毫秒单位,无需转换
- const hrvValue = Math.round(latestHrv.value);
- console.log('最终HRV值:', hrvValue);
- resolve(hrvValue);
- } else {
- console.warn('HRV样本值无效:', latestHrv);
- resolve(null);
- }
+ resolve(Math.round(res[0].value * 1000))
});
});
}
diff --git a/utils/notificationHelpers.ts b/utils/notificationHelpers.ts
index 2bffcdc..c830dd6 100644
--- a/utils/notificationHelpers.ts
+++ b/utils/notificationHelpers.ts
@@ -657,7 +657,7 @@ export class WaterNotificationHelpers {
): Promise {
try {
// 检查时间限制:早上9点以前和晚上9点以后不通知
- if (currentHour < 9 || currentHour >= 21) {
+ if (currentHour < 9 || currentHour >= 23) {
console.log(`当前时间${currentHour}点,不在通知时间范围内(9:00-21:00),跳过喝水提醒`);
return false;
}