You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何从Google Fit(安卓)与iOS Health获取消耗卡路里数据?

在Flutter中通过Health包获取安卓/iOS设备的卡路里消耗数据

要通过Flutter的Health包获取卡路里消耗数据,需要针对安卓和iOS平台分别配置权限,并正确调用对应的健康数据类型接口,以下是具体实现步骤:

1. 平台权限配置

iOS

在Info.plist中添加健康权限描述,说明应用访问健康数据的用途:

<key>NSHealthShareUsageDescription</key>
<string>需要访问您的健康数据以计算卡路里消耗</string>
<key>NSHealthUpdateUsageDescription</key>
<string>需要访问您的健康数据以计算卡路里消耗</string>

安卓

在AndroidManifest.xml中添加所需权限(适配安卓10及以上版本):

<uses-permission android:name="android.permission.READ_HEALTH_DATA" />
<uses-permission android:name="android.permission.WRITE_HEALTH_DATA" />
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />

2. 代码实现

Health包支持两种核心卡路里数据类型:

  • HealthDataType.activeEnergyBurned:活动过程中消耗的卡路里
  • HealthDataType.basalEnergyBurned:基础代谢消耗的卡路里(部分设备可能不提供)

以下是完整的获取示例:

import 'package:health/health.dart';

Future<void> fetchCalories() async {
  // 初始化Health实例
  final health = Health();
  
  // 定义需要获取的卡路里数据类型
  final calorieTypes = [
    HealthDataType.activeEnergyBurned,
    HealthDataType.basalEnergyBurned,
  ];

  // 请求权限
  final hasPermissions = await health.requestAuthorization(calorieTypes);
  if (!hasPermissions) {
    print("未获取到健康数据权限");
    return;
  }

  try {
    // 设置时间范围(示例:获取过去24小时的数据)
    final endDate = DateTime.now();
    final startDate = endDate.subtract(const Duration(hours: 24));

    // 获取健康数据
    final healthData = await health.getHealthDataFromTypes(
      startDate,
      endDate,
      calorieTypes,
    );

    // 计算总卡路里消耗
    double totalCalories = 0;
    for (final dataPoint in healthData) {
      // 注意:部分平台返回的单位是焦耳,需转换为千卡(1千卡 = 4184焦耳)
      final value = (dataPoint.value as num).toDouble();
      final convertedValue = dataPoint.unit == HealthUnit.joule 
          ? value / 4184 
          : value;
      
      totalCalories += convertedValue;
    }

    print("总卡路里消耗:${totalCalories.toStringAsFixed(2)} kcal");
  } catch (e) {
    print("获取卡路里数据失败:$e");
  }
}

3. 注意事项

  • iOS设备上,需确保用户在「健康」App中已授权应用访问卡路里数据;安卓设备需确保Google Fit(或系统健康服务)已授权应用。
  • 部分安卓设备可能不提供basalEnergyBurned数据,仅能获取活动消耗的卡路里,需做好空值兼容。
  • 不同平台返回的单位可能不同(iOS通常返回千卡,安卓部分设备返回焦耳),需根据HealthUnit进行单位转换。

内容的提问来源于stack exchange,提问作者AndyC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:37:25