AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Health Connect та FHIR

Читайте дані Android Health Connect з Fitbit, Garmin, Oura, Withings та Wear OS на Flutter і записуйте їх до запису FHIR R4: дозволи, історія, огляд Play.

Health Connect — це локальне сховище даних про здоров'я Android: програми Samsung Health, Fitbit, Garmin Connect, Oura, Withings та Wear OS записують до нього дані, а ваш додаток читає їх за дозволом користувача. Щоб помістити ці дані до запису FHIR, читайте щоденні підсумки та середні значення на телефоні, надсилайте їх до свого бекенду та записуйте кожну метрику як Observation з кодом LOINC та одиницею UCUM. Ця сторінка охоплює дозволи, які вимагає Android, приклад на Flutter (перевірений з flutter analyze), який читає Health Connect на Android та Apple Health на iOS з однаковим кодом, а також правила публікації в Google Play.

Що надходить до Health Connect

Health Connect вбудований в Android 14 і новіші версії, а також доступний як додаток для старіших версій. Він зберігає записи, такі як HeartRateRecord, RestingHeartRateRecord, HeartRateVariabilityRmssdRecord, OxygenSaturationRecord, RespiratoryRateRecord, StepsRecord, DistanceRecord, ActiveCaloriesBurnedRecord, SleepSessionRecord, WeightRecord, BloodPressureRecord, BloodGlucoseRecord, BodyTemperatureRecord та ExerciseSessionRecord.

Хто записує дані, згідно з документацією кожного постачальника:

Джерело Чого очікувати
Fitbit та Pixel Watch Додаток Fitbit синхронізується з Health Connect після його налаштування користувачем (Довідка Google)
Garmin Garmin Connect підтримує Health Connect на Android 14 і новіших версіях: дані про активність та самопочуття, такі як пульс і калорії (Android Developers, серпень 2025)
Oura Пульс, ВСР, сон з фазами, кроки, відстань, калорії та тренування (Oura)
Withings Health Mate обмінюється даними про активність, вагу, сон та іншими даними через Health Connect (Блог Android Developers)
Samsung Health, Galaxy Watch Підмножина даних, у власному темпі Samsung Health — див. Samsung Health до FHIR

Кожен додаток постачальника повинен мати дозвіл на запис до Health Connect, який користувач надає в цьому додатку або в налаштуваннях Health Connect. Якщо джерело відсутнє, це перше, що слід перевірити.

Дозволи, які вимагає Android

Читання щоденних значень у Flutter

Пакет health читає Health Connect на Android та Apple Health на iOS через один API. Приклад використовує версію 13.2.1, з якою постачається 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 запитує у Health Connect його агреговане загальне значення, яке вже вирішує перекриття джерел (телефон і годинник, що рахують одну й ту саму прогулянку) відповідно до пріоритету джерела даних, встановленого особою в Health Connect. Самостійне підсумовування необроблених записів кроків призведе до подвійного підрахунку.

Примітки щодо впровадження цього в Anpheros Daily:

Від значень Flutter до FHIR Observations

Надсилайте значення до вашого бекенду та створюйте один Observation на людину, метрику та день зі стабільним ідентифікатором, оновлюючи його, коли той самий день надсилається знову. Повна таблиця зіставлення (Health Connect record → LOINC → UCUM), валідний приклад FHIR та виконання TypeScript upsert на платформі знаходяться в розділі Wearable data in FHIR.

Публікація в Google Play

Додатки, які читають Health Connect, повинні заповнити декларацію дозволів Health Connect у Play Console, обґрунтувати кожен тип даних та мати відповідну політику конфіденційності. Запити на типи даних, які додаток явно не використовує, відхиляються. Плануйте перевірку: перелічіть кожен тип поруч із екраном, який його використовує.

Wear OS

На годиннику Wear OS додаток може зчитувати дані з датчиків у реальному часі через Health Services (наприклад, пульс під час тренування). Дані, які записує власна програма здоров'я годинника, потрапляють до Health Connect на телефоні через додаток постачальника. Для медичної картки зазвичай достатньо зчитувати дані з Health Connect на телефоні; додаток для годинника призначений для функцій реального часу.

Де Anpheros вписується

Платформа Anpheros зберігає результат: запис FHIR R4 особи з кожним значенням ношеного пристрою як Observation, позначеним як дані пристрою, за згодою, походженням та журналом доступу. Вона не читає Health Connect самостійно; це робить ваш Android додаток. Власний додаток Anpheros, Anpheros Daily, читає Health Connect на Android (плани Plus та Max) і записує щоденні підсумки до запису.

Часті запитання

Чи має Health Connect хмарний API?

Ні. Health Connect зберігає дані на телефоні, і лише додатки на цьому телефоні можуть їх читати за дозволом користувача. Щоб передати дані на сервер, ваш додаток зчитує їх і надсилає.

Чи існує REST API або веб-API для Health Connect?

Ні. Health Connect — це Android API, що працює на пристрої, без кінцевої точки REST або веб. Сервер отримує дані лише тоді, коли додаток на телефоні зчитує їх і надсилає, наприклад, як FHIR Observations до Anpheros.

Чи можу я використовувати Health Connect API з Python або React Native?

З Python — ні, оскільки він працює на телефоні, а не на сервері. З React Native або Flutter — так, через плагіни спільноти або офіційні плагіни, які викликають Android API всередині додатка.

Чому мій додаток може читати лише 30 днів даних Health Connect?

Без дозволу READ_HEALTH_DATA_HISTORY Health Connect обмежує читання до 30 днів до надання першого дозволу. Запитуйте дозвіл на історію, якщо вам потрібні старіші дані.

Чи синхронізується Garmin з Health Connect?

Так. Google оголосив у серпні 2025 року, що Garmin Connect підтримує Health Connect на Android 14 і новіших версіях для даних про активність та самопочуття, таких як пульс і калорії. Власні показники Garmin, такі як Body Battery, не передаються.

Чи можу я читати дані Fitbit без Fitbit Web API?

На Android — так: після того, як користувач увімкне Health Connect у додатку Fitbit, дані Fitbit будуть доступні в Health Connect для авторизованих додатків.

Чому кількість кроків у Health Connect відрізняється від мого додатка від постачальника?

Додаток від постачальника, можливо, ще не експортував свої останні дані, може експортувати лише деякі типи, або Health Connect може віддати перевагу іншому джерелу за той самий період. Перевірте джерела даних та їх пріоритет у налаштуваннях Health Connect.

Пов'язане

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy