You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从.NET MAUI代码中访问Android Health Connect

在.NET MAUI中访问Android Health Connect数据的实现指南

核心步骤:实例化HealthConnectClient

Health Connect的客户端实例化依赖Android平台上下文,在.NET MAUI中需通过平台特定代码实现(用#if ANDROID条件编译隔离Android专属逻辑):

#if ANDROID
using Android.Health.Connect;
using Android.Content;

// 在Android平台代码中(如MainActivity、平台服务类)获取实例
var healthConnectClient = HealthConnectClient.GetInstance(Android.App.Application.Context);
#endif

前置配置

  1. 项目框架要求:将MAUI项目的Android目标框架设置为Android 14 (API 34) 及以上(对应net-android-34.0命名空间)。
  2. Manifest配置:在Platforms/Android/AndroidManifest.xml中添加必要权限及声明:
    <!-- 权限示例:读取步数、心率等 -->
    <uses-permission android:name="android.permission.health.READ_STEPS" />
    <uses-permission android:name="android.permission.health.READ_HEART_RATE" />
    
    <!-- 声明Health Connect访问 -->
    <application>
        <meta-data
            android:name="android.health.connect.client"
            android:value="true" />
    </application>
    

权限申请流程

访问Health Connect数据前必须动态申请对应权限,示例代码如下:

#if ANDROID
using Android.Health.Connect.Permissions;
using AndroidX.Core.App;

// 定义需要的权限集合
var requiredPermissions = new List<string>
{
    Permission.ReadSteps,
    Permission.ReadHeartRate
};

// 检查已有权限
var permissionStatus = await healthConnectClient.CheckPermissionsAsync(requiredPermissions);
var missingPermissions = permissionStatus
    .Where(p => !p.Value.Granted)
    .Select(p => p.Key)
    .ToList();

if (missingPermissions.Any())
{
    // 注册权限请求回调
    var permissionLauncher = RegisterForActivityResult(
        new ActivityResultContracts.RequestMultiplePermissions(),
        result =>
        {
            foreach (var (permission, isGranted) in result)
            {
                if (isGranted)
                {
                    // 权限已授予,可执行数据读取逻辑
                }
            }
        });

    // 发起权限请求
    permissionLauncher.Launch(missingPermissions.ToArray());
}
#endif

读取健身数据示例(以步数为例)

权限授予后,可通过ReadRecordsAsync查询指定时间范围的健康数据:

#if ANDROID
using Android.Health.Connect.DataTypes;
using Android.Health.Connect.Query;

// 构建步数查询请求(近7天数据)
var stepQuery = new ReadRecordsRequest.Builder()
    .SetDataType(StepCountRecord.GetRecordType())
    .SetTimeRange(DateTimeOffset.UtcNow.AddDays(-7), DateTimeOffset.UtcNow)
    .Build();

// 执行查询
var queryResult = await healthConnectClient.ReadRecordsAsync(stepQuery);
var stepRecords = queryResult.Records.Cast<StepCountRecord>();

// 处理查询结果
foreach (var record in stepRecords)
{
    var totalSteps = record.Count;
    var recordStartTime = record.StartTime.LocalDateTime;
    // 自定义业务逻辑处理
}
#endif

关键注意事项

  • 平台限制:Health Connect仅支持Android平台,MAUI中需通过条件编译或依赖服务封装跨平台调用逻辑。
  • 设备支持:确保目标设备安装了Health Connect应用(或通过Google Play服务提供支持),否则客户端实例化会失败。
  • 上下文要求:权限请求必须在Activity上下文内发起,若在ViewModel等非Activity类中调用,需通过MessagingCenter或依赖服务传递Activity实例。

内容的提问来源于stack exchange,提问作者Steve Mason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:43:39