Интеграция Health Connect для доступа к данным здоровья в Android

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Интеграция Health Connect для доступа к данным здоровья в Android
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Интеграция Health Connect для доступа к данным здоровья в Android

Health Connect — централизованное хранилище данных здоровья для Android, ответ Google на HealthKit в iOS. Появился как standalone-приложение в 2022 году, встроен в Android 14 в качестве системного компонента. Правильная архитектура от старта сэкономит недели работы при добавлении новых типов данных или поддержке Wear OS.

Требования Google Play и лицензионное соглашение

Это первое, с чего надо начинать — не с кода. Приложения, которые читают данные из Health Connect, обязаны:

  1. Подписать Health Connect Permissions Policy и отправить форму в Google до публикации
  2. Иметь экран политики конфиденциальности, явно описывающий использование медицинских данных
  3. Не передавать данные здоровья третьим сторонам без явного согласия пользователя (включая аналитику)
  4. При запросе разрешений показывать обоснование каждого типа данных

Нарушение этих требований — гарантированное удаление из Play Market. Проходим review Health Connect ещё до релиза.

Подключение и разрешения

// build.gradle
implementation("androidx.health.connect:connect-client:1.1.0")

Минимальная версия: minSdk = 26, но Health Connect как приложение работает на Android 9+, а встроен — в Android 14. На Android 9–13 пользователь должен установить Health Connect из Play Store.

val healthConnectClient = HealthConnectClient.getOrCreate(context)

// Проверка доступности
when (HealthConnectClient.getSdkStatus(context)) {
    HealthConnectClient.SDK_AVAILABLE -> { /* работаем */ }
    HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED -> {
        // Показываем кнопку установки/обновления Health Connect
        val intent = Intent(Intent.ACTION_VIEW).apply {
            data = Uri.parse("market://details?id=com.google.android.apps.healthdata")
        }
        startActivity(intent)
    }
    HealthConnectClient.SDK_UNAVAILABLE -> { /* Android < 9, Health Connect не поддерживается */ }
}

Запрос разрешений:

val permissions = setOf(
    HealthPermission.getReadPermission(StepsRecord::class),
    HealthPermission.getReadPermission(HeartRateRecord::class),
    HealthPermission.getWritePermission(ExerciseSessionRecord::class)
)

val requestPermissions = registerForActivityResult(
    PermissionController.createRequestPermissionResultContract()
) { granted ->
    if (granted.containsAll(permissions)) {
        // все разрешения получены
    }
}

// Проверка перед запросом
val granted = healthConnectClient.permissionController.getGrantedPermissions()
if (!granted.containsAll(permissions)) {
    requestPermissions.launch(permissions)
}

Чтение данных: Records и запросы

Каждый тип данных — отдельный Record-класс: StepsRecord, HeartRateRecord, SleepSessionRecord, ExerciseSessionRecord и т.д. Типов больше 40.

// Шаги за период
val response = healthConnectClient.readRecords(
    ReadRecordsRequest(
        recordType = StepsRecord::class,
        timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
    )
)
val totalSteps = response.records.sumOf { it.count }

Для агрегации — aggregateGroupByDuration или aggregateGroupByPeriod:

val aggregateRequest = AggregateGroupByPeriodRequest(
    metrics = setOf(StepsRecord.COUNT_TOTAL),
    timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
    timeRangeSlicer = Period.ofDays(1)
)
val result = healthConnectClient.aggregateGroupByPeriod(aggregateRequest)
result.forEach { bucket ->
    val steps = bucket.result[StepsRecord.COUNT_TOTAL] ?: 0L
    // steps за один день
}

Запись тренировок

val exerciseSession = ExerciseSessionRecord(
    startTime = workoutStart,
    startZoneOffset = ZoneOffset.UTC,
    endTime = workoutEnd,
    endZoneOffset = ZoneOffset.UTC,
    exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_RUNNING,
    title = "Утренняя пробежка"
)

val distanceRecord = DistanceRecord(
    startTime = workoutStart,
    startZoneOffset = ZoneOffset.UTC,
    endTime = workoutEnd,
    endZoneOffset = ZoneOffset.UTC,
    distance = Length.meters(5200.0)
)

healthConnectClient.insertRecords(listOf(exerciseSession, distanceRecord))

Фоновое чтение и изменения

changesToken — механизм инкрементальных обновлений, аналог HKAnchoredObjectQuery в HealthKit:

// Получаем начальный токен
val token = healthConnectClient.getChangesToken(
    ChangesTokenRequest(setOf(StepsRecord::class))
)

// При следующей синхронизации
val changes = healthConnectClient.getChanges(token)
changes.changes.filterIsInstance<UpsertionChange>().forEach { change ->
    // новая или обновлённая запись
}
val newToken = changes.nextChangesToken // сохраняем для следующего раза

Совместимость с Google Fit

Health Connect не читает исторические данные Google Fit автоматически. Пользователь должен вручную включить синхронизацию в настройках Health Connect. Если приложение мигрирует с Google Fit — информируем пользователей, что старые данные могут отображаться не сразу.

Сроки

Базовая интеграция Health Connect (чтение шагов, ЧСС, сна) — 5–8 рабочих дней. С записью тренировок, инкрементальной синхронизацией с сервером и fallback на Google Fit — 2–3 недели.