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: разрешения, история, проверка Google 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 to 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 — это API для устройств Android без конечной точки 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