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)
}
}