Requisitos de metadados

Este guia é compatível com a versão 1.1.0-alpha12 e mais recentes do app Conexão Saúde.

Há mudanças nos metadados do app Conexão Saúde para desenvolvedores que fizerem upgrade para a versão 1.1.0-alpha12 ou mais recentes.

Informações da biblioteca

O ID do artefato do plug-in do Android para Gradle do Google Maven identifica a biblioteca do app Conexão Saúde para a qual você precisará fazer upgrade. Adicione essa dependência do SDK do app Conexão Saúde ao arquivo build.gradle no nível do módulo:

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

Mudanças em metadados

Duas mudanças de metadados foram introduzidas no SDK do Jetpack do app Conexão Saúde a partir da versão 1.1.0-alpha12 para ajudar a verificar se há outros metadados úteis no ecossistema. Se metadata não estiver incluído no construtor Record, você poderá receber um erro de Construtor interno.

Especificar o método de gravação

É necessário especificar detalhes de metadados sempre que um objeto do tipo Record() for instanciado.

Ao gravar dados no app Conexão Saúde, é necessário especificar um dos quatro métodos de gravação usando um dos métodos de fábrica correspondentes para instanciar Metadata:

Método de gravação Descrição
RECORDING_METHOD_UNKNOWN Não é possível verificar o método de gravação.
RECORDING_METHOD_MANUAL_ENTRY O usuário inseriu os dados.
RECORDING_METHOD_AUTOMATICALLY_RECORDED Um dispositivo ou sensor gravou os dados.
RECORDING_METHOD_ACTIVELY_RECORDED O usuário iniciou o início ou o fim da sessão de gravação em um dispositivo.

Exemplo:

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

Tipo de dispositivo

É necessário especificar um tipo de dispositivo para todos os dados gravados automaticamente e ativamente. Para mais detalhes, consulte a Device classe na documentação do Jetpack. Os tipos de dispositivos atuais incluem:

Tipo de dispositivo Descrição
TYPE_UNKNOWN O tipo de dispositivo é desconhecido.
TYPE_WATCH O tipo de dispositivo é um relógio.
TYPE_PHONE O tipo de dispositivo é um smartphone.
TYPE_SCALE O tipo de dispositivo é uma balança.
TYPE_RING O tipo de dispositivo é um anel.
TYPE_HEAD_MOUNTED O tipo de dispositivo é um dispositivo montado na cabeça.
TYPE_FITNESS_BAND O tipo de dispositivo é uma pulseira fitness.
TYPE_CHEST_STRAP O tipo de dispositivo é uma cinta torácica.
TYPE_SMART_DISPLAY O tipo de dispositivo é um smart display.

Alguns valores Device.type só estão disponíveis em versões mais recentes do app Conexão Saúde. Quando o recurso de tipos de dispositivos estendidos não está disponível, esses tipos são tratados como Device.TYPE_UNKNOWN.

Tipos de dispositivos estendidos Descrição
TYPE_CONSUMER_MEDICAL_DEVICE O tipo de dispositivo é um dispositivo médico.
TYPE_GLASSES O tipo de dispositivo é um par de óculos inteligentes ou óculos.
TYPE_HEARABLE O tipo de dispositivo é um dispositivo auditivo.
TYPE_FITNESS_MACHINE O tipo de dispositivo é uma máquina estacionária.
TYPE_FITNESS_EQUIPMENT O tipo de dispositivo é um equipamento de ginástica.
TYPE_PORTABLE_COMPUTER O tipo de dispositivo é um computador portátil.
TYPE_METER O tipo de dispositivo é um medidor de medição.
Para determinar se o dispositivo de um usuário oferece suporte a tipos de dispositivos estendidos no app Conexão Saúde, verifique a disponibilidade de FEATURE_EXTENDED_DEVICE_TYPES no cliente:

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

  // Feature is available
} else {
  // Feature isn't available
}
Consulte Verificar a disponibilidade de recursos para saber mais.

Exemplo:

 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
)

Snippets atualizados

Os guias do app Conexão Saúde foram atualizados sempre que novos snippets foram necessários para atender aos novos requisitos de metadados. Para alguns exemplos, consulte a página Gravar dados.

Novos métodos de metadados

Os metadados não podem mais ser instanciados diretamente. Use um dos métodos de fábrica para receber uma nova instância de metadados. Os métodos de fábrica verificam se as informações do dispositivo são fornecidas quando um dispositivo ou sensor foi usado para gravar os dados. Para dados inseridos manualmente, o fornecimento de informações do dispositivo continua sendo opcional. Cada função tem três variantes de assinatura:

  • 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

Para mais informações, consulte o Android Open Source Project.

Dados de teste

Use a biblioteca de testes e MetadataTestHelper para simular valores de metadados esperados:

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

Isso simula o comportamento da implementação do app Conexão Saúde, que preenche automaticamente esses valores durante a inserção de registros.

Para a biblioteca de testes, é necessário adicionar essa dependência do SDK do app Conexão Saúde ao arquivo build.gradle no nível do módulo:

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

Fazer upgrade da biblioteca

As principais etapas que você precisa realizar são:

  1. Faça upgrade da biblioteca para a versão 1.1.0-alpha12.

  2. Ao criar a biblioteca, erros de compilação serão gerados quando novos metadados forem necessários. Para resolver esses erros e concluir a migração, verifique se você fez as seguintes mudanças:

    • É obrigatório especificar um método de gravação ao construir um Record. Isso é feito usando um dos métodos de fábrica fornecidos em Metadata, como Metadata.manualEntry() ou Metadata.activelyRecorded(device = Device(...)).
    • Para dados gravados por um dispositivo, é obrigatório especificar um tipo de dispositivo, como Device.TYPE_WATCH ou Device.TYPE_PHONE.
  3. Se o app gravar tipos de dispositivos estendidos, coloque-os atrás de FEATURE_EXTENTED_DEVICE_TYPES para evitar TYPE_UNKNOWN inesperados em dispositivos em que o recurso não está disponível.