Flutter健康数据访问插件health_kit的使用
Flutter健康数据访问插件health_kit的使用
插件简介
health_kit
是一个用于读取 iOS 和 Android 设备上健康和健身数据的插件。它提供了访问用户步数、心率等健康数据的功能。
使用方法
要使用此插件,请在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
health_kit: ^x.x.x
开始使用
1 Android
-
首先,确保已启用 Google Fit API 并获取 OAuth 2.0 客户端 ID。
-
在
Info.plist
中添加以下条目:<key>NSHealthShareUsageDescription</key> <string>We will sync your data with the Apple Health app to give you better insights</string> <key>NSHealthUpdateUsageDescription</key> <string>We will sync your data with the Apple Health app to give you better insights</string>
-
然后,在项目的 Capabilities 标签中启用 “HealthKit”。
-
iOS
- 启用 HealthKit 服务。
示例代码
下面是一个完整的示例代码,展示了如何使用 health_kit
插件来获取昨天的步数数据。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:health_kit/health_kit.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var total = 0.0;
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Health Kit'),
),
body: Container(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
TextButton(
child: Text("Get Yesterday's Step count"),
onPressed: () async {
getYesterdayStep();
},
),
Text(total.toString()),
],
),
),
),
);
}
Future<bool> readPermissionsForHealthKit() async {
try {
final responses = await HealthKit.hasPermissions([DataType.STEP_COUNT]);
if (!responses) {
final value = await HealthKit.requestPermissions([DataType.STEP_COUNT]);
return value;
} else {
return true;
}
} on UnsupportedException catch (e) {
// 抛出异常时打印错误信息
print(e);
return false;
}
}
void getYesterdayStep() async {
var permissionsGiven = await readPermissionsForHealthKit();
if (permissionsGiven) {
var current = DateTime.now();
var dateFrom = DateTime.now().subtract(Duration(
hours: current.hour + 24,
minutes: current.minute,
seconds: current.second,
));
var dateTo = dateFrom.add(Duration(
hours: 23,
minutes: 59,
seconds: 59,
));
print('dateFrom: $dateFrom');
print('dateTo: $dateTo');
try {
var results = await HealthKit.read(
DataType.STEP_COUNT,
dateFrom: dateFrom,
dateTo: dateTo,
);
if (results != null) {
for (var result in results) {
total += result.value;
}
}
setState(() {});
print('value: $total');
} on Exception catch (ex) {
print('Exception in getYesterdayStep: $ex');
}
}
}
}
更多关于Flutter健康数据访问插件health_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter健康数据访问插件health_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用health_kit
插件来访问健康数据的示例代码。这个示例将展示如何请求权限并读取用户的步数数据。
首先,确保你已经在pubspec.yaml
文件中添加了health_kit
依赖:
dependencies:
flutter:
sdk: flutter
health_kit: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,按照以下步骤配置和使用health_kit
插件:
-
配置iOS权限:
在
ios/Runner/Info.plist
文件中添加以下权限请求:<key>NSHealthShareUsageDescription</key> <string>App needs access to HealthKit.</string> <key>NSHealthUpdateUsageDescription</key> <string>App needs access to HealthKit.</string>
同时,确保在Xcode中启用了HealthKit功能。
-
配置Android权限:
在
android/app/src/main/AndroidManifest.xml
文件中添加以下权限请求:<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
并在
android/app/build.gradle
文件中添加以下配置以支持HealthKit(对于Android,主要是同步数据到Google Fit,然后通过Google Fit API访问数据,但health_kit
插件本身在Android上依赖Google Fit):implementation 'com.google.android.gms:play-services-fitness:20.0.0'
-
请求权限并读取步数数据:
在你的Dart代码中,你可以按照以下方式使用
health_kit
插件:import 'package:flutter/material.dart'; import 'package:health_kit/health_kit.dart'; void main() { runApp(MyApp()); } class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { HealthKit? _healthKit; List<HealthKitType>? _types; List<HealthKitSample>? _samples; @override void initState() { super.initState(); _initHealthKit(); } Future<void> _initHealthKit() async { _healthKit = HealthKit( options: HealthKitOptions( types: [ HealthKitType.stepCount, ], ), ); // 请求权限 bool isAuthorized = await _healthKit!.requestAuthorization(); if (isAuthorized) { // 读取数据 _samples = await _healthKit!.querySamples( types: [HealthKitType.stepCount], startDate: DateTime.now().subtract(Duration(days: 7)), endDate: DateTime.now(), ); setState(() {}); } else { print('用户拒绝了权限请求'); } } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Health Kit Example'), ), body: Center( child: _samples != null ? ListView.builder( itemCount: _samples!.length, itemBuilder: (context, index) { HealthKitSample sample = _samples![index]; DateTime dateTime = sample.endDate!; double value = sample.value!.toDouble(); return ListTile( title: Text('日期: $dateTime'), subtitle: Text('步数: $value'), ); }, ) : Text('加载中...'), ), ), ); } }
在这个示例中,我们首先初始化HealthKit
实例并请求用户授权访问步数数据。如果用户授予权限,我们将查询过去7天内的步数数据,并在UI中显示。
请注意,实际开发中你需要处理更多的边缘情况和错误处理,这里仅提供了一个基本的示例。同时,由于health_kit
插件在不同平台上的实现可能有差异(特别是Android和iOS),请确保查阅官方文档以获取最新的配置和使用指南。