Flutter健康与健身数据插件fitness的使用
Flutter健康与健身数据插件fitness的使用
Flutter插件简介
Flutter插件fitness
用于读取步数数据。它在iOS上封装了HealthKit,在Android上封装了GoogleFit。
相关文档
👉 Korean
开始使用
查看示例目录以获取一个示例应用。
添加依赖项
在pubspec.yaml
文件中添加fitness
作为依赖项。
dependencies:
fitness: ^x.x.x
Android集成
- 启用Fitness API。
- 获得OAuth 2.0客户端ID。
iOS集成
- 启用HealthKit。
- 在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
更多关于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.'),
),
),
);
}
}
注意事项
- 错误处理:在实际应用中,请添加适当的错误处理逻辑。
- 权限请求结果:处理权限请求的结果,如果用户拒绝权限,可能需要提示用户为什么需要这些权限。
- 插件版本:确保使用的是最新版本的插件,并查阅官方文档以获取最新的API更改和最佳实践。
这个示例展示了如何集成Google Fit API并获取步数数据。你可以根据需要修改代码来获取其他类型的健身数据,如心率、卡路里消耗等。