Как выполнять точечные измерения показателей здоровья с помощью MeasureClient

С помощью API MeasureClient ваше приложение регистрирует обратные вызовы, чтобы получать данные в течение короткого периода времени. Это необходимо, когда приложение используется и требует быстрого обновления данных. По возможности создайте для этого интерфейс переднего плана, чтобы пользователь знал о происходящем.

Добавьте зависимости

Чтобы добавить зависимость от сервисов наблюдения за здоровьем, добавьте в проект репозиторий Google Maven. Дополнительную информацию можно найти в статье Репозиторий Maven от Google.

Затем в файл build.gradle на уровне модуля добавьте следующую зависимость:

классный

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

Котлин

dependencies {
    implementation("androidx.health:health-services-client:1.1.0")
}

Проверить возможности

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

В примере ниже показано, как проверить, может ли устройство предоставить тип данных HEART_RATE_BPM.

val healthClient = HealthServices.getClient(this /*context*/)
val measureClient = healthClient.measureClient
lifecycleScope.launch {
    val capabilities = measureClient.getCapabilitiesAsync().await()
    supportsHeartRate = DataType.HEART_RATE_BPM in capabilities.supportedDataTypesMeasure
}

Зарегистрируйтесь, чтобы получить доступ к данным

Каждый зарегистрированный обратный вызов предназначен для одного типа данных. Обратите внимание, что некоторые типы данных могут иметь различные состояния доступности. Например, данные о пульсе могут быть недоступны, если устройство неправильно закреплено на запястье.

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

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

val heartRateCallback = object : MeasureCallback {
    override fun onAvailabilityChanged(dataType: DeltaDataType<*, *>, availability: Availability) {
        if (availability is DataTypeAvailability) {
            // Handle availability change.
        }
    }

    override fun onDataReceived(data: DataPointContainer) {
        // Inspect data points.
    }
}
val healthClient = HealthServices.getClient(this /*context*/)
val measureClient = healthClient.measureClient

// Register the callback.
measureClient.registerMeasureCallback(DataType.Companion.HEART_RATE_BPM, heartRateCallback)

// Unregister the callback.
awaitClose {
    runBlocking {
        measureClient.unregisterMeasureCallbackAsync(DataType.Companion.HEART_RATE_BPM, heartRateCallback)
    }
}