Начните работу с Health Connect

Данное руководство совместимо с Health Connect версии 1.1.0-alpha12 .

В этом руководстве показано, как начать использовать Health Connect в вашем приложении.

Шаг 1: Подготовьте приложение Health Connect

Приложение Health Connect отвечает за обработку всех запросов, которые ваше приложение отправляет через Health Connect SDK. Эти запросы включают хранение данных и управление доступом к ним для чтения и записи.

Доступ к Health Connect зависит от версии Android, установленной на телефоне. В следующих разделах описывается, как работать с несколькими последними версиями Android.

Андроид 14

Начиная с Android 14 (API уровня 34), Health Connect является частью Android Framework. Эта версия Health Connect является модулем фреймворка . При этом настройка не требуется.

Android 13 и ниже

На Android 13 (API Level 33) и более ранних версиях Health Connect не является частью Android Framework. В этом случае вам необходимо установить приложение Health Connect из Google Play Store.

Если вы интегрировали свое приложение с Health Connect на Android 13 и ниже и хотите перейти на Android 14, см. раздел Миграция с Android 13 на 14 .

Откройте приложение Health Connect.

Health Connect больше не отображается на главном экране по умолчанию. Чтобы открыть Health Connect, перейдите в Настройки > Приложения > Health Connect или добавьте Health Connect в меню быстрых настроек .

Кроме того, Health Connect требует, чтобы у пользователя была включена блокировка экрана с помощью PIN-кода, шаблона или пароля, чтобы данные о состоянии здоровья, хранящиеся в Health Connect, были защищены от злоумышленников, пока устройство заблокировано. Чтобы установить блокировку экрана, перейдите в Настройки > Безопасность > Блокировка экрана .

Шаг 2: Добавьте Health Connect SDK в свое приложение

Health Connect SDK отвечает за использование API Health Connect для отправки запросов при выполнении операций с хранилищем данных в приложении Health Connect.

Добавьте зависимость Health Connect SDK в файл build.gradle на уровне модуля:

dependencies {
  ...
  implementation "androidx.health.connect:connect-client:1.1.0-rc02"
  ...
}

Последнюю версию можно найти в выпусках Health Connect .

Шаг 3: Настройте свое приложение

В следующих разделах объясняется, как настроить приложение для интеграции с Health Connect.

Объявить разрешения

Доступ к данным о здоровье и фитнесе является конфиденциальным. Health Connect реализует уровень безопасности для операций чтения и записи, поддерживая доверие пользователей.

В своем приложении объявите разрешения на чтение и запись в файле AndroidManifest.xml на основе требуемых типов данных, которые должны совпадать с теми, к которым вы объявили доступ в Play Console.

Health Connect использует стандартный формат объявления разрешений Android. Назначайте разрешения с помощью тегов <uses-permission> . Вкладывайте их в теги <manifest> .

<manifest>
  <uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
  <uses-permission android:name="android.permission.health.WRITE_HEART_RATE"/>
  <uses-permission android:name="android.permission.health.READ_STEPS"/>
  <uses-permission android:name="android.permission.health.WRITE_STEPS"/>

  <application>
  ...
  </application>
</manifest>

Полный список разрешений и соответствующих им типов данных см. в разделе Список типов данных .

Покажите диалоговое окно политики конфиденциальности вашего приложения

В вашем манифесте Android должно быть действие, отображающее политику конфиденциальности вашего приложения, которая является обоснованием запрашиваемых разрешений вашим приложением и описывает, как используются и обрабатываются данные пользователя.

Объявите это действие для обработки намерения ACTION_SHOW_PERMISSIONS_RATIONALE , которое будет отправлено в приложение, когда пользователь нажимает на ссылку политики конфиденциальности на экране разрешений Health Connect.

...
<application>
  ...
  <!-- For supported versions through Android 13, create an activity to show the rationale
       of Health Connect permissions once users click the privacy policy link. -->
  <activity
      android:name=".PermissionsRationaleActivity"
      android:exported="true">
    <intent-filter>
      <action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
    </intent-filter>
  </activity>

  <!-- For versions starting Android 14, create an activity alias to show the rationale
       of Health Connect permissions once users click the privacy policy link. -->
  <activity-alias
      android:name="ViewPermissionUsageActivity"
      android:exported="true"
      android:targetActivity=".PermissionsRationaleActivity"
      android:permission="android.permission.START_VIEW_PERMISSION_USAGE">
    <intent-filter>
      <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
      <category android:name="android.intent.category.HEALTH_PERMISSIONS" />
    </intent-filter>
  </activity-alias>
  ...
</application>
...

Получить клиента Health Connect

HealthConnectClient — это точка входа в API Health Connect. Он позволяет приложению использовать хранилище данных в приложении Health Connect. Он автоматически управляет своим подключением к базовому слою хранения и обрабатывает все IPC и сериализацию исходящих запросов и входящих ответов.

Чтобы получить экземпляр клиента, сначала объявите имя пакета Health Connect в манифесте Android.

<application> ... </application>
...
<!-- Check if Health Connect is installed -->
<queries>
    <package android:name="com.google.android.apps.healthdata" />
