feat: 新增基础代谢率功能及相关组件
- 在健康数据中引入基础代谢率的读取和展示,支持用户记录健身进度 - 更新统计页面,替换BMI卡片为基础代谢卡片,提升用户体验 - 优化健康数据获取逻辑,确保基础代谢数据的准确性 - 更新权限描述,明确应用对健康数据的访问需求
This commit is contained in:
@@ -7,6 +7,7 @@ const PERMISSIONS: HealthKitPermissions = {
|
||||
read: [
|
||||
AppleHealthKit.Constants.Permissions.StepCount,
|
||||
AppleHealthKit.Constants.Permissions.ActiveEnergyBurned,
|
||||
AppleHealthKit.Constants.Permissions.BasalEnergyBurned,
|
||||
AppleHealthKit.Constants.Permissions.SleepAnalysis,
|
||||
AppleHealthKit.Constants.Permissions.HeartRateVariability,
|
||||
AppleHealthKit.Constants.Permissions.ActivitySummary,
|
||||
@@ -21,6 +22,7 @@ const PERMISSIONS: HealthKitPermissions = {
|
||||
export type TodayHealthData = {
|
||||
steps: number;
|
||||
activeEnergyBurned: number; // kilocalories
|
||||
basalEnergyBurned: number; // kilocalories - 基础代谢率
|
||||
sleepDuration: number; // 睡眠时长(分钟)
|
||||
hrv: number | null; // 心率变异性 (ms)
|
||||
// 健身圆环数据
|
||||
@@ -73,7 +75,7 @@ export async function fetchHealthDataForDate(date: Date): Promise<TodayHealthDat
|
||||
console.log('查询选项:', options);
|
||||
|
||||
// 并行获取所有健康数据,包括ActivitySummary
|
||||
const [steps, calories, sleepDuration, hrv, activitySummary] = await Promise.all([
|
||||
const [steps, calories, basalMetabolism, sleepDuration, hrv, activitySummary] = await Promise.all([
|
||||
// 获取步数
|
||||
new Promise<number>((resolve) => {
|
||||
AppleHealthKit.getStepCount({
|
||||
@@ -110,6 +112,24 @@ export async function fetchHealthDataForDate(date: Date): Promise<TodayHealthDat
|
||||
});
|
||||
}),
|
||||
|
||||
// 获取基础代谢率
|
||||
new Promise<number>((resolve) => {
|
||||
AppleHealthKit.getBasalEnergyBurned(options, (err, res) => {
|
||||
if (err) {
|
||||
console.error('获取基础代谢失败:', err);
|
||||
return resolve(0);
|
||||
}
|
||||
if (!res || !Array.isArray(res) || res.length === 0) {
|
||||
console.warn('基础代谢数据为空或格式错误');
|
||||
return resolve(0);
|
||||
}
|
||||
console.log('基础代谢数据:', res);
|
||||
// 求和该日内的所有记录(单位:千卡)
|
||||
const total = res.reduce((acc: number, item: any) => acc + (item?.value || 0), 0);
|
||||
resolve(total);
|
||||
});
|
||||
}),
|
||||
|
||||
// 获取睡眠时长
|
||||
new Promise<number>((resolve) => {
|
||||
AppleHealthKit.getSleepSamples(options, (err, res) => {
|
||||
@@ -181,11 +201,12 @@ export async function fetchHealthDataForDate(date: Date): Promise<TodayHealthDat
|
||||
})
|
||||
]);
|
||||
|
||||
console.log('指定日期健康数据获取完成:', { steps, calories, sleepDuration, hrv, activitySummary });
|
||||
console.log('指定日期健康数据获取完成:', { steps, calories, basalMetabolism, sleepDuration, hrv, activitySummary });
|
||||
|
||||
return {
|
||||
steps,
|
||||
activeEnergyBurned: calories,
|
||||
basalEnergyBurned: basalMetabolism,
|
||||
sleepDuration,
|
||||
hrv,
|
||||
// 健身圆环数据
|
||||
|
||||
Reference in New Issue
Block a user