Wymagania dotyczące metadanych

Ten przewodnik jest zgodny z wersją Health Connect 1.1.0-alpha12.

W przypadku deweloperów, którzy zdecydują się na uaktualnienie do wersji 1.1.0-alpha12, w Health Connect nastąpią zmiany w metadanych.

Informacje o bibliotece

Identyfikator artefaktu wtyczki Google Maven Android Gradle określa bibliotekę Health Connect, którą musisz zaktualizować. Dodaj tę zależność pakietu SDK Health Connect do pliku build.gradle na poziomie modułu:

dependencies {
  implementation "androidx.health.connect:connect-client:1.1.0-alpha12"
}

Zmiany metadanych

pakiecie SDK Health Connect Jetpack w wersji 1.1.0-alpha12 wprowadziliśmy 2 zmiany metadanych, aby zapewnić istnienie w ekosystemie dodatkowych przydatnych metadanych.

Określanie metody nagrywania

Szczegóły metadanych musisz podać za każdym razem, gdy tworzony jest obiekt typu Record().

Podczas zapisywania danych w Health Connect musisz określić jedną z 4 metod rejestrowania:

Metoda nagrywania Opis
RECORDING_METHOD_UNKNOWN Nie można zweryfikować metody nagrywania.
RECORDING_METHOD_MANUAL_ENTRY Użytkownik wprowadził dane.
RECORDING_METHOD_AUTOMATICALLY_RECORDED Dane zostały zarejestrowane przez urządzenie lub czujnik.
RECORDING_METHOD_ACTIVELY_RECORDED Użytkownik zainicjował rozpoczęcie lub zakończenie sesji nagrywania na urządzeniu.

Na przykład:

StepsRecord(
    startTime \= Instant.ofEpochMilli(1234L),
    startZoneOffset \= null,
    endTime \= Instant.ofEpochMilli(1236L),
    endZoneOffset \= null,
    metadata \= Metadata.manualEntry(),
    Count \= 10,
)

Typ urządzenia

Musisz określić typ urządzenia w przypadku wszystkich danych rejestrowanych automatycznie i aktywnie. Obecnie obsługiwane typy urządzeń to:

Typ urządzenia Opis
TYPE_UNKNOWN Typ urządzenia jest nieznany.
TYPE_WATCH Typ urządzenia to zegarek.
TYPE_PHONE Typ urządzenia to telefon.
TYPE_SCALE Typ urządzenia to waga.
TYPE_RING Typem urządzenia jest pierścień.
TYPE_HEAD_MOUNTED Typ urządzenia to urządzenie montowane na głowie.
TYPE_FITNESS_BAND Typ urządzenia to tracker fitness.
TYPE_CHEST_STRAP Typ urządzenia to pas na klatkę piersiową.
TYPE_SMART_DISPLAY Typ urządzenia to inteligentny ekran.

Niektóre wartości Device.type są dostępne tylko w nowszych wersjach Health Connect. Gdy funkcja rozszerzonych typów urządzeń jest niedostępna, te typy są traktowane jako Device.TYPE_UNKNOWN.

Rozszerzone typy urządzeń Opis
TYPE_CONSUMER_MEDICAL_DEVICE Typ urządzenia to urządzenie medyczne.
TYPE_GLASSES Typ urządzenia to para inteligentnych okularów.
TYPE_HEARABLE Typ urządzenia to urządzenie słuchowe.
TYPE_FITNESS_MACHINE Typ urządzenia to maszyna stacjonarna.
TYPE_FITNESS_EQUIPMENT Typ urządzenia to sprzęt do ćwiczeń.
TYPE_PORTABLE_COMPUTER Typ urządzenia to komputer przenośny.
TYPE_METER Typ urządzenia to miernik.
Aby sprawdzić, czy urządzenie użytkownika obsługuje rozszerzone typy urządzeń w Health Connect, sprawdź dostępność FEATURE_EXTENDED_DEVICE_TYPES w aplikacji:

if (healthConnectClient
     .features
     .getFeatureStatus(
       HealthConnectFeatures.FEATURE_EXTENDED_DEVICE_TYPES
     ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

  // Feature is available
} else {
  // Feature isn't available
}
Więcej informacji znajdziesz w artykule Sprawdzanie dostępności funkcji.

Jeśli to możliwe, podaj producenta i model urządzenia oraz jego typ. Na przykład:

private val TEST_DEVICE = Device(
    manufacturer = "Google",
    model = "Pixel Watch",
    type = Device.TYPE_WATCH
)

Zaktualizowano fragmenty

W przewodnikach po Health Connect wprowadziliśmy aktualizacje, dodając nowe fragmenty kodu, które są potrzebne do spełnienia nowych wymagań dotyczących metadanych. Przykłady znajdziesz na stronie Zapisywanie danych.

Nowe metody metadanych

Metadanych nie można już tworzyć bezpośrednio, więc użyj jednej z metod fabrykujących, aby uzyskać nową instancję metadanych. Każda funkcja ma 3 warianty sygnatury:

  • activelyRecorded

    • fun activelyRecorded(device: Device): Metadata.
    • fun activelyRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadata
    • fun activelyRecordedWithId(id: String, device: Device): Metadata
  • autoRecorded

    • fun autoRecorded(device: Device): Metadata
    • fun autoRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadata
    • fun autoRecordedWithId(id: String, device: Device): Metadata
  • manualEntry

    • fun manualEntry(device: Device? = null): Metadata
    • fun manualEntry(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadata
    • fun manualEntryWithId(id: String, device: Device? = null): Metadata
  • unknownRecordingMethod

    • fun unknownRecordingMethod(device: Device? = null): Metadata
    • fun unknownRecordingMethod(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadata
    • fun unknownRecordingMethodWithId(id: String, device: Device? = null): Metadata

Więcej informacji znajdziesz w projekcie Android Open Source.

Dane testowe

Użyj biblioteki testowej, aby zasymulować oczekiwane wartości metadanych:

private val TEST_METADATA =
    Metadata.unknownRecordingMethod(
        clientRecordId = "clientId",
        clientRecordVersion = 1L,
        device = Device(type = Device.TYPE_UNKNOWN),
    ).populatedWithTestValues(id = "test")

Symuluje to działanie implementacji Health Connect, która automatycznie wypełnia te wartości podczas wstawiania rekordu.

W przypadku biblioteki testowej musisz dodać tę zależność pakietu SDK Health Connect do pliku build.gradle na poziomie modułu:

dependencies {
  testImplementation "androidx.health.connect:connect-testing:1.0.0-alpha02"
}

Uaktualnianie biblioteki

Główne czynności, które musisz wykonać:

  1. Zaktualizuj bibliotekę do wersji 1.1.0-alpha12.

  2. Podczas tworzenia biblioteki będą zgłaszane błędy kompilacji w miejscach, w których potrzebne są nowe metadane. Dlatego za każdym razem, gdy tworzony jest obiekt typu Record(), należy wprowadzać niezbędne zmiany w metadanych. To powinno zakończyć migrację.

  3. Jeśli aplikacja zapisuje rozszerzone typy urządzeń, umieść je za FEATURE_EXTENTED_DEVICE_TYPES, aby uniknąć nieoczekiwanego TYPE_UNKNOWN na urządzeniach, na których ta funkcja nie jest dostępna.