# Health Connect to FHIR

> Olvassa be az Android Health Connect adatait Fitbitből, Garminból, Ourából, Withingsből és Wear OS-ből Flutterben, és írja be őket egy FHIR R4 rekordba: engedélyek, előzmények, Play áruház értékelés.

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

**A Health Connect az Android eszközön belüli egészségügyi adattára: a Samsung Health, a Fitbit, a Garmin Connect, az Oura, a Withings és a Wear OS alkalmazások írnak bele, és az Ön alkalmazása az illető engedélyével olvassa ki belőle az adatokat.** Ahhoz, hogy ezeket az adatokat FHIR rekordba helyezze, olvassa be a napi összesítéseket és átlagokat a telefonon, küldje el a backendjére, és írja be minden egyes mérőszámot egy Observationként, LOINC kóddal és UCUM egységgel. Ez az oldal ismerteti az Android által megkövetelt engedélyeket, egy Flutter példát (ellenőrizve `flutter analyze`), amely ugyanazzal a kóddal olvassa be a Health Connectet Androidon és az Apple Health-et iOS-en, valamint a Google Playen való publikálás szabályait.

## Mi kerül a Health Connectbe

A Health Connect az Android 14-től és újabb verzióktól kezdve beépített funkció, régebbi verziókon pedig alkalmazásként érhető el. Olyan rekordokat tárol, mint a `HeartRateRecord`, `RestingHeartRateRecord`, `HeartRateVariabilityRmssdRecord`, `OxygenSaturationRecord`, `RespiratoryRateRecord`, `StepsRecord`, `DistanceRecord`, `ActiveCaloriesBurnedRecord`, `SleepSessionRecord`, `WeightRecord`, `BloodPressureRecord`, `BloodGlucoseRecord`, `BodyTemperatureRecord` és `ExerciseSessionRecord`.

Ki ír oda, az egyes gyártók dokumentációja szerint:

