Ten przewodnik jest zgodny z wersją Health Connect 1.1.0-beta02.
Aby odczytać dane medyczne za pomocą funkcji Dokumentacja medyczna w Health Connect, wykonaj te czynności:
- Sprawdź dostępność funkcji.
- Poproś o uprawnienia do odczytu.
- odczytywać dane, takie jak rekordy
MedicalResourcelub szczegółyMedicalDataSource;
Dostępność funkcji
Aby sprawdzić, czy urządzenie użytkownika obsługuje rekordy medyczne w Health Connect, sprawdź dostępnośćFEATURE_PERSONAL_HEALTH_RECORD w aplikacji:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Wymagane uprawnienia
Odczytywanie danych medycznych jest chronione tym uprawnieniem:
android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCESandroid.permission.health.READ_MEDICAL_DATA_CONDITIONSandroid.permission.health.READ_MEDICAL_DATA_LABORATORY_RESULTSandroid.permission.health.READ_MEDICAL_DATA_MEDICATIONSandroid.permission.health.READ_MEDICAL_DATA_PERSONAL_DETAILSandroid.permission.health.READ_MEDICAL_DATA_PRACTITIONER_DETAILSandroid.permission.health.READ_MEDICAL_DATA_PREGNANCYandroid.permission.health.READ_MEDICAL_DATA_PROCEDURESandroid.permission.health.READ_MEDICAL_DATA_SOCIAL_HISTORYandroid.permission.health.READ_MEDICAL_DATA_VACCINESandroid.permission.health.READ_MEDICAL_DATA_VISITSandroid.permission.health.READ_MEDICAL_DATA_VITAL_SIGNS
Zadeklaruj te uprawnienia w Konsoli Play w przypadku swojej aplikacji, a także w pliku manifestu aplikacji:
<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>
Odpowiadasz za zadeklarowanie wszystkich odpowiednich uprawnień, których zamierzasz używać na urządzeniach i w aplikacjach. Przed użyciem sprawdź też, czy użytkownik przyznał każde uprawnienie.
Prośba użytkownika o uprawnienia
Po utworzeniu instancji klienta aplikacja musi poprosić użytkownika o uprawnienia. Użytkownicy muszą mieć możliwość przyznania lub odmowy przyznania uprawnień w dowolnym momencie.
Aby to zrobić, utwórz zestaw uprawnień dla wymaganych typów danych. Sprawdź, czy uprawnienia w zestawie są najpierw zadeklarowane w pliku manifestu Androida.
// 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
)
Użyj getGrantedPermissions, aby sprawdzić, czy Twoja aplikacja ma już przyznane wymagane uprawnienia. Jeśli nie, użyj createRequestPermissionResultContract, aby poprosić o te uprawnienia. Wyświetli się ekran uprawnień Health Connect.
// 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)
}
}
Użytkownicy mogą w każdej chwili przyznać lub cofnąć uprawnienia, dlatego aplikacja musi sprawdzać uprawnienia za każdym razem przed ich użyciem i obsługiwać sytuacje, w których uprawnienia zostaną utracone.
Materiały medyczne
Możesz odczytywać wszystkie zasoby medyczne (MedicalResource) zapisane w Health Connect dla użytkownika, w tym te dodane przez inne aplikacje.
Pobieranie rekordów MedicalResource
Filtruj żądanie GET, podając medicalResourceType. Pamiętaj, aby używać żądań podzielonych na strony i ograniczania liczby żądań.
// 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.
// If `medicalDataSourceIds` is empty, all `MedicalResource`s of the given `medicalResourceType`
// across all `MedicalDataSource`s will be retrieved.
val initialRequest: ReadMedicalResourcesRequest =
ReadMedicalResourcesInitialRequest(
MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS,
medicalDataSourceIds = emptySet(),
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)
Pobieranie rekordów MedicalResource według identyfikatora
Możesz też pobrać MedicalResource za pomocą identyfikatora:
// 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
)
}
)
Źródła danych
Możesz odczytywać dowolne źródło danych (MedicalDataSource) zapisane w Health Connect dla użytkownika, w tym dane dodane przez inne aplikacje.
MedicalDataSource reprezentuje źródło dokumentacji medycznej, np. szpital lub przychodnię. Pomaga to określić, skąd pochodzą konkretne dokumenty medyczne, co jest przydatne do filtrowania danych lub wyświetlania użytkownikowi informacji o źródle.
Pobieranie rekordu MedicalDataSource według nazwy pakietu
Użyj znaku GetMedicalDataSourcesRequest, aby wysłać prośbę według nazwy pakietu (aplikacji):
// 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))
)
Pobieranie rekordu MedicalDataSource według identyfikatora
Lub poproś o id, jeśli znasz tę wartość:
// Retrieve all `MedicalDataSource` with `id` matching any of the given ids
val medicalDataSources: List<MedicalDataSource> =
healthConnectClient.getMedicalDataSources(listOf(medicalDataSource.id, anotherId))