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

.NET Maui应用:Google Fit兼容及Health Connect实现咨询

问题解答

关于已弃用的Google Fit HistoryApi在MAUI中的可用性

  • 已弃用的FitnessClass.HistoryApi结合GoogleApiClient的方式,在以net6.0-android为目标框架的MAUI应用中理论上可临时运行,但强烈不推荐:
    • 这类API已被Google标记为弃用,后续会逐步停止维护,存在兼容性风险,比如新Android版本可能限制功能甚至直接禁用。
    • net6.0-android对旧版Google Play Services API的支持有限,容易出现权限初始化失败、调用异常等问题。

MAUI中实现Health Connect的History API步骤

Health Connect是Google官方推荐的替代方案,针对History API的实现可按以下步骤操作:

1. 配置项目依赖

  • 在MAUI项目的Android平台目录下,修改AndroidManifest.xml,添加Health Connect所需权限和声明:
    <!-- 根据需要的历史数据类型添加对应权限 -->
    <uses-permission android:name="android.permission.health.READ_STEPS"/>
    <uses-permission android:name="android.permission.health.WRITE_STEPS"/>
    
    <application>
      <!-- 声明Health Connect应用关联 -->
      <meta-data
        android:name="android.health.connect.client.health_permissions"
        android:resource="@xml/health_permissions"/>
    </application>
    
  • 在Android项目的Resources/xml目录下创建health_permissions.xml文件,定义需访问的数据类型:
    <health-permissions xmlns:android="http://schemas.android.com/apk/res/android">
      <health-permission android:name="android.permission.health.READ_STEPS"/>
      <health-permission android:name="android.permission.health.WRITE_STEPS"/>
    </health-permissions>
    

2. 初始化Health Connect客户端

在MAUI的Android平台代码中,初始化客户端实例:

using Android.Health.Connect;
using Android.Content;

var healthConnectClient = HealthConnectClient.GetInstance(Android.App.Application.Context);

3. 检查Health Connect可用性

调用API前,先确认设备是否支持Health Connect:

var availabilityStatus = await healthConnectClient.ContractInfoAsync();
if (availabilityStatus.Status != HealthConnectAvailabilityStatus.Available)
{
    // 处理不可用场景,比如提示用户安装/升级Health Connect
    return;
}

4. 请求用户授权

读取或写入历史数据前,必须获取用户授权:

var permissionsToRequest = new List<string>
{
    HealthPermission.ReadSteps,
    HealthPermission.WriteSteps
};

var requestResult = await healthConnectClient.RequestPermissionsAsync(permissionsToRequest);

if (!requestResult.AllPermissionsGranted)
{
    // 处理权限拒绝情况
    return;
}

5. 调用History相关API

读取历史数据(以步数为例)

using Android.Health.Connect.DataTypes;
using Java.Util.Concurrent;

var startTime = DateTimeOffset.UtcNow.AddDays(-7).ToUnixTimeMilliseconds();
var endTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

var request = new ReadRecordsRequest.Builder()
    .SetTimeRange(startTime, endTime, TimeUnit.Milliseconds)
    .AddDataType(StepCountRecord.RecordType)
    .Build();

var result = await healthConnectClient.ReadRecordsAsync(request);
var stepRecords = result.GetRecords<StepCountRecord>();

// 遍历处理读取到的步数数据
foreach (var record in stepRecords)
{
    var stepCount = record.Count;
    var recordStartTime = record.StartTime;
}

写入历史数据(以步数为例)

var currentTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
var stepRecord = new StepCountRecord.Builder(
    currentTime,
    currentTime,
    1000) // 写入1000步数据
    .Build();

var request = new InsertRecordsRequest.Builder()
    .AddRecord(stepRecord)
    .Build();

await healthConnectClient.InsertRecordsAsync(request);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:27:28