Dzięki interfejsowi API MeasureClient
aplikacja rejestruje wywołania zwrotne, aby otrzymać dane przez krótki czas.
Służy to sytuacji, gdy Twoja aplikacja jest używana i wymaga szybkich aktualizacji danych. Jeśli to możliwe, utwórz go z użyciem interfejsu użytkownika na pierwszym planie, aby użytkownicy wiedzieli o tym.
Dodaj zależności
Aby dodać zależność od usług zdrowotnych, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.
Następnie w pliku build.gradle
na poziomie modułu dodaj tę zależność:
Odlotowy
dependencies { implementation "androidx.health:health-services-client:1.1.0-alpha03" }
Kotlin
dependencies { implementation("androidx.health:health-services-client:1.1.0-alpha03") }
Sprawdź możliwości
Zanim zarejestrujesz się w celu aktualizacji danych, sprawdź, czy urządzenie może dostarczać typ danych, których potrzebuje Twoja aplikacja. Zanim sprawdzisz możliwości, możesz włączyć lub wyłączyć określone funkcje albo zmodyfikować interfejs aplikacji, aby dostosować funkcje, które są niedostępne.
Z tego przykładu dowiesz się, jak sprawdzić, czy urządzenie może dostarczać typ danych 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
}
Zarejestruj się, aby uzyskać dane
Każde zarejestrowane wywołanie zwrotne dotyczy jednego typu danych. Pamiętaj, że niektóre typy danych mogą mieć różne stany dostępności. Na przykład dane o tętnie mogą być niedostępne, gdy urządzenie nie będzie prawidłowo przypięte do nadgarstka.
Ważne jest, aby zminimalizować czas rejestrowania wywołania zwrotnego, ponieważ wywołania zwrotne powodują wzrost częstotliwości próbkowania z czujnika, co z kolei zwiększa zużycie energii.
Z przykładu poniżej dowiesz się, jak zarejestrować i wyrejestrować wywołanie zwrotne, aby otrzymać 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)
}
}