| Forrás | Mire számíthat |
|---|---|
| Fitbit és Pixel Watch | A Fitbit alkalmazás szinkronizál a Health Connecttel, miután a felhasználó beállította azt ([Google súgó](https://support.google.com/fitbit/answer/14506680)) |
| Garmin | A Garmin Connect támogatja a Health Connectet Android 14-től és újabb verzióktól: tevékenység és wellness adatok, mint például pulzus és kalóriák ([Android Developers, 2025. augusztus](https://developer.android.com/health-and-fitness/community/newsletters/2025/08)) |
| Oura | Pulzus, HRV, alvás szakaszokkal, lépések, távolság, kalóriák és edzések ([Oura](https://ouraring.com/blog/data-sharing-partner-integrations/)) |
| Withings | A Health Mate tevékenységi, súly-, alvás- és egyéb adatokat cserél a Health Connecten keresztül ([Android Developers blog](https://android-developers.googleblog.com/2023/03/withings-reduces-data-sync-code-with--health-and-fitness-api-health-connect.html)) |
| Samsung Health, Galaxy Watch | Egy részhalmaz, a Samsung Health saját ütemében – lásd: [Samsung Health to FHIR](https://developers.anpheros.com/hu/guides/samsung-health-fhir) |

Minden gyártói alkalmazásnak engedéllyel kell rendelkeznie a Health Connectbe való **írásra**, amelyet a felhasználó az adott alkalmazásban vagy a Health Connect beállításaiban ad meg. Ha egy forrás hiányzik, ez az első dolog, amit ellenőrizni kell.

## Engedélyek, amelyekre az Androidnak szüksége van

- Engedélyenként egy rekordtípusonként és irányonként, például `android.permission.health.READ_HEART_RATE` és `android.permission.health.READ_STEPS`, deklarálva a manifestben és futásidőben kérve.
- **Előzmények:** `android.permission.health.READ_HEALTH_DATA_HISTORY` nélkül az alkalmazás csak az engedély megadása előtti utolsó 30 napot tudja olvasni.
- **Háttér:** Az alkalmazás háttérben történő olvasásához `android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND` szükséges.
- **Engedélyek indoklása** képernyő (egy tevékenység, amely kezeli a `ACTION_SHOW_PERMISSIONS_RATIONALE`-et, plusz egy tevékenység alias az Android 14-en), amely elmagyarázza az adatvédelmi irányelveit; enélkül az engedély párbeszédablak nem nyílik meg.
- Flutterben a `MainActivity`-nek `FlutterFragmentActivity`-et kell kiterjesztenie, nem `FlutterActivity`-et, különben az engedélykérések meghiúsulnak.

## Napi értékek olvasása Flutterben

A [`health`](https://pub.dev/packages/health) csomag egyetlen API mögött olvassa a Health Connect-et Androidon és az Apple Health-et iOS-en. A példa a 13.2.1 verziót használja, amellyel az Anpheros Daily szállítva van:

```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
}
```

A `getTotalStepsInInterval` a Health Connect-től kéri az összesített értéket, amely már feloldja az átfedő forrásokat (egy telefon és egy óra ugyanazt a sétát számolja) a személy által a Health Connect-ben beállított adatforrás-prioritás szerint. A nyers lépésrekordok saját magad általi összeadása kettős számlálást eredményez.

Megjegyzések az Anpheros Daily-ben történő szállításból:

- **Szinkronizálás, amikor az alkalmazás előtérbe kerül**, rövid védelemmel az ismételt szinkronizálások ellen. Más alkalmazások saját ütemezésük szerint írnak a Health Connect-be, így az adatok, amelyeket egy személy lát a gyártói alkalmazásban, percekkel vagy órákkal később érkezhetnek meg.
- **A pulzusszám egy sorozat**, nem egy érték mintánként: összegzi azt a telefonon (napi vagy 4 órás ablakokban a diagramokhoz) ahelyett, hogy minden egyes leolvasást feltöltene.
- **A HRV itt RMSSD.** Ne tárolja az Apple Health-hez használt SDNN kód alatt.

## Flutter értékeiből FHIR megfigyelésekre

Küldje el az értékeket a backendjére, és írjon egy megfigyelést személyenként, mérőszámonként és naponta, stabil azonosítóval, frissítve azt, ha ugyanazt a napot ismét elküldik. A teljes megfeleltetési táblázat (Health Connect rekord → LOINC → UCUM), egy validált FHIR példa és a platform ellen futtatott TypeScript upsert a [Wearable data in FHIR](https://developers.anpheros.com/hu/guides/wearable-data-fhir) oldalon található.

## Google Play-en való közzététel

A Health Connect-et olvasó alkalmazásoknak el kell végezniük a Health Connect engedélyek nyilatkozatát a Play Console-ban, igazolniuk kell minden adat típust, és rendelkezniük kell egy ehhez illeszkedő adatvédelmi irányelvvel. Az alkalmazás által láthatóan nem használt adat típusokra vonatkozó kéréseket elutasítják. Tervezze meg az áttekintést: sorolja fel az egyes típusokat a használó képernyő mellett.

## Wear OS

Wear OS órán egy alkalmazás képes élő szenzoradatokat olvasni a Health Services segítségével (például pulzus edzés közben). Az óra saját egészségügyi alkalmazása által rögzített adatok a gyártó telefonos alkalmazásán keresztül jutnak el a telefonon futó Health Connectbe. Orvosi nyilvántartás esetén általában elegendő a telefonon lévő Health Connect olvasása; egy óraalkalmazás az élő funkciókhoz való.

## Hol illeszkedik be az Anpheros

Az Anpheros Platform tárolja az eredményt: a személy FHIR R4 rekordját, ahol minden viselhető érték egy megfigyelésként (Observation) van jelölve, mint eszközadat, beleegyezés, származás és hozzáférési napló mögött. Nem olvassa a Health Connect-et maga; az Android alkalmazásod teszi. Az Anpheros saját alkalmazása, az **Anpheros Daily**, olvassa a Health Connect-et Androidon (Plus és Max csomagok) és naponta ír összefoglalókat a rekordba.

## Gyakran ismételt kérdések

### Van a Health Connect-nek felhő API-ja?
Nem. A Health Connect az adatokat a telefonon tárolja, és csak az adott telefonon lévő alkalmazások olvashatják, a személy engedélyével. Az adatok szerverre juttatásához az Ön alkalmazása elolvassa azokat, és elküldi.

### Van Health Connect REST API vagy web API?
Nem. A Health Connect egy eszközön futó Android API, amelynek nincs REST vagy web végpontja. A szerver csak akkor fogadja az adatokat, amikor a telefonon lévő alkalmazás elolvassa azokat és elküldi, például FHIR Observations formájában az Anpheros-nak.

### Használhatom a Health Connect API-t Pythonból vagy React Native-ből?
Pythonból nem, mert az a telefonon fut, nem szerveren. React Native-ből vagy Flutterből igen, közösségi vagy hivatalos bővítményeken keresztül, amelyek az alkalmazáson belüli Android API-t hívják.

### Miért tud az alkalmazásom csak 30 napnyi Health Connect adatot olvasni?
A `READ_HEALTH_DATA_HISTORY` engedély nélkül a Health Connect az első engedély megadása előtti 30 napra korlátozza az olvasást. Kérje a history engedélyt, ha régebbi adatokra van szüksége.

### Szinkronizál a Garmin a Health Connect-tel?
Igen. A Google 2025 augusztusában jelentette be, hogy a Garmin Connect támogatja a Health Connect-et Android 14 és újabb verziókon, tevékenységi és wellness adatokhoz, mint például pulzusszám és kalória. A Garmin saját pontszámai, mint például a Body Battery, nem kerülnek megosztásra.

### El tudom olvasni a Fitbit adatokat a Fitbit Web API nélkül?
Androidon igen: miután a személy engedélyezte a Health Connect-et a Fitbit alkalmazásban, a Fitbit adatok elérhetőek a Health Connect-ben az általuk engedélyezett alkalmazások számára.

### Miért különbözik a Health Connect lépésszámlálása a gyártói alkalmazásétól?
Lehetséges, hogy a gyártói alkalmazás még nem exportálta a legfrissebb adatait, csak bizonyos típusokat exportál, vagy a Health Connect egy másik forrást részesít előnyben ugyanarra az időszakra. Ellenőrizze az adatforrásokat és azok prioritását a Health Connect beállításaiban.

## Kapcsolódó

- [Fitbit Web API leállítása (2026. október)](https://developers.anpheros.com/hu/guides/fitbit-web-api-shutdown)
- [Viselhető eszközök adatai FHIR formátumban](https://developers.anpheros.com/hu/guides/wearable-data-fhir): a leképezési táblázat és a backend kód
- [Samsung Health FHIR-re](https://developers.anpheros.com/hu/guides/samsung-health-fhir)
- [Apple Health (HealthKit) FHIR-re](https://developers.anpheros.com/hu/guides/apple-health-fhir)
- [Egészségügyi alkalmazás készítése Flutterrel](https://developers.anpheros.com/guides/healthcare-app-flutter)
