Данное руководство совместимо с версией Health Connect 1.1.0-beta02 .
Чтобы прочитать медицинские данные с помощью раздела «Медицинские записи» в Health Connect, выполните следующие действия:
- Проверьте доступность функции.
- Запросить права на чтение.
- Просматривайте данные, такие как записи
MedicalResourceили подробные сведенияMedicalDataSource.
Доступность функций
Чтобы определить, поддерживает ли устройство пользователя функцию «Медицинские записи» в Health Connect, проверьте наличие параметраFEATURE_PERSONAL_HEALTH_RECORD на клиентском устройстве:if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Необходимые разрешения
Чтение медицинских данных защищено следующим разрешением:
-
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
Укажите эти разрешения в консоли Play для вашего приложения, а также в манифесте вашего приложения:
<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>
Вы несёте ответственность за предоставление всех необходимых разрешений, которые вы собираетесь использовать на своих устройствах и в приложениях. Также вам следует убедиться, что каждое разрешение было предоставлено пользователем до начала использования.
Запросить у пользователя разрешения
После создания экземпляра клиента ваше приложение должно запросить у пользователя разрешения. Пользователи должны иметь возможность предоставлять или отклонять разрешения в любое время.
Для этого создайте набор разрешений для необходимых типов данных. Убедитесь, что разрешения в этом наборе сначала объявлены в вашем Android-манифесте.
// 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
)
Используйте getGrantedPermissions , чтобы проверить, предоставлены ли вашему приложению уже необходимые разрешения. Если нет, используйте createRequestPermissionResultContract для запроса этих разрешений. После этого отобразится экран разрешений 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)
}
}
Поскольку пользователи могут предоставлять или отзывать разрешения в любое время, ваше приложение должно проверять наличие разрешений каждый раз перед их использованием и обрабатывать сценарии, в которых разрешение утрачивается.
Медицинские ресурсы
Вы можете читать любые медицинские ресурсы ( MedicalResource ), записанные в Health Connect для пользователя, включая те, которые добавлены другими приложениями.
Получить медицинские записи MedicalResource
Отфильтруйте GET-запрос, указав тип medicalResourceType . Обязательно используйте постраничные запросы и учитывайте ограничения по количеству запросов .
// 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)
Получить медицинские записи по идентификатору.
Также можно получить доступ к MedicalResource , используя 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
)
}
)
Источники данных
Вы можете считывать любые данные из источников ( MedicalDataSource ), записанные в Health Connect для пользователя, включая данные, добавленные другими приложениями.
Объект MedicalDataSource представляет собой источник медицинских записей, например, больницу или клинику. Это помогает определить, откуда поступили конкретные медицинские записи, что полезно для фильтрации данных или отображения информации об источнике пользователю.
Получить запись MedicalDataSource по имени пакета.
Используйте GetMedicalDataSourcesRequest для запроса по имени пакета (приложения):
// 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))
)
Получить запись MedicalDataSource по идентификатору.
Или же, если вы знаете свой id , отправьте запрос:
// Retrieve all `MedicalDataSource` with `id` matching any of the given ids
val medicalDataSources: List<MedicalDataSource> =
healthConnectClient.getMedicalDataSources(listOf(medicalDataSource.id, anotherId))