Flutter健康与健身数据插件fitness的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter健康与健身数据插件fitness的使用

Flutter插件简介

Flutter插件fitness用于读取步数数据。它在iOS上封装了HealthKit,在Android上封装了GoogleFit。

相关文档

👉 Korean

开始使用

查看示例目录以获取一个示例应用。

添加依赖项

pubspec.yaml文件中添加fitness作为依赖项。

dependencies:
  fitness: ^x.x.x

Android集成

  1. 启用Fitness API。
  2. 获得OAuth 2.0客户端ID。

iOS集成

  1. 启用HealthKit。
  2. 在Info.plist文件中添加NSHealthShareUsageDescription键。

使用说明

检查权限

检查用户是否已授予必要的数据访问权限。

void _hasPermission() async {
  final result = await Fitness.hasPermission();
}

注意: Apple认为甚至用户是否接受或拒绝了对HealthKit的读取权限都属于敏感信息。因此,HealthKit没有明确的方法来检查权限。

工作流程: 检查您是否可以在过去一个月内读取数据,以此来判断是否有读取权限。

void _hasPermission() async {
  final result = await Fitness.hasPermission();
  print('[hasPermission]::$result');

  if (!mounted) {
    return;
  }

  setState(() {
    _status = result ? PermissionStatus.granted : PermissionStatus.denied;
  });

  if (_status != PermissionStatus.granted) {
    return;
  }

  _onFilterChanged(DateFilter.daily);
}
请求权限

启动授权流程。

void _requestPermission() async {
  final result = await Fitness.requestPermission();
  print('[requestPermission]::$result');

  _hasPermission();
}
撤销权限

Android:

  • 取消所有授予给Google Fit的OAuth权限,并移除应用程序中创建的所有订阅。

iOS:

  • 功能不支持,总是返回true。
void _revokePermission() async {
  final result = await Fitness.revokePermission();
  print('[revokePermission]::$result');

  _hasPermission();
}
读取数据

请求用户的步数数据,通过Google Fit或Health Kit。

void _read({
  required TimeRange timeRange,
  int bucketByTime = 1,
  TimeUnit timeUnit = TimeUnit.days,
}) async {
  final results = await Fitness.read(
    timeRange: timeRange,
    bucketByTime: bucketByTime,
    timeUnit: timeUnit,
  );
  print('[READ]::$results');

  if (!mounted) {
    return;
  }

  setState(() {
    _dataPoints = results;
  });
}

示例代码


更多关于Flutter健康与健身数据插件fitness的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter健康与健身数据插件fitness的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成并使用fitness插件来获取健康与健身数据的示例代码。请注意,fitness插件通常指的是Google提供的fitness插件,用于访问Google Fit数据。确保你已经添加了必要的依赖,并且你的应用有适当的权限。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加fitness插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  google_fit: ^x.y.z  # 替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 配置Android权限

android/app/src/main/AndroidManifest.xml中添加必要的权限:

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

3. 请求权限

在Flutter代码中,请求必要的权限。可以使用permission_handler插件来请求权限(需要先添加该插件的依赖)。

import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermissions() async {
  bool activityRecognitionStatus = await Permission.activityRecognition.status.then((status) {
    if (status.isGranted) {
      return true;
    } else if (status.isDenied || status.isPermanentlyDenied) {
      Permission.activityRecognition.request();
    }
    return false;
  });

  bool bodySensorsStatus = await Permission.bodySensors.status.then((status) {
    if (status.isGranted) {
      return true;
    } else if (status.isDenied || status.isPermanentlyDenied) {
      Permission.bodySensors.request();
    }
    return false;
  });

  if (!activityRecognitionStatus || !bodySensorsStatus) {
    // Handle the case where permissions are not granted
  }
}

4. 初始化Fitness客户端并获取数据

使用fitness插件来初始化Fitness客户端并获取数据。

import 'package:google_fit/google_fit.dart' as googleFit;
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initFitness();
  }

  Future<void> initFitness() async {
    bool isAvailable = await googleFit.availability();
    if (isAvailable) {
      await googleFit.authorize([
        googleFit.ScopeType.ACTIVITY_READ,
        googleFit.ScopeType.BODY_READ,
        googleFit.ScopeType.LOCATION_READ,
      ]);

      // 获取最近一天的步数数据
      DateTime start = DateTime.now().subtract(Duration(days: 1));
      DateTime end = DateTime.now();

      DataReadResponse response = await googleFit.readData(
        DataType.TYPE_STEP_COUNT_DELTA,
        startTime: start,
        endTime: end,
      );

      // 处理数据
      if (response.dataSet != null && response.dataSet.isNotEmpty) {
        for (DataSet dataSet in response.dataSet) {
          for (DataPoint dataPoint in dataSet.dataPoints) {
            for (FieldValue fieldValue in dataPoint.fieldValues) {
              print('Steps: ${fieldValue.value.toInt()}');
            }
          }
        }
      }
    } else {
      // 处理Fitness API不可用的情况
      print('Google Fit is not available on this device.');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Google Fit Integration'),
        ),
        body: Center(
          child: Text('Check console for step count data.'),
        ),
      ),
    );
  }
}

注意事项

  1. 错误处理:在实际应用中,请添加适当的错误处理逻辑。
  2. 权限请求结果:处理权限请求的结果,如果用户拒绝权限,可能需要提示用户为什么需要这些权限。
  3. 插件版本:确保使用的是最新版本的插件,并查阅官方文档以获取最新的API更改和最佳实践。

这个示例展示了如何集成Google Fit API并获取步数数据。你可以根据需要修改代码来获取其他类型的健身数据,如心率、卡路里消耗等。

回到顶部