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

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

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

Чтобы добавить зависимость от Health Services, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .

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

классный

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

Котлин

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

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

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

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