Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Health Connect do FHIR
Čítanie údajov z Android Health Connect od Fitbit, Garmin, Oura, Withings a Wear OS vo Flutter a ich zápis do FHIR R4 záznamu: povolenia, história, kontrola v Google Play.
Health Connect je on-device úložisko zdravia pre Android: aplikácie Samsung Health, Fitbit, Garmin Connect, Oura, Withings a Wear OS do neho zapisujú a vaša aplikácia z neho číta s povolením používateľa. Aby ste tieto dáta dostali do FHIR záznamu, prečítajte si denné súčty a priemery na telefóne, pošlite ich na váš backend a zapíšte každú metriku ako Observation s LOINC kódom a UCUM jednotkou. Táto stránka pokrýva povolenia, ktoré Android vyžaduje, Flutter príklad (skontrolovaný s flutter analyze), ktorý číta Health Connect na Androide a Apple Health na iOS s rovnakým kódom, a pravidlá pre publikovanie na Google Play.
Čo dosahuje Health Connect
Health Connect je integrovaný do systému Android 14 a novších verzií a je k dispozícii ako aplikácia pre staršie verzie. Uchováva záznamy ako HeartRateRecord, RestingHeartRateRecord, HeartRateVariabilityRmssdRecord, OxygenSaturationRecord, RespiratoryRateRecord, StepsRecord, DistanceRecord, ActiveCaloriesBurnedRecord, SleepSessionRecord, WeightRecord, BloodPressureRecord, BloodGlucoseRecord, BodyTemperatureRecord a ExerciseSessionRecord.
Kto tam zapisuje, podľa dokumentácie každého predajcu:
| Zdroj | Čo očakávať |
|---|---|
| Fitbit a Pixel Watch | Aplikácia Fitbit synchronizuje s Health Connect po tom, ako si ju používateľ nastaví (Pomocník Google) |
| Garmin | Garmin Connect podporuje Health Connect na systéme Android 14 a novších verziách: údaje o aktivite a wellness, ako je srdcová frekvencia a kalórie (Android Developers, august 2025) |
| Oura | Srdcová frekvencia, HRV, spánok s fázami, kroky, vzdialenosť, kalórie a cvičenia (Oura) |
| Withings | Health Mate si vymieňa údaje o aktivite, hmotnosti, spánku a ďalšie údaje prostredníctvom Health Connect (Blog Android Developers) |
| Samsung Health, Galaxy Watch | Podmnožina, vlastným tempom Samsung Health — pozri Samsung Health do FHIR |
Každá aplikácia predajcu musí mať povolenie na zápis do Health Connect, ktoré používateľ udelí v danej aplikácii alebo v nastaveniach Health Connect. Ak chýba zdroj, je to prvá vec, ktorú treba skontrolovať.
Požadované povolenia pre Android
- Jedno povolenie na typ záznamu a smer, napríklad
android.permission.health.READ_HEART_RATEaandroid.permission.health.READ_STEPS, deklarované v manifeste a vyžiadané za behu. - História: bez
android.permission.health.READ_HEALTH_DATA_HISTORYmôže aplikácia čítať iba posledných 30 dní pred udelením povolenia. - Na pozadí: čítanie, keď aplikácia nie je na popredí, vyžaduje
android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND. - Obrazovka zdôvodnenia povolenia (aktivita, ktorá spracováva
ACTION_SHOW_PERMISSIONS_RATIONALE, plus alias aktivity v systéme Android 14), ktorá vysvetľuje vašu politiku ochrany osobných údajov; bez nej sa dialógové okno povolenia neotvorí. - Vo Flutteri musí
MainActivityrozširovaťFlutterFragmentActivity, nieFlutterActivity, inak žiadosti o povolenie zlyhajú.
Čítanie denných hodnôt vo Flutteri
Balík health číta Health Connect na Androide a Apple Health na iOS pod jedným API. Príklad používa verziu 13.2.1, s ktorou Anpheros Daily prichádza:
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 žiada Health Connect o jeho agregovaný celok, ktorý už rieši prekrývajúce sa zdroje (telefón a hodinky počítajúce tú istú prechádzku) podľa priority zdroja dát, ktorú si osoba nastavila v Health Connect. Sčítanie surových záznamov krokov samotným používateľom vedie k dvojitému započítaniu.
Poznámky z dodania tohto v Anpheros Daily:
- Synchronizácia pri prechode aplikácie do popredia, s krátkou ochranou proti opakovaným synchronizáciám. Iné aplikácie zapisujú do Health Connect podľa vlastného plánu, takže údaje, ktoré osoba vidí vo svojej predajnej aplikácii, môžu doraziť o minúty alebo hodiny neskôr.
- Tepová frekvencia je séria, nie jedna hodnota na vzorku: zhrňte ju v telefóne (denne alebo v 4-hodinových intervaloch pre grafy) namiesto nahrávania každého odčítania.
- HRV je tu RMSSD. Neukladajte ho pod kód SDNN používaný pre Apple Health.
Z hodnôt Flutteru do FHIR Observations
Odošlite hodnoty na váš backend a zapíšte jedno Observation na osobu, metriku a deň so stabilným identifikátorom, pričom ho aktualizujte, keď sa ten istý deň odošle znova. Kompletná mapovacia tabuľka (Health Connect record → LOINC → UCUM), validovaný FHIR príklad a TypeScript upsert spustenie proti platforme sú uvedené v Wearable data in FHIR.
Publikovanie na Google Play
Aplikácie, ktoré čítajú Health Connect, musia v Play Console vyplniť vyhlásenie o povoleniach Health Connect, zdôvodniť každý typ údajov a mať zodpovedajúce zásady ochrany osobných údajov. Požiadavky na typy údajov, ktoré aplikácia viditeľne nepoužíva, sú zamietnuté. Naplánujte si revíziu: uveďte každý typ vedľa obrazovky, ktorá ho používa.
Wear OS
Na hodinkách Wear OS môže aplikácia čítať živé údaje zo senzorov prostredníctvom Health Services (napríklad srdcovú frekvenciu počas cvičenia). Údaje, ktoré zaznamená vlastná zdravotná aplikácia hodiniek, sa dostanú do Health Connect na telefóne prostredníctvom telefónovej aplikácie predajcu. Pre lekársky záznam zvyčajne stačí čítanie Health Connect na telefóne; aplikácia hodiniek je určená pre živé funkcie.
Kam Anpheros zapadá
Platforma Anpheros ukladá výsledok: záznam osoby vo formáte FHIR R4 s každou hodnotou zo zariadenia ako Observation označenou ako dáta zo zariadenia, chránené súhlasom, pôvodom a denníkom prístupu. Sama o sebe nečíta Health Connect; číta ho vaša Android aplikácia. Vlastná aplikácia Anpheros, Anpheros Daily, číta Health Connect na Androide (plány Plus a Max) a zapisuje denné súhrny do záznamu.
Často kladené otázky
Má Health Connect cloudové API?
Nie. Health Connect ukladá dáta na telefóne a čítať ich môžu iba aplikácie na danom telefóne s povolením používateľa. Ak chcete preniesť dáta na server, vaša aplikácia ich prečíta a odošle.
Existuje REST API alebo webové API pre Health Connect?
Nie. Health Connect je API pre zariadenia s Androidom bez REST alebo webového koncového bodu. Server prijíma dáta iba vtedy, keď si ich aplikácia na telefóne prečíta a odošle, napríklad ako FHIR Observations do Anpheros.
Môžem použiť Health Connect API z Pythonu alebo React Native?
Z Pythonu nie, pretože beží na telefóne, nie na serveri. Z React Native alebo Flutter áno, prostredníctvom komunitných alebo oficiálnych pluginov, ktoré volajú Android API v rámci aplikácie.
Prečo moja aplikácia môže čítať iba 30 dní dát z Health Connect?
Bez povolenia READ_HEALTH_DATA_HISTORY obmedzuje Health Connect čítanie na 30 dní pred udelením prvého povolenia. Požiadajte o povolenie histórie, ak potrebujete staršie dáta.
Synchronizuje sa Garmin s Health Connect?
Áno. Google oznámil v auguste 2025, že Garmin Connect podporuje Health Connect na Androide 14 a novšom, pre dáta o aktivite a wellness, ako je srdcová frekvencia a kalórie. Vlastné skóre Garminu, ako napríklad Body Battery, sa nezdieľajú.
Môžem čítať dáta Fitbit bez Fitbit Web API?
Na Androide áno: keď používateľ povolí Health Connect v aplikácii Fitbit, dáta Fitbit sú dostupné v Health Connect pre aplikácie, ktoré autorizuje.
Prečo sa počet krokov v Health Connect líši od mojej predajnej aplikácie?
Predajná aplikácia možno ešte neexportovala svoje najnovšie dáta, možno exportuje iba niektoré typy, alebo Health Connect môže preferovať iný zdroj pre rovnaké obdobie. Skontrolujte zdroje dát a ich prioritu v nastaveniach Health Connect.
Súvisiace
- Ukončenie prevádzky Fitbit Web API (október 2026)
- Údaje z nositeľných zariadení vo formáte FHIR: mapovacia tabuľka a backendový kód
- Samsung Health do FHIR
- Apple Health (HealthKit) do FHIR
- Ako vytvoriť zdravotnícku aplikáciu s Flutterom
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card