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

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

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

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

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

Groovy

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

Kotlin

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

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

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

В следующем примере показано, как проверить, может ли устройство предоставить тип данных 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)
    }
}