Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Health Connect do FHIR
Čtěte data z Android Health Connect od Fitbit, Garmin, Oura, Withings a Wear OS ve Flutter a zapisujte je do záznamu FHIR R4: oprávnění, historie, kontrola v Obchodě Play.
Health Connect je lokální úložiště zdraví pro Android: aplikace Samsung Health, Fitbit, Garmin Connect, Oura, Withings a Wear OS do něj zapisují a vaše aplikace z něj čte s povolením uživatele. Chcete-li tato data umístit do záznamu FHIR, čtěte denní součty a průměry na telefonu, odešlete je na svůj backend a zapište každou metriku jako Observation s kódem LOINC a jednotkou UCUM. Tato stránka pokrývá oprávnění, která Android vyžaduje, příklad ve Flutteru (zkontrolovaný s flutter analyze), který čte Health Connect na Androidu a Apple Health na iOS se stejným kódem, a pravidla pro publikování na Google Play.
Co se ukládá do Health Connect
Health Connect je součástí Androidu 14 a novějších verzí a je k dispozici jako aplikace i pro starší verze. Uchovává záznamy jako HeartRateRecord, RestingHeartRateRecord, HeartRateVariabilityRmssdRecord, OxygenSaturationRecord, RespiratoryRateRecord, StepsRecord, DistanceRecord, ActiveCaloriesBurnedRecord, SleepSessionRecord, WeightRecord, BloodPressureRecord, BloodGlucoseRecord, BodyTemperatureRecord a ExerciseSessionRecord.
Kdo tam zapisuje, podle dokumentace jednotlivých dodavatelů:
| Zdroj | Co očekávat |
|---|---|
| Fitbit a Pixel Watch | Aplikace Fitbit synchronizuje data s Health Connect po jejím nastavení (Nápověda Google) |
| Garmin | Garmin Connect podporuje Health Connect na Androidu 14 a novějších verzích: data o aktivitě a wellness, jako je srdeční tep a kalorie (Android Developers, srpen 2025) |
| Oura | Srdeční tep, HRV, spánek s fázemi, kroky, vzdálenost, kalorie a cvičení (Oura) |
| Withings | Health Mate si vyměňuje data o aktivitě, hmotnosti, spánku a další data prostřednictvím Health Connect (Blog Android Developers) |
| Samsung Health, Galaxy Watch | Podmnožina dat, vlastním tempem Samsung Health — viz Samsung Health to FHIR |
Každá aplikace dodavatele musí mít oprávnění zapisovat do Health Connect, které uživatel udělí v dané aplikaci nebo v nastavení Health Connect. Pokud nějaký zdroj chybí, je to první věc, kterou je třeba zkontrolovat.
Požadovaná oprávnění pro Android
- Jedno oprávnění na typ záznamu a směr, například
android.permission.health.READ_HEART_RATEaandroid.permission.health.READ_STEPS, deklarované v manifestu a vyžádané za běhu. - Historie: bez
android.permission.health.READ_HEALTH_DATA_HISTORYmůže aplikace číst pouze posledních 30 dní před udělením oprávnění. - Na pozadí: čtení, zatímco aplikace není v popředí, vyžaduje
android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND. - Obrazovka zdůvodnění oprávnění (aktivita, která zpracovává
ACTION_SHOW_PERMISSIONS_RATIONALE, plus alias aktivity v Androidu 14), která vysvětluje vaši zásadu ochrany osobních údajů; bez ní se dialogové okno oprávnění neotevře. - Ve Flutteru musí
MainActivityrozšiřovatFlutterFragmentActivity, nikoliFlutterActivity, jinak žádosti o oprávnění selžou.
Čtení denních hodnot ve Flutteru
Balíček health čte Health Connect na Androidu a Apple Health na iOS pod jedním API. Příklad používá verzi 13.2.1, se kterou Anpheros Daily dodává:
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 žádá Health Connect o jeho agregovaný součet, který již řeší překrývající se zdroje (telefon a hodinky počítající stejnou procházku) podle priority zdroje dat, kterou si osoba nastavila v Health Connect. Sčítání surových záznamů kroků sami vede k dvojímu započítání.
Poznámky z dodání tohoto ve Anpheros Daily:
- Synchronizovat, když se aplikace dostane do popředí, s krátkou ochranou proti opakovaným synchronizacím. Jiné aplikace zapisují do Health Connect podle vlastního plánu, takže data, která osoba vidí ve své vendorské aplikaci, mohou dorazit o minuty nebo hodiny později.
- Srdeční tep je série, nikoli jedna hodnota na vzorek: shrňte ji na telefonu (denně nebo v 4hodinových intervalech pro grafy) místo nahrávání každého čtení.
- HRV zde je RMSSD. Neukládejte jej pod kód SDNN používaný pro Apple Health.
Z hodnot Flutter do FHIR Observations
Odešlete hodnoty na váš backend a pro každou osobu, metriku a den vytvořte jedno Observation se stabilním identifikátorem, které budete aktualizovat, pokud bude stejný den odeslán znovu. Kompletní mapovací tabulka (Health Connect record → LOINC → UCUM), validní FHIR příklad a TypeScript upsert spuštěný proti platformě naleznete v Wearable data in FHIR.
Publikování na Google Play
Aplikace, které čtou Health Connect, musí v konzoli Play Console dokončit deklaraci oprávnění Health Connect, zdůvodnit každý datový typ a mít odpovídající zásady ochrany osobních údajů. Žádosti o datové typy, které aplikace viditelně nepoužívá, jsou zamítnuty. Plánujte revizi: uveďte každý typ vedle obrazovky, která jej používá.
Wear OS
Na hodinkách Wear OS může aplikace číst živá data ze senzorů prostřednictvím Health Services (například srdeční tep během cvičení). Data zaznamenaná vlastní zdravotní aplikací hodinek se dostávají do Health Connect v telefonu prostřednictvím telefonní aplikace výrobce. Pro lékařský záznam obvykle stačí číst Health Connect v telefonu; aplikace pro hodinky je určena pro živé funkce.
Kde Anpheros zapadá
Platforma Anpheros ukládá výsledek: záznam osoby ve formátu FHIR R4 s každou hodnotou ze zařízení jako Observation označenou jako data ze zařízení, chráněný souhlasem, původem a logem přístupu. Sama o sobě nečte Health Connect; to dělá vaše Android aplikace. Vlastní aplikace Anpheros, Anpheros Daily, čte Health Connect na Androidu (plány Plus a Max) a zapisuje denní souhrny do záznamu.
Často kladené dotazy
Má Health Connect cloudové API?
Ne. Health Connect ukládá data na telefonu a číst je mohou pouze aplikace z tohoto telefonu, a to s povolením uživatele. Chcete-li data dostat na server, vaše aplikace je přečte a odešle.
Existuje REST API nebo webové API pro Health Connect?
Ne. Health Connect je API pro zařízení Android bez REST nebo webového koncového bodu. Server přijímá data pouze tehdy, když je aplikace z telefonu přečte a odešle, například jako FHIR Observations do Anpheros.
Mohu použít Health Connect API z Pythonu nebo React Native?
Z Pythonu ne, protože běží na telefonu, nikoli na serveru. Z React Native nebo Flutter ano, prostřednictvím komunitních nebo oficiálních pluginů, které volají Android API uvnitř aplikace.
Proč moje aplikace může číst pouze 30 dní dat z Health Connect?
Bez oprávnění READ_HEALTH_DATA_HISTORY omezuje Health Connect čtení na 30 dní před udělením prvního oprávnění. Požádejte o oprávnění k historii, pokud potřebujete starší data.
Synchronizuje se Garmin s Health Connect?
Ano. Google oznámil v srpnu 2025, že Garmin Connect podporuje Health Connect na Androidu 14 a novějších pro data o aktivitě a wellness, jako je srdeční tep a kalorie. Vlastní skóre Garminu, jako je Body Battery, se nesdílejí.
Mohu číst data z Fitbitu bez Fitbit Web API?
Na Androidu ano: jakmile uživatel povolí Health Connect v aplikaci Fitbit, data z Fitbitu jsou dostupná v Health Connect pro aplikace, které autorizuje.
Proč se počet kroků v Health Connect liší od mého dodavatelského aplikace?
Dodavatelská aplikace nemusela ještě exportovat svá nejnovější data, může exportovat pouze některé typy, nebo Health Connect může preferovat jiný zdroj pro stejné období. Zkontrolujte zdroje dat a jejich prioritu v nastavení Health Connect.
Související
- Ukončení provozu Fitbit Web API (říjen 2026)
- Data z nositelných zařízení ve formátu FHIR: mapovací tabulka a backendový kód
- Samsung Health do FHIR
- Apple Health (HealthKit) do FHIR
- Jak vytvořit zdravotnickou aplikaci s Flutterem
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card