Requisiti dei metadati

Questa guida è compatibile con la versione 1.1.0-alpha12 e successive di Health Connect.

Sono state apportate modifiche ai metadati in Health Connect per gli sviluppatori che eseguono l'upgrade alla release 1.1.0-alpha12 o successive.

Informazioni sulla libreria

L'ID artefatto del plug-in Gradle Android di Google Maven identifica la libreria Health Connect di cui dovrai eseguire l'upgrade. Aggiungi questa dipendenza dell'SDK Health Connect al file build.gradle a livello di modulo:

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

Modifiche ai metadati

A partire dalla versione 1.1.0-alpha12, sono state introdotte due modifiche ai metadati nell'SDK Health Connect Jetpack per verificare l'esistenza di metadati utili aggiuntivi nell'ecosistema. Se metadata non è incluso nel costruttore Record, potresti visualizzare un errore Constructor internal.

Specificare il metodo di registrazione

Devi specificare i dettagli dei metadati ogni volta che viene creata un'istanza di un oggetto di tipo Record().

Quando scrivi dati in Health Connect, devi specificare uno dei quattro metodi di registrazione utilizzando uno dei metodi factory corrispondenti per creare un'istanza di Metadata:

Metodo di registrazione Descrizione
RECORDING_METHOD_UNKNOWN Non è possibile verificare il metodo di registrazione.
RECORDING_METHOD_MANUAL_ENTRY L'utente ha inserito i dati.
RECORDING_METHOD_AUTOMATICALLY_RECORDED Un dispositivo o un sensore ha registrato i dati.
RECORDING_METHOD_ACTIVELY_RECORDED L'utente ha avviato o terminato la sessione di registrazione su un dispositivo.

Ad esempio:

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

Tipo di dispositivo

Devi specificare un tipo di dispositivo per tutti i dati registrati automaticamente e attivamente. Per maggiori dettagli, consulta la classe Device nella documentazione di Jetpack. I tipi di dispositivi attuali includono:

Tipo di dispositivo Descrizione
TYPE_UNKNOWN Il tipo di dispositivo è sconosciuto.
TYPE_WATCH Il tipo di dispositivo è uno smartwatch.
TYPE_PHONE Il tipo di dispositivo è uno smartphone.
TYPE_SCALE Il tipo di dispositivo è una bilancia.
TYPE_RING Il tipo di dispositivo è un anello.
TYPE_HEAD_MOUNTED Il tipo di dispositivo è un dispositivo indossabile.
TYPE_FITNESS_BAND Il tipo di dispositivo è un fitness tracker.
TYPE_CHEST_STRAP Il tipo di dispositivo è una fascia toracica.
TYPE_SMART_DISPLAY Il tipo di dispositivo è uno smart display.

Alcuni valori Device.type sono disponibili solo nelle versioni successive di Health Connect. Quando la funzionalità dei tipi di dispositivi estesi non è disponibile, questi tipi vengono trattati come Device.TYPE_UNKNOWN.

Tipi di dispositivi estesi Descrizione
TYPE_CONSUMER_MEDICAL_DEVICE Il tipo di dispositivo è un dispositivo medico.
TYPE_GLASSES Il tipo di dispositivo è un paio di occhiali smart.
TYPE_HEARABLE Il tipo di dispositivo è un dispositivo indossabile.
TYPE_FITNESS_MACHINE Il tipo di dispositivo è una macchina stazionaria.
TYPE_FITNESS_EQUIPMENT Il tipo di dispositivo è un'attrezzatura per il fitness.
TYPE_PORTABLE_COMPUTER Il tipo di dispositivo è un computer portatile.
TYPE_METER Il tipo di dispositivo è un misuratore.
Per determinare se il dispositivo di un utente supporta i tipi di dispositivi estesi su Health Connect, controlla la disponibilità di FEATURE_EXTENDED_DEVICE_TYPES sul client:

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

  // Feature is available
} else {
  // Feature isn't available
}
Per saperne di più, consulta Verifica la disponibilità delle funzionalità.

Ad esempio:

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

// Phone
 val PHONE_DEVICE = Device(
    manufacturer = "Google",
    model = "Pixel 8",
    type = Device.TYPE_PHONE
)

// Ring
 val RING_DEVICE = Device(
    manufacturer = "Oura",
    model = "Ring Gen3",
    type = Device.TYPE_RING
)

// Scale
 val SCALE_DEVICE = Device(
    manufacturer = "Withings",
    model = "Body Comp",
    type = Device.TYPE_SCALE
)

Snippet aggiornati

Le guide di Health Connect sono state aggiornate ovunque siano necessari nuovi snippet per rispettare i nuovi requisiti dei metadati. Per alcuni esempi, consulta la pagina Scrivere dati.

Nuovi metodi per i metadati

Non è più possibile creare direttamente un'istanza dei metadati, quindi utilizza uno dei metodi factory per ottenere una nuova istanza dei metadati. I metodi factory verificano che le informazioni sul dispositivo siano fornite quando è stato utilizzato un dispositivo o un sensore per registrare i dati. Per i dati inseriti manualmente, fornire le informazioni sul dispositivo rimane facoltativo. Ogni funzione ha tre varianti di firma:

  • 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

Per saperne di più, consulta il progetto Android Open Source.

Testare i dati

Utilizza la libreria di test e MetadataTestHelper per simulare i valori dei metadati previsti:

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

In questo modo viene simulato il comportamento dell'implementazione di Health Connect, che compila automaticamente questi valori durante l'inserimento dei record.

Per la libreria di test, devi aggiungere questa dipendenza dell'SDK Health Connect al file build.gradle a livello di modulo:

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

Eseguire l'upgrade della libreria

I passaggi principali da eseguire sono:

  1. Esegui l'upgrade della libreria alla versione 1.1.0-alpha12.

  2. Quando crei la libreria, verranno generati errori di compilazione quando sono necessari nuovi metadati. Per risolvere questi errori e completare la migrazione, verifica di aver apportato le seguenti modifiche:

    • È obbligatorio specificare un metodo di registrazione quando crei un Record. A questo scopo, utilizza uno dei metodi factory forniti in Metadata, ad esempio Metadata.manualEntry() o Metadata.activelyRecorded(device = Device(...)).
    • Per i dati registrati da un dispositivo, è obbligatorio specificare un tipo di dispositivo, ad esempio Device.TYPE_WATCH o Device.TYPE_PHONE.
  3. Se la tua app scrive tipi di dispositivi estesi, inseriscili dietro FEATURE_EXTENTED_DEVICE_TYPES per evitare TYPE_UNKNOWN imprevisti sui dispositivi in cui la funzionalità non è disponibile.