Flutter健康数据连接插件flutter_health_connect的使用

Flutter Health Connect 插件的使用

Flutter Health Connect 插件为Google Health Connect提供了集成支持。Health Connect允许您简单地存储和连接健康与健身应用之间的数据。

要求

Android

  • minSdkVersion: 26(推荐28)
  • compileSdkVersion: 33
  • 该包要求Flutter版本 2.5.0 或更高。

如何安装

Android

为了在应用中与Health Connect进行交互,需要在您的AndroidManifest.xml文件中声明Health Connect包名:

<!-- 检查Health Connect是否已安装 -->
<queries>
    <package android:name="com.google.android.apps.healthdata" />
</queries>

每个读取或写入的数据类型都需要在清单中通过权限来声明。完整权限列表及其对应的数据类型,请参见这里

例如,添加如下权限到您的AndroidManifest.xml

<uses-permission android:name="android.permission.health.READ_ACTIVE_CALORIES_BURNED"/>
<uses-permission android:name="android.permission.health.WRITE_ACTIVE_CALORIES_BURNED"/>
...
<uses-permission android:name="android.permission.health.WRITE_WEIGHT"/>

在您的MainActivity声明内添加对health_permissions的引用,并为Health Connect权限操作添加一个意图过滤器:

<activity android:name=".MainActivity">
    <meta-data android:name="health_permissions" android:resource="@array/health_permissions" />

    <intent-filter>
        <action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
    </intent-filter>
</activity>

使用方法

首先导入flutter_health_connect插件:

import 'package:flutter_health_connect/flutter_health_connect.dart';

示例代码

下面是一个完整的示例demo,展示了如何使用flutter_health_connect插件来检查API支持、验证可用性、请求权限并获取记录。

import 'package:flutter/material.dart';
import 'package:flutter_health_connect/flutter_health_connect.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<HealthConnectDataType> types = [
    HealthConnectDataType.Steps,
    HealthConnectDataType.HeartRate,
    HealthConnectDataType.SleepSession,
    HealthConnectDataType.OxygenSaturation,
    HealthConnectDataType.RespiratoryRate,
  ];

  bool readOnly = false;
  String resultText = '';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Health Connect'),
        ),
        body: ListView(
          padding: const EdgeInsets.all(16),
          children: [
            ElevatedButton(
              onPressed: () async {
                var result = await HealthConnectFactory.isApiSupported();
                setState(() {resultText = 'isApiSupported: $result';});
              },
              child: const Text('isApiSupported'),
            ),
            // 其他按钮如上所示...
            Text(resultText),
          ],
        ),
      ),
    );
  }
}

这个例子包含了多个按钮,分别用于检查API支持情况、验证Health Connect是否安装、请求权限以及获取特定时间范围内的健康记录等操作。请根据实际需求调整数据类型列表types以及相应的处理逻辑。


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

1 回复

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


当然,以下是一个关于如何使用Flutter健康数据连接插件 flutter_health_connect 的示例代码案例。这个示例将展示如何请求权限、读取步数数据以及处理数据。

首先,确保你的 pubspec.yaml 文件中已经添加了 flutter_health_connect 依赖:

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

然后运行 flutter pub get 来获取依赖。

接下来,你需要配置 AndroidManifest.xmlInfo.plist 来请求必要的权限。例如,读取步数数据需要 ACTIVITY_RECOGNITION 权限。

Android 配置 (AndroidManifest.xml)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

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

iOS 配置 (Info.plist)

Info.plist 中添加以下键和值:

<key>NSHealthShareUsageDescription</key>
<string>We need access to your health data to provide better services.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>We need access to your health data to provide better services.</string>

Flutter 代码示例

以下是一个简单的 Flutter 应用示例,它请求健康数据权限并读取步数数据:

import 'package:flutter/material.dart';
import 'package:flutter_health_connect/flutter_health_connect.dart';

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

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

class _MyAppState extends State<MyApp> {
  FlutterHealthConnect? _health;
  List<HealthDataType> _requestedTypes = [
    HealthDataType.STEPS,
  ];
  List<HealthDataRecord>? _stepsData;

  @override
  void initState() {
    super.initState();
    _health = FlutterHealthConnect();
    _requestPermissions();
  }

  Future<void> _requestPermissions() async {
    bool result = await _health!.requestPermissions(_requestedTypes);
    if (result) {
      _fetchStepsData();
    } else {
      // 处理权限请求失败的情况
      print('Permission request denied');
    }
  }

  Future<void> _fetchStepsData() async {
    DateTime startDate = DateTime.now().subtract(Duration(days: 7));
    DateTime endDate = DateTime.now();
    HealthDataQuery query = HealthDataQuery(
      startDate: startDate,
      endDate: endDate,
      dataTypes: _requestedTypes,
    );

    HealthDataResult result = await _health!.queryHealthData(query);
    if (result.success) {
      setState(() {
        _stepsData = result.data!;
      });
    } else {
      // 处理查询失败的情况
      print('Failed to fetch steps data: ${result.error}');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Health Connect Example'),
        ),
        body: _stepsData != null
            ? ListView.builder(
                itemCount: _stepsData!.length,
                itemBuilder: (context, index) {
                  HealthDataRecord record = _stepsData![index];
                  DateTime dateTime = record.startDate!;
                  dynamic value = record.values!.first;
                  return ListTile(
                    title: Text('Date: $dateTime'),
                    subtitle: Text('Steps: $value'),
                  );
                },
              )
            : Center(
                child: CircularProgressIndicator(),
              ),
      ),
    );
  }
}

说明

  1. 权限请求_requestPermissions 方法请求步数数据的权限。
  2. 数据查询_fetchStepsData 方法查询过去7天的步数数据。
  3. UI 显示:在UI中显示查询到的步数数据。

确保在实际应用中处理各种可能的错误情况,例如权限请求被拒绝、数据查询失败等。

这个示例展示了如何使用 flutter_health_connect 插件来请求权限和读取健康数据。根据实际需求,你可以扩展这个示例以支持更多的数据类型和功能。

回到顶部