</queries>

Затем в Activity проверьте, установлен ли Health Connect с помощью getSdkStatus . Если установлен, получите экземпляр HealthConnectClient .

val availabilityStatus = HealthConnectClient.getSdkStatus(context, providerPackageName)
if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE) {
  return // early return as there is no viable integration
}
if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED) {
  // Optionally redirect to package installer to find a provider, for example:
  val uriString = "market://details?id=$providerPackageName&url=healthconnect%3A%2F%2Fonboarding"
  context.startActivity(
    Intent(Intent.ACTION_VIEW).apply {
      setPackage("com.android.vending")
      data = Uri.parse(uriString)
      putExtra("overlay", true)
      putExtra("callerId", context.packageName)
    }
  )
  return
}
val healthConnectClient = HealthConnectClient.getOrCreate(context)
// Issue operations with healthConnectClient

Шаг 4: Запросите разрешения у пользователя

После создания экземпляра клиента ваше приложение должно запросить разрешения у пользователя. Пользователи должны иметь возможность предоставлять или отклонять разрешения в любое время.

Для этого создайте набор разрешений для требуемых типов данных. Убедитесь, что разрешения в наборе сначала объявлены в вашем манифесте Android.

// Create a set of permissions for required data types
val PERMISSIONS =
    setOf(
  HealthPermission.getReadPermission(HeartRateRecord::class),
  HealthPermission.getWritePermission(HeartRateRecord::class),
  HealthPermission.getReadPermission(StepsRecord::class),
  HealthPermission.getWritePermission(StepsRecord::class)
)

Используйте getGrantedPermissions , чтобы узнать, предоставлены ли вашему приложению требуемые разрешения. Если нет, используйте createRequestPermissionResultContract , чтобы запросить эти разрешения. Это отобразит экран разрешений Health Connect.

// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()

val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
  if (granted.containsAll(PERMISSIONS)) {
    // Permissions successfully granted
  } else {
    // Lack of required permissions
  }
}

suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
  val granted = healthConnectClient.permissionController.getGrantedPermissions()
  if (granted.containsAll(PERMISSIONS)) {
    // Permissions already granted; proceed with inserting or reading data
  } else {
    requestPermissions.launch(PERMISSIONS)
  }
}

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

Шаг 5: Выполнение операций

Теперь, когда все настроено, выполните операции чтения и записи в вашем приложении.

Запись данных

Структурируйте свои данные в запись. Ознакомьтесь со списком типов данных, доступных в Health Connect.

val stepsRecord = StepsRecord(
    count = 120,
    startTime = START_TIME,
    endTime = END_TIME,
    startZoneOffset = START_ZONE_OFFSET,
    endZoneOffset = END_ZONE_OFFSET,
)

Затем запишите свою запись, используя insertRecords .

suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
    val endTime = Instant.now()
    val startTime = endTime.minus(Duration.ofMinutes(15))
    try {
        val stepsRecord = StepsRecord(
            count = 120,
            startTime = startTime,
            endTime = endTime,
            startZoneOffset = ZoneOffset.UTC,
            endZoneOffset = ZoneOffset.UTC,
            metadata = Metadata.autoRecorded(
                device = Device(type = Device.TYPE_WATCH)
            ),
        )
        healthConnectClient.insertRecords(listOf(stepsRecord))
    } catch (e: Exception) {
        // Run error handling here
    }
}

Прочитать данные

Вы можете прочитать свои данные по отдельности с помощью readRecords .

suspend fun readHeartRateByTimeRange(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.readRecords(
            ReadRecordsRequest(
                HeartRateRecord::class,
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        for (record in response.records) {
            // Process each record
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

Вы также можете прочитать свои данные в агрегированном виде, используя aggregate .

suspend fun aggregateSteps(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.aggregate(
            AggregateRequest(
                metrics = setOf(StepsRecord.COUNT_TOTAL),
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        // The result may be null if no data is available in the time range
        val stepCount = response[StepsRecord.COUNT_TOTAL]
    } catch (e: Exception) {
        // Run error handling here
    }
}

Видеоуроки

Посмотрите эти видеоролики, в которых подробно рассказывается о функциях Health Connect, а также приводятся рекомендации по передовому опыту для достижения бесперебойной интеграции:

Ресурсы

Ознакомьтесь со следующими ресурсами, которые помогут вам в дальнейшей разработке.

  • Health Connect SDK (доступно в Jetpack): включите этот SDK в свое приложение, чтобы использовать API Health Connect.
  • Справочник по API: ознакомьтесь со справочником Jetpack по API Health Connect.
  • Объявите использование типов данных: в Play Console объявите доступ к типам данных Health Connect, которые ваше приложение считывает и в которые записывает.
  • Дополнительный пример кода GitHub и практическая работа: ознакомьтесь с репозиторием примеров кода GitHub и практической работой по кодовой работе , которые помогут вам приступить к работе.

Следующие шаги

Ознакомьтесь с разделом Общие рабочие процессы , чтобы узнать, как выполнять операции в Health Connect, такие как: