Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Health Connect în FHIR
Citește datele Android Health Connect de la Fitbit, Garmin, Oura, Withings și Wear OS în Flutter și scrie-le într-un fișier FHIR R4: permisiuni, istoric, recenzie Play.
Health Connect este depozitul de sănătate de pe dispozitivul Android: aplicațiile Samsung Health, Fitbit, Garmin Connect, Oura, Withings și Wear OS scriu în el, iar aplicația dvs. citește din el cu permisiunea persoanei. Pentru a introduce aceste date într-un record FHIR, citiți totalurile zilnice și mediile de pe telefon, trimiteți-le către backend-ul dvs. și scrieți fiecare metrică ca o Observație cu un cod LOINC și o unitate UCUM. Această pagină acoperă permisiunile necesare de către Android, un exemplu Flutter (verificat cu flutter analyze) care citește Health Connect pe Android și Apple Health pe iOS cu același cod, și regulile pentru publicarea pe Google Play.
Ce ajunge în Health Connect
Health Connect este integrat în Android 14 și versiunile ulterioare și este disponibil ca aplicație pe versiunile mai vechi. Acesta deține înregistrări precum HeartRateRecord, RestingHeartRateRecord, HeartRateVariabilityRmssdRecord, OxygenSaturationRecord, RespiratoryRateRecord, StepsRecord, DistanceRecord, ActiveCaloriesBurnedRecord, SleepSessionRecord, WeightRecord, BloodPressureRecord, BloodGlucoseRecord, BodyTemperatureRecord și ExerciseSessionRecord.
Cine scrie acolo, conform documentației fiecărui furnizor:
| Sursă | Ce să aștepți |
|---|---|
| Fitbit și Pixel Watch | Aplicația Fitbit se sincronizează cu Health Connect odată ce persoana o configurează (Ajutor Google) |
| Garmin | Garmin Connect suportă Health Connect pe Android 14 și versiunile ulterioare: date de activitate și wellness precum ritmul cardiac și caloriile (Android Developers, august 2025) |
| Oura | Ritm cardiac, HRV, somn cu etape, pași, distanță, calorii și antrenamente (Oura) |
| Withings | Health Mate face schimb de activitate, greutate, somn și alte date prin Health Connect (Blog Android Developers) |
| Samsung Health, Galaxy Watch | Un subset, în ritmul propriu al Samsung Health — vezi Samsung Health to FHIR |
Fiecare aplicație a furnizorului trebuie să aibă permisiunea de a scrie în Health Connect, permisiune pe care persoana o acordă în acea aplicație sau în setările Health Connect. Dacă o sursă lipsește, acesta este primul lucru de verificat.
Permisiuni necesare pentru Android
- O permisiune per tip de înregistrare și direcție, de exemplu
android.permission.health.READ_HEART_RATEșiandroid.permission.health.READ_STEPS, declarată în manifest și solicitată la runtime. - Istoric: fără
android.permission.health.READ_HEALTH_DATA_HISTORY, o aplicație poate citi doar ultimele 30 de zile înainte ca permisiunea să fie acordată. - În fundal: citirea în timp ce aplicația nu este în prim-plan necesită
android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND. - Un ecran justificare permisiuni (o activitate care gestionează
ACTION_SHOW_PERMISSIONS_RATIONALE, plus o alias de activitate pe Android 14) care explică politica dvs. de confidențialitate; fără acesta, dialogul de permisiune nu se deschide. - În Flutter,
MainActivitytrebuie să extindăFlutterFragmentActivity, nuFlutterActivity, altfel solicitările de permisiune eșuează.
Citirea valorilor zilnice în Flutter
Pachetul health citește Health Connect pe Android și Apple Health pe iOS printr-o singură API. Exemplul folosește versiunea 13.2.1, cea cu care vine 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 solicită de la Health Connect totalul agregat, care deja rezolvă sursele suprapuse (un telefon și un ceas care numără aceeași plimbare) conform priorității sursei de date setată de persoană în Health Connect. Sumarea manuală a înregistrărilor brute de pași duce la dublă numărare.
Note de la livrarea acestui modul în Anpheros Daily:
- Sincronizare când aplicația trece în prim-plan, cu o scurtă protecție împotriva sincronizărilor repetate. Alte aplicații scriu în Health Connect conform propriului program, astfel încât datele pe care o persoană le vede în aplicația furnizorului pot apărea cu minute sau ore mai târziu.
- Ritmul cardiac este o serie, nu o singură valoare per eșantion: rezumați-l pe telefon (zilnic sau în ferestre de 4 ore pentru grafice) în loc să încărcați fiecare citire.
- HRV aici este RMSSD. Nu-l stocați sub codul SDNN utilizat pentru Apple Health.
De la valori Flutter la Observații FHIR
Trimiteți valorile către backend-ul dvs. și scrieți o Observație per persoană, metrică și zi, cu un identificator stabil, actualizând-o atunci când aceeași zi este trimisă din nou. Tabelul complet de mapare (Health Connect record → LOINC → UCUM), un exemplu FHIR validat și rularea TypeScript upsert împotriva platformei se găsesc pe Wearable data in FHIR.
Publicarea pe Google Play
Aplicațiile care citesc Health Connect trebuie să completeze declarația de permisiuni Health Connect în Play Console, să justifice fiecare tip de date și să aibă o politică de confidențialitate corespunzătoare. Solicitările pentru tipuri de date pe care aplicația nu le utilizează vizibil sunt respinse. Planificați revizuirea: listați fiecare tip lângă ecranul care îl utilizează.
Wear OS
Pe un ceas Wear OS, o aplicație poate citi date live de la senzori prin Health Services (de exemplu, ritmul cardiac în timpul unui antrenament). Datele înregistrate de aplicația de sănătate a ceasului ajung la Health Connect de pe telefon prin aplicația furnizorului de pe telefon. Pentru un dosar medical, citirea Health Connect de pe telefon este, de obicei, suficientă; o aplicație pentru ceas este destinată funcționalităților live.
Unde se încadrează Anpheros
Platforma Anpheros stochează rezultatul: înregistrarea FHIR R4 a persoanei, cu fiecare valoare de la dispozitivul purtabil ca o Observație marcată ca date de dispozitiv, protejată prin consimțământ, proveniență și un jurnal de acces. Nu citește Health Connect în sine; aplicația dvs. Android o face. Aplicația proprie Anpheros, Anpheros Daily, citește Health Connect pe Android (planurile Plus și Max) și scrie rezumate zilnice în înregistrare.
Întrebări frecvente
Health Connect are un API cloud?
Nu. Health Connect stochează datele pe telefon, iar doar aplicațiile de pe acel telefon le pot citi, cu permisiunea persoanei. Pentru a trimite datele către un server, aplicația dvs. le citește și le trimite.
Există un API REST sau un API web Health Connect?
Nu. Health Connect este un API Android pe dispozitiv, fără un punct final REST sau web. Un server primește datele doar atunci când o aplicație de pe telefon le citește și le trimite, de exemplu, ca Observații FHIR către Anpheros.
Pot folosi API-ul Health Connect din Python sau React Native?
Nu din Python, deoarece rulează pe telefon, nu pe un server. Din React Native sau Flutter, da, prin intermediul plugin-urilor comunitare sau oficiale care apelează API-ul Android din interiorul aplicației.
De ce aplicația mea poate citi doar 30 de zile de date Health Connect?
Fără permisiunea READ_HEALTH_DATA_HISTORY, Health Connect limitează citirile la 30 de zile înainte ca prima permisiune să fie acordată. Solicitați permisiunea de istoric dacă aveți nevoie de date mai vechi.
Garmin se sincronizează cu Health Connect?
Da. Google a anunțat în august 2025 că Garmin Connect suportă Health Connect pe Android 14 și versiuni ulterioare, pentru date de activitate și wellness, cum ar fi ritmul cardiac și caloriile. Scorurile proprii ale Garmin, cum ar fi Body Battery, nu sunt partajate.
Pot citi date Fitbit fără API-ul web Fitbit?
Pe Android, da: odată ce persoana activează Health Connect în aplicația Fitbit, datele Fitbit sunt disponibile în Health Connect pentru aplicațiile pe care le autorizează.
De ce numărul de pași din Health Connect diferă de cel din aplicația furnizorului meu?
Aplicația furnizorului s-ar putea să nu-și fi exportat încă cele mai recente date, s-ar putea să exporte doar anumite tipuri, sau Health Connect ar putea prefera o altă sursă pentru aceeași perioadă. Verificați sursele de date și prioritatea acestora în setările Health Connect.
Conexe
- Oprirea Fitbit Web API (octombrie 2026)
- Date de la dispozitive purtabile în FHIR: tabelul de mapare și codul backend
- Samsung Health la FHIR
- Apple Health (HealthKit) la FHIR
- Cum să construiești o aplicație de sănătate cu Flutter
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card