Este guia é compatível com a versão 1.1.0-beta02 do Conexão Saúde.
Para ler dados médicos usando os registros de saúde pessoais (PHRs) na Conexão Saúde, siga estas etapas:
- Confira a disponibilidade do recurso.
- Solicite permissões de leitura.
- Ler registros médicos (
MedicalResource
). - Ler fontes de dados (
MedicalDataSource
).
Disponibilidade do recurso
Para determinar se o dispositivo de um usuário oferece suporte à PHR na Conexão Saúde,
verifique a disponibilidade de FEATURE_PERSONAL_HEALTH_RECORD
no cliente:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Consulte Verificar a disponibilidade de recursos para saber mais.
Permissões necessárias
A leitura de dados médicos é protegida pela seguinte permissão:
android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES
android.permission.health.READ_MEDICAL_DATA_CONDITIONS
android.permission.health.READ_MEDICAL_DATA_LABORATORY_RESULTS
android.permission.health.READ_MEDICAL_DATA_MEDICATIONS
android.permission.health.READ_MEDICAL_DATA_PERSONAL_DETAILS
android.permission.health.READ_MEDICAL_DATA_PRACTITIONER_DETAILS
android.permission.health.READ_MEDICAL_DATA_PREGNANCY
android.permission.health.READ_MEDICAL_DATA_PROCEDURES
android.permission.health.READ_MEDICAL_DATA_SOCIAL_HISTORY
android.permission.health.READ_MEDICAL_DATA_VACCINES
android.permission.health.READ_MEDICAL_DATA_VISITS
android.permission.health.READ_MEDICAL_DATA_VITAL_SIGNS
Declare estas permissões no Play Console e no manifesto do app:
<application>
<uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES" />
<uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_CONDITIONS" />
...
</application>
Você é responsável por declarar todas as permissões adequadas que pretende usar nos seus dispositivos e apps. Verifique também se cada permissão foi concedida pelo usuário antes do uso.
Solicitar permissões do usuário
Depois de criar uma instância de cliente, seu app precisa solicitar permissões ao usuário. Os usuários precisam ter permissão para conceder ou negar permissões a qualquer momento.
Para fazer isso, crie um conjunto de permissões para os tipos de dados necessários. Verifique se as permissões no conjunto foram declaradas no manifesto do Android primeiro.
// Create a set of permissions for required data types
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_CONDITIONS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_MEDICATIONS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_PREGNANCY
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_PROCEDURES
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_VACCINES
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_VISITS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS
val PERMISSIONS =
setOf(
PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES
PERMISSION_READ_MEDICAL_DATA_CONDITIONS
PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS
PERMISSION_READ_MEDICAL_DATA_MEDICATIONS
PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS
PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS
PERMISSION_READ_MEDICAL_DATA_PREGNANCY
PERMISSION_READ_MEDICAL_DATA_PROCEDURES
PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY
PERMISSION_READ_MEDICAL_DATA_VACCINES
PERMISSION_READ_MEDICAL_DATA_VISITS
PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS
)
Use getGrantedPermissions
para conferir se o app já tem as
permissões necessárias. Caso contrário, use
createRequestPermissionResultContract
para solicitar
essas permissões. A tela de permissões da Conexão Saúde será exibida.
// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()
val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
if (granted.containsAll(PERMISSIONS)) {
// Permissions successfully granted
} else {
// Lack of required permissions
}
}
suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
val granted = healthConnectClient.permissionController.getGrantedPermissions()
if (granted.containsAll(PERMISSIONS)) {
// Permissions already granted; proceed with inserting or reading data
} else {
requestPermissions.launch(PERMISSIONS)
}
}
Como os usuários podem conceder ou revogar permissões a qualquer momento, seu app precisa verificar periodicamente as permissões concedidas e processar cenários em que a permissão é perdida.
Recursos médicos
É possível ler qualquer recurso médico (MedicalResource
)
gravado no Conexão Saúde para o usuário, incluindo aqueles adicionados por outros apps.
Acessar registros de MedicalResource
Filtre uma solicitação GET especificando o medicalResourceType
. Use
solicitações paginadas e observe o limite de taxa.
// Read `MedicalResource`s back from the `MedicalDataSource`
// Read 100 resources / page. See `pageSize` doc for defaults and limits.
val pageSize = 100
// Prepare the initial read request.
// All `MedicalResource`s in the given `MedicalDataSource`s and of given `medicalResourceType`
// will be retrieved.
val initialRequest: ReadMedicalResourcesRequest =
ReadMedicalResourcesInitialRequest(
MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS,
setOf(medicalDataSource.id),
pageSize = pageSize,
)
// Continue reading pages until all `MedicalResource`s are read
var pageToken: String? = null
do {
// Prepare paged request if needed
val request: ReadMedicalResourcesRequest =
if (pageToken == null) initialRequest
else ReadMedicalResourcesPageRequest(pageToken, pageSize = pageSize)
// Read `MedicalResource`s
val response: ReadMedicalResourcesResponse =
healthConnectClient.readMedicalResources(request)
// Process `MedicalResource`s
val resources: List<MedicalResource> = response.medicalResources
// Advance to next page
pageToken = response.nextPageToken
} while (pageToken != null)
Conferir registros de MedicalResource por ID
Também é possível recuperar um MedicalResource
usando um ID:
// Retrieve `fhirResourceType` type `MedicalResource`s with the specified `id`s from the
// provided `MedicalDataSource`
val retrievedMedicalResources: List<MedicalResource> =
healthConnectClient.readMedicalResources(
medicalResources.map { medicalResource: MedicalResource ->
MedicalResourceId(
dataSourceId = medicalDataSource.id,
fhirResourceType = medicalResource.id.fhirResourceType,
fhirResourceId = medicalResource.id.fhirResourceId
)
}
)
Fontes de dados
É possível ler qualquer fonte de dados (MedicalDataSource
)
gravada no Conexão Saúde para o usuário, incluindo as adicionadas por outros apps.
Receber um registro de MedicalDataSource pelo nome do pacote
Use GetMedicalDataSourcesRequest
para solicitar pelo nome do pacote (app):
// Retrieve all `MedicalDataSource`s created by any of the specified package names
// Package names may be found in other `MedicalDataSource`s or from arbitrary input
val medicalDataSources: List<MedicalDataSource> =
healthConnectClient.getMedicalDataSources(
GetMedicalDataSourcesRequest(listOf(medicalDataSource.packageName, anotherPackageName))
)
Conseguir um registro de MedicalDataSource por ID
Ou solicite por id
, se você souber:
// Retrieve all `MedicalDataSource` with `id` matching any of the given ids
val medicalDataSources: List<MedicalDataSource> =
healthConnectClient.getMedicalDataSources(listOf(medicalDataSource.id, anotherId))