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
更多关于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.xml
和 Info.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(),
),
),
);
}
}
说明
- 权限请求:
_requestPermissions
方法请求步数数据的权限。 - 数据查询:
_fetchStepsData
方法查询过去7天的步数数据。 - UI 显示:在UI中显示查询到的步数数据。
确保在实际应用中处理各种可能的错误情况,例如权限请求被拒绝、数据查询失败等。
这个示例展示了如何使用 flutter_health_connect
插件来请求权限和读取健康数据。根据实际需求,你可以扩展这个示例以支持更多的数据类型和功能。