Mierz stan zdrowia za pomocą MeasureClient

Za pomocą interfejsu API MeasureClient aplikacja rejestruje wywołania zwrotne, aby przez krótki czas otrzymywać dane. Jest to przeznaczone do sytuacji, w których aplikacja jest używana i wymaga szybkich aktualizacji danych. Jeśli to możliwe, utwórz go w interfejsie na pierwszym planie, aby użytkownik był tego świadomy.

Dodawanie zależności

Aby dodać zależność od Usług zdrowotnych, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Maven Google.

Następnie w pliku build.gradle na poziomie modułu dodaj tę zależność:

Groovy

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

Kotlin

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

Sprawdzanie możliwości

Zanim zarejestrujesz się w celu otrzymywania aktualizacji danych, sprawdź, czy urządzenie może dostarczać typ danych, którego potrzebuje Twoja aplikacja. Sprawdzając najpierw możliwości, możesz włączać i wyłączać określone funkcje lub modyfikować interfejs aplikacji, aby kompensować niedostępne możliwości.

Poniższy przykład pokazuje, jak sprawdzić, czy urządzenie może dostarczać dane typu 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
}

Rejestracja w celu uzyskania dostępu do danych

Każde zarejestrowane wywołanie zwrotne dotyczy jednego typu danych. Pamiętaj, że niektóre typy danych mogą mieć różny stan dostępności. Na przykład dane o tętnie mogą być niedostępne, gdy urządzenie nie jest prawidłowo przymocowane do nadgarstka.

Ważne jest, aby zminimalizować czas rejestracji wywołania zwrotnego, ponieważ powoduje ono wzrost częstotliwości próbkowania czujnika, co z kolei zwiększa zużycie energii.

Poniższy przykład pokazuje, jak zarejestrować i wyrejestrować wywołanie zwrotne, aby otrzymywać dane 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)
    }
}