Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Health Connect do FHIR
Odczytaj dane z Android Health Connect od Fitbit, Garmin, Oura, Withings i Wear OS we Flutter i zapisz je do rekordu FHIR R4: uprawnienia, historia, weryfikacja w Google Play.
Health Connect to wbudowana w Androida baza danych zdrowotnych: aplikacje Samsung Health, Fitbit, Garmin Connect, Oura, Withings i Wear OS zapisują do niej dane, a Twoja aplikacja odczytuje je za zgodą użytkownika. Aby umieścić te dane w rekordzie FHIR, odczytaj dzienne sumy i średnie na telefonie, wyślij je do swojego backendu i zapisz każdą metrykę jako Observation z kodem LOINC i jednostką UCUM. Ta strona omawia uprawnienia wymagane przez Androida, przykład we Flutter (sprawdzony z flutter analyze), który odczytuje Health Connect na Androidzie i Apple Health na iOS przy użyciu tego samego kodu, oraz zasady publikowania w Google Play.
Co trafia do Health Connect
Health Connect jest wbudowany w system Android 14 i nowsze wersje, a także dostępny jako aplikacja na starszych wersjach. Przechowuje rekordy takie jak HeartRateRecord, RestingHeartRateRecord, HeartRateVariabilityRmssdRecord, OxygenSaturationRecord, RespiratoryRateRecord, StepsRecord, DistanceRecord, ActiveCaloriesBurnedRecord, SleepSessionRecord, WeightRecord, BloodPressureRecord, BloodGlucoseRecord, BodyTemperatureRecord i ExerciseSessionRecord.
Kto tam zapisuje dane, zgodnie z dokumentacją poszczególnych dostawców:
| Źródło | Czego można się spodziewać |
|---|---|
| Fitbit i Pixel Watch | Aplikacja Fitbit synchronizuje się z Health Connect po jej skonfigurowaniu przez użytkownika (Pomoc Google) |
| Garmin | Garmin Connect obsługuje Health Connect na Androidzie 14 i nowszych: dane dotyczące aktywności i samopoczucia, takie jak tętno i kalorie (Android Developers, sierpień 2025) |
| Oura | Tętno, HRV, sen z fazami, kroki, dystans, kalorie i treningi (Oura) |
| Withings | Health Mate wymienia dane dotyczące aktywności, wagi, snu i inne dane za pośrednictwem Health Connect (Blog Android Developers) |
| Samsung Health, Galaxy Watch | Podzbiór danych, w tempie narzuconym przez Samsung Health — zobacz Samsung Health do FHIR |
Każda aplikacja dostawcy musi mieć uprawnienia do zapisu w Health Connect, których użytkownik udziela w tej aplikacji lub w ustawieniach Health Connect. Jeśli brakuje jakiegoś źródła, to jest to pierwsza rzecz, którą należy sprawdzić.
Uprawnienia wymagane przez Androida
- Jedno uprawnienie na typ rekordu i kierunek, na przykład
android.permission.health.READ_HEART_RATEiandroid.permission.health.READ_STEPS, zadeklarowane w manifeście i żądane w czasie działania. - Historia: bez
android.permission.health.READ_HEALTH_DATA_HISTORYaplikacja może odczytać tylko dane z ostatnich 30 dni przed udzieleniem uprawnienia. - W tle: odczyt danych, gdy aplikacja nie jest na pierwszym planie, wymaga
android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND. - Ekran uzasadnienia uprawnień (aktywność obsługująca
ACTION_SHOW_PERMISSIONS_RATIONALE, plus alias aktywności w Androidzie 14), który wyjaśnia Twoją politykę prywatności; bez niego okno dialogowe uprawnień się nie otworzy. - W Flutterze
MainActivitymusi dziedziczyć poFlutterFragmentActivity, a nie poFlutterActivity, w przeciwnym razie żądania uprawnień zakończą się niepowodzeniem.
Odczytywanie dziennych wartości we Flutter
Pakiet health odczytuje dane z Health Connect na Androidzie i Apple Health na iOS za jednym API. Przykład używa wersji 13.2.1, z którą dostarczany jest Anpheros Daily:
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 żąda od Health Connect zagregowanej sumy, która już rozwiązuje nakładające się źródła (telefon i zegarek zliczające ten sam spacer) zgodnie z priorytetem źródła danych ustawionym przez użytkownika w Health Connect. Sumowanie surowych rekordów kroków samodzielnie prowadzi do podwójnego zliczania.
Uwagi z dostarczenia tej funkcji w Anpheros Daily:
- Synchronizuj, gdy aplikacja przejdzie na pierwszy plan, z krótkim zabezpieczeniem przed powtarzającymi się synchronizacjami. Inne aplikacje zapisują dane do Health Connect według własnego harmonogramu, więc dane, które użytkownik widzi w swojej aplikacji dostawcy, mogą pojawić się z opóźnieniem od kilku minut do kilku godzin.
- Tętno to seria, a nie jedna wartość na próbkę: podsumuj je na telefonie (dziennie lub w 4-godzinnych przedziałach dla wykresów) zamiast przesyłać każdy odczyt.
- HRV tutaj to RMSSD. Nie przechowuj go pod kodem SDNN używanym dla Apple Health.
Z wartości Flutter do FHIR Observations
Wyślij wartości do swojego backendu i zapisz jedno Observation na osobę, metrykę i dzień ze stabilnym identyfikatorem, aktualizując je, gdy ten sam dzień zostanie wysłany ponownie. Pełna tabela mapowania (Health Connect record → LOINC → UCUM), zweryfikowany przykład FHIR oraz wykonanie upsert w TypeScript przeciwko platformie znajdują się w Wearable data in FHIR.
Publikowanie w Google Play
Aplikacje, które odczytują dane z Health Connect, muszą wypełnić deklarację uprawnień Health Connect w Play Console, uzasadnić każdy typ danych i posiadać zgodną politykę prywatności. Żądania dotyczące typów danych, których aplikacja nie używa w widoczny sposób, są odrzucane. Zaplanuj przegląd: wymień każdy typ obok ekranu, który go używa.
Wear OS
Na zegarku z systemem Wear OS aplikacja może odczytywać dane z czujników w czasie rzeczywistym za pośrednictwem Health Services (np. tętno podczas treningu). Dane zapisane przez natywną aplikację zdrowotną zegarka trafiają do Health Connect na telefonie za pośrednictwem aplikacji producenta na telefon. W przypadku dokumentacji medycznej zazwyczaj wystarczy odczytanie danych z Health Connect na telefonie; aplikacja na zegarek służy do funkcji w czasie rzeczywistym.
Gdzie Anpheros się mieści
Platforma Anpheros przechowuje wynik: rekord FHIR R4 osoby z każdą wartością z urządzenia noszonego jako Observation oznaczona jako dane urządzenia, chroniona zgodą, pochodzeniem i dziennikiem dostępu. Nie odczytuje ona sama Health Connect; robi to Twoja aplikacja na Androida. Własna aplikacja Anpheros, Anpheros Daily, odczytuje Health Connect na Androida (plany Plus i Max) i zapisuje codzienne podsumowania do rekordu.
Często zadawane pytania
Czy Health Connect posiada API chmurowe?
Nie. Health Connect przechowuje dane na telefonie, a dostęp do nich, za zgodą użytkownika, mają tylko aplikacje zainstalowane na tym telefonie. Aby przesłać dane na serwer, Twoja aplikacja musi je odczytać i wysłać.
Czy istnieje REST API lub Web API dla Health Connect?
Nie. Health Connect to API działające na urządzeniu z systemem Android, bez punktu końcowego REST lub Web. Serwer otrzymuje dane tylko wtedy, gdy aplikacja na telefonie odczyta je i wyśle, na przykład jako obserwacje FHIR do Anpheros.
Czy mogę używać Health Connect API z Pythona lub React Native?
Z Pythona nie, ponieważ działa on na serwerze, a nie na telefonie. Z React Native lub Flutter tak, poprzez wtyczki społecznościowe lub oficjalne, które wywołują API Androida wewnątrz aplikacji.
Dlaczego moja aplikacja może odczytywać tylko 30 dni danych z Health Connect?
Bez uprawnienia READ_HEALTH_DATA_HISTORY, Health Connect ogranicza odczyt do 30 dni przed udzieleniem pierwszego uprawnienia. Poproś o uprawnienie do historii, jeśli potrzebujesz starszych danych.
Czy Garmin synchronizuje się z Health Connect?
Tak. Google ogłosiło w sierpniu 2025 roku, że Garmin Connect obsługuje Health Connect na Androidzie 14 i nowszych, dla danych dotyczących aktywności i samopoczucia, takich jak tętno i kalorie. Własne wskaźniki Garmin, takie jak Body Battery, nie są udostępniane.
Czy mogę odczytywać dane Fitbit bez Fitbit Web API?
Na Androidzie tak: po włączeniu Health Connect w aplikacji Fitbit, dane Fitbit są dostępne w Health Connect dla autoryzowanych przez użytkownika aplikacji.
Dlaczego liczba kroków w Health Connect różni się od tej w mojej aplikacji producenta?
Aplikacja producenta mogła jeszcze nie wyeksportować swoich najnowszych danych, może eksportować tylko niektóre typy danych, lub Health Connect może preferować inne źródło dla tego samego okresu. Sprawdź źródła danych i ich priorytet w ustawieniach Health Connect.
Powiązane
- Wyłączenie Fitbit Web API (październik 2026)
- Dane z urządzeń noszonych w FHIR: tabela mapowania i kod backendowy
- Samsung Health do FHIR
- Apple Health (HealthKit) do FHIR
- Jak zbudować aplikację medyczną z Flutterem
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card