Данное руководство совместимо с 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
- Чтение и письмо в Health Connect
- Советы по эффективной интеграции Health Connect
Ресурсы
Ознакомьтесь со следующими ресурсами, которые помогут вам в дальнейшей разработке.
- Health Connect SDK (доступно в Jetpack): включите этот SDK в свое приложение, чтобы использовать API Health Connect.
- Справочник по API: ознакомьтесь со справочником Jetpack по API Health Connect.
- Объявите использование типов данных: в Play Console объявите доступ к типам данных Health Connect, которые ваше приложение считывает и в которые записывает.
- Дополнительный пример кода GitHub и практическая работа: ознакомьтесь с репозиторием примеров кода GitHub и практической работой по кодовой работе , которые помогут вам приступить к работе.
Следующие шаги
Ознакомьтесь с разделом Общие рабочие процессы , чтобы узнать, как выполнять операции в Health Connect, такие как: