# Health Connect vers FHIR

> Lisez les données Android Health Connect de Fitbit, Garmin, Oura, Withings et Wear OS en Flutter et écrivez-les dans un enregistrement FHIR R4 : permissions, historique, examen Play.

Source: https://developers.anpheros.com/fr/guides/health-connect-fhir

**Health Connect est le magasin de santé sur appareil d'Android : les applications Samsung Health, Fitbit, Garmin Connect, Oura, Withings et Wear OS y écrivent, et votre application les lit avec la permission de la personne.** Pour mettre ces données dans un enregistrement FHIR, lisez les totaux et moyennes quotidiens sur le téléphone, envoyez-les à votre backend, et écrivez chaque métrique comme une Observation avec un code LOINC et une unité UCUM. Cette page couvre les permissions requises par Android, un exemple Flutter (vérifié avec `flutter analyze`) qui lit Health Connect sur Android et Apple Health sur iOS avec le même code, et les règles de publication sur Google Play.

## Ce que Health Connect reçoit

Health Connect est intégré à Android 14 et versions ultérieures, et disponible en tant qu'application sur les versions plus anciennes. Il contient des enregistrements tels que `HeartRateRecord`, `RestingHeartRateRecord`, `HeartRateVariabilityRmssdRecord`, `OxygenSaturationRecord`, `RespiratoryRateRecord`, `StepsRecord`, `DistanceRecord`, `ActiveCaloriesBurnedRecord`, `SleepSessionRecord`, `WeightRecord`, `BloodPressureRecord`, `BloodGlucoseRecord`, `BodyTemperatureRecord` et `ExerciseSessionRecord`.

Qui écrit là, selon la documentation de chaque fournisseur :

| Source | Ce à quoi s'attendre |
|---|---|
| Fitbit et Pixel Watch | L'application Fitbit se synchronise avec Health Connect une fois que la personne l'a configurée ([Aide Google](https://support.google.com/fitbit/answer/14506680)) |
| Garmin | Garmin Connect prend en charge Health Connect sur Android 14 et versions ultérieures : données d'activité et de bien-être telles que la fréquence cardiaque et les calories ([Android Developers, août 2025](https://developer.android.com/health-and-fitness/community/newsletters/2025/08)) |
| Oura | Fréquence cardiaque, VRC, sommeil avec stades, pas, distance, calories et entraînements ([Oura](https://ouraring.com/blog/data-sharing-partner-integrations/)) |
| Withings | Health Mate échange des données d'activité, de poids, de sommeil et d'autres données via Health Connect ([Blog Android Developers](https://android-developers.googleblog.com/2023/03/withings-reduces-data-sync-code-with--health-and-fitness-api-health-connect.html)) |
| Samsung Health, Galaxy Watch | Un sous-ensemble, au rythme de Samsung Health — voir [Samsung Health vers FHIR](https://developers.anpheros.com/fr/guides/samsung-health-fhir) |

Chaque application fournisseur doit avoir l'autorisation d'**écrire** dans Health Connect, ce que la personne accorde dans cette application ou dans les paramètres de Health Connect. Si une source est manquante, c'est la première chose à vérifier.

## Permissions requises par Android

- Une permission par type d'enregistrement et direction, par exemple `android.permission.health.READ_HEART_RATE` et `android.permission.health.READ_STEPS`, déclarée dans le manifeste et demandée à l'exécution.
- **Historique :** sans `android.permission.health.READ_HEALTH_DATA_HISTORY`, une application ne peut lire que les 30 derniers jours précédant l'octroi de la permission.
- **Arrière-plan :** la lecture pendant que l'application n'est pas au premier plan nécessite `android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND`.
- Un écran de **justification des permissions** (une activité qui gère `ACTION_SHOW_PERMISSIONS_RATIONALE`, plus un alias d'activité sur Android 14) qui explique votre politique de confidentialité ; sans cela, la boîte de dialogue de permission ne s'ouvre pas.
- Dans Flutter, le `MainActivity` doit étendre `FlutterFragmentActivity`, et non `FlutterActivity`, sinon les demandes de permission échouent.

## Lecture des valeurs quotidiennes dans Flutter

Le package [`health`](https://pub.dev/packages/health) lit Health Connect sur Android et Apple Health sur iOS derrière une seule API. L'exemple utilise la version 13.2.1, celle avec laquelle Anpheros Daily est livré :

```dart
import 'dart:math' as math;

import 'package:health/health.dart';

/// One day of data from Health Connect (Android) or Apple Health (iOS), ready for your backend.
class DailyValue {
  DailyValue(this.metric, this.day, this.value, {this.min, this.max});
  final String metric; // 'heart_rate', 'steps'
  final String day; // '2026-10-01', the user's local day
  final double value;
  final double? min, max;

  Map<String, Object?> toJson() => {'metric': metric, 'day': day, 'value': value, 'min': min, 'max': max};
}

final health = Health();

Future<List<DailyValue>> collectLastDays({int days = 30}) async {
  await health.configure();
  if (!await health.isHealthConnectAvailable()) {
    await health.installHealthConnect(); // opens the Play Store on Android; always available on iOS
    return [];
  }
  const types = [HealthDataType.HEART_RATE, HealthDataType.STEPS];
  final granted = await health.requestAuthorization(types, permissions: [HealthDataAccess.READ, HealthDataAccess.READ]);
  if (!granted) return [];

  final now = DateTime.now();
  final out = <DailyValue>[];
  for (var i = days - 1; i >= 0; i--) {
    final start = DateTime(now.year, now.month, now.day - i); // local midnight, safe across DST changes
    final end = DateTime(start.year, start.month, start.day + 1);
    final day = start.toIso8601String().substring(0, 10);

    final steps = await health.getTotalStepsInInterval(start, end);
    if (steps != null) out.add(DailyValue('steps', day, steps.toDouble()));

    final samples = await health.getHealthDataFromTypes(types: [HealthDataType.HEART_RATE], startTime: start, endTime: end);
    final bpm = [for (final p in samples) if (p.value is NumericHealthValue) (p.value as NumericHealthValue).numericValue.toDouble()];
    if (bpm.isNotEmpty) {
      out.add(DailyValue('heart_rate', day, bpm.reduce((a, b) => a + b) / bpm.length,
          min: bpm.reduce(math.min), max: bpm.reduce(math.max)));
    }
  }
  return out; // POST these to your backend, which writes them to the FHIR record
}
```

`getTotalStepsInInterval` demande à Health Connect son total agrégé, qui résout déjà les sources qui se chevauchent (un téléphone et une montre comptant la même marche) selon la priorité de la source de données définie par la personne dans Health Connect. La sommation manuelle des enregistrements de pas entraîne un double comptage.

Notes de l'expédition dans Anpheros Daily :

- **Synchroniser lorsque l'application passe au premier plan**, avec une courte protection contre les synchronisations répétées. D'autres applications écrivent dans Health Connect selon leur propre calendrier, de sorte que les données qu'une personne voit dans son application fournisseur peuvent arriver des minutes ou des heures plus tard.
- **La fréquence cardiaque est une série**, pas une valeur par échantillon : résumez-la sur le téléphone (quotidiennement, ou par fenêtres de 4 heures pour les graphiques) au lieu de télécharger chaque lecture.
- **La VFC ici est RMSSD.** Ne la stockez pas sous le code SDNN utilisé pour Apple Health.

## Des valeurs Flutter aux Observations FHIR

Envoyez les valeurs à votre backend et écrivez une Observation par personne, métrique et jour avec un identifiant stable, en la mettant à jour lorsque le même jour est renvoyé. Le tableau de mappage complet (enregistrement Health Connect → LOINC → UCUM), un exemple FHIR validé et l'exécution TypeScript upsert contre la plateforme se trouvent sur [Wearable data in FHIR](https://developers.anpheros.com/fr/guides/wearable-data-fhir).

## Publication sur Google Play

Les applications qui lisent Health Connect doivent compléter la déclaration des autorisations Health Connect dans la Play Console, justifier chaque type de données et disposer d'une politique de confidentialité correspondante. Les demandes de types de données que l'application n'utilise pas visiblement sont rejetées. Planifiez la revue : listez chaque type à côté de l'écran qui l'utilise.

## Wear OS

Sur une montre Wear OS, une application peut lire les données de capteurs en direct via Health Services (fréquence cardiaque pendant un entraînement, par exemple). Les données enregistrées par la propre application de santé de la montre parviennent à Health Connect du téléphone via l'application du fournisseur sur le téléphone. Pour un dossier médical, la lecture de Health Connect sur le téléphone est généralement suffisante ; une application de montre est destinée aux fonctionnalités en direct.

## Où Anpheros s'intègre

La plateforme Anpheros stocke le résultat : l'enregistrement FHIR R4 de la personne avec chaque valeur de l'appareil portable comme une Observation marquée comme données de l'appareil, derrière le consentement, la provenance et un journal d'accès. Elle ne lit pas Health Connect elle-même ; votre application Android le fait. L'application propre à Anpheros, **Anpheros Daily**, lit Health Connect sur Android (plans Plus et Max) et écrit des résumés quotidiens dans l'enregistrement.

## Questions fréquemment posées

### Health Connect dispose-t-il d'une API cloud ?
Non. Health Connect stocke les données sur le téléphone, et seules les applications sur ce téléphone peuvent les lire, avec la permission de la personne. Pour envoyer les données à un serveur, votre application les lit et les envoie.

### Existe-t-il une API REST ou une API Web Health Connect ?
Non. Health Connect est une API Android sur appareil sans point d'accès REST ou Web. Un serveur ne reçoit les données que lorsqu'une application sur le téléphone les lit et les envoie, par exemple sous forme d'Observations FHIR à Anpheros.

### Puis-je utiliser l'API Health Connect depuis Python ou React Native ?
Pas depuis Python, car il s'exécute sur le téléphone, pas sur un serveur. Depuis React Native ou Flutter, oui, via des plugins communautaires ou officiels qui appellent l'API Android à l'intérieur de l'application.

### Pourquoi mon application ne peut-elle lire que 30 jours de données Health Connect ?
Sans la permission `READ_HEALTH_DATA_HISTORY`, Health Connect limite les lectures à 30 jours avant l'octroi de la première permission. Demandez la permission d'historique si vous avez besoin de données plus anciennes.

### Garmin se synchronise-t-il avec Health Connect ?
Oui. Google a annoncé en août 2025 que Garmin Connect prend en charge Health Connect sur Android 14 et versions ultérieures, pour les données d'activité et de bien-être telles que la fréquence cardiaque et les calories. Les scores propres à Garmin, tels que Body Battery, ne sont pas partagés.

### Puis-je lire les données Fitbit sans l'API Web Fitbit ?
Sur Android, oui : une fois que la personne a activé Health Connect dans l'application Fitbit, les données Fitbit sont disponibles dans Health Connect pour les applications qu'elle autorise.

### Pourquoi le décompte des pas de Health Connect diffère-t-il de celui de mon application fournisseur ?
L'application fournisseur n'a peut-être pas encore exporté ses dernières données, peut n'exporter que certains types, ou Health Connect peut préférer une autre source pour la même période. Vérifiez les sources de données et leur priorité dans les paramètres de Health Connect.

## Liens connexes

- [Fermeture de l'API Web Fitbit (octobre 2026)](https://developers.anpheros.com/fr/guides/fitbit-web-api-shutdown)
- [Données des dispositifs portables dans FHIR](https://developers.anpheros.com/fr/guides/wearable-data-fhir) : la table de mappage et le code backend
- [Samsung Health vers FHIR](https://developers.anpheros.com/fr/guides/samsung-health-fhir)
- [Apple Health (HealthKit) vers FHIR](https://developers.anpheros.com/fr/guides/apple-health-fhir)
- [Comment créer une application de santé avec Flutter](https://developers.anpheros.com/fr/guides/healthcare-app-flutter)
