Это руководство совместимо с 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 уровня 33) и более ранних версиях Health Connect не входит в состав Android Framework. В этом случае вам необходимо установить приложение Health Connect из Google Play.
Если вы интегрировали свое приложение с 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.2.0-alpha01" ... }
Последнюю версию смотрите в выпусках 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 должно быть Activity, отображающее политику конфиденциальности вашего приложения, которая является обоснованием запрашиваемых разрешений вашим приложением и описывает, как используются и обрабатываются данные пользователя.
Объявите это действие для обработки намерения 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, как: