Доступность функций
Чтобы определить, поддерживает ли устройство пользователя планы тренировок в 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.WRITE_MEDICAL_DATA
-
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 Console для вашего приложения, а также в манифесте вашего приложения:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
<uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES" />
...
</application>
Вы несете ответственность за объявление всех соответствующих разрешений, которые вы собираетесь использовать на своих устройствах и приложениях. Перед использованием вам также следует убедиться, что каждое разрешение было предоставлено пользователем.
Пример использования
В этом разделе представлены примеры кода основных операций для предстоящего выпуска Jetpack SDK с поддержкой PHR, которые могут быть изменены.
Создайте запись MedicalDataSource.
// Create a `MedicalDataSource`
// Note that `displayName` must be unique across `MedicalDataSource`s
// Each `MedicalDataSource` is assigned an `id` by the system on creation
val medicalDataSource: MedicalDataSource =
healthConnectClient.createMedicalDataSource(
CreateMedicalDataSourceRequest(
fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
displayName = "Test Data Source",
fhirVersion = FhirVersion(4, 0, 1)
)
)
Удаление записи MedicalDataSource
Предыдущий пример возвращает id
системы при создании. Чтобы удалить, укажите тот же id
:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
Получить запись 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))
Вставка или обновление записей MedicalResource
Используйте UpsertMedicalResourceRequest
для вставки новых или обновления существующих записей MedicalResource
для MedicalDataSource
:
// Insert `MedicalResource`s into the `MedicalDataSource`
val medicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
medicationJsonToInsert // a valid FHIR json string
)
)
)
// Update `MedicalResource`s in the `MedicalDataSource`
val updatedMedicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
// a valid FHIR json string
// if this resource has the same type and ID as in `medicationJsonToInsert`,
// this `upsertMedicalResources()` call will update the previously inserted
// `MedicalResource`
updatedMedicationJsonToInsert
)
)
)
Получить записи MedicalResource
Отфильтруйте запрос на получение, указав 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.
// 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)
Получить записи MedicalResource по идентификатору
// 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
)
}
)
Удаление записи MedicalResource по идентификатору
Записи MedicalResource
могут быть удалены по идентификатору:
// Delete `MedicalResource`s matching the specified `dataSourceId`, `type` and `fhirResourceId`
healthConnectClient.deleteMedicalResources(
medicalResources.map { medicalResource: MedicalResource ->
MedicalResourceId(
dataSourceId = medicalDataSource.id,
fhirResourceType = medicalResource.id.fhirResourceType,
fhirResourceId = medicalResource.id.fhirResourceId
)
}
)
Или их можно удалить с помощью medicalResourceType
:
// Delete all `MedicalResource`s that are in any pair of provided `dataSourceIds` and
// `medicalResourceTypes`
healthConnectClient.deleteMedicalResources(
DeleteMedicalResourcesRequest(
dataSourceIds = setOf(medicalDataSource.id),
medicalResourceTypes = setOf(MEDICAL_RESOURCE_TYPE_MEDICATIONS)
)
)
Доступность функций
Чтобы определить, поддерживает ли устройство пользователя планы тренировок в 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.WRITE_MEDICAL_DATA
-
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 Console для вашего приложения, а также в манифесте вашего приложения:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
<uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES" />
...
</application>
Вы несете ответственность за объявление всех соответствующих разрешений, которые вы собираетесь использовать на своих устройствах и приложениях. Перед использованием вам также следует убедиться, что каждое разрешение было предоставлено пользователем.
Пример использования
В этом разделе представлены примеры кода основных операций для предстоящего выпуска Jetpack SDK с поддержкой PHR, которые могут быть изменены.
Создайте запись MedicalDataSource.
// Create a `MedicalDataSource`
// Note that `displayName` must be unique across `MedicalDataSource`s
// Each `MedicalDataSource` is assigned an `id` by the system on creation
val medicalDataSource: MedicalDataSource =
healthConnectClient.createMedicalDataSource(
CreateMedicalDataSourceRequest(
fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
displayName = "Test Data Source",
fhirVersion = FhirVersion(4, 0, 1)
)
)
Удаление записи MedicalDataSource
Предыдущий пример возвращает id
системы при создании. Чтобы удалить, укажите тот же id
:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
Получить запись 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))
Вставка или обновление записей MedicalResource
Используйте UpsertMedicalResourceRequest
для вставки новых или обновления существующих записей MedicalResource
для MedicalDataSource
:
// Insert `MedicalResource`s into the `MedicalDataSource`
val medicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
medicationJsonToInsert // a valid FHIR json string
)
)
)
// Update `MedicalResource`s in the `MedicalDataSource`
val updatedMedicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
// a valid FHIR json string
// if this resource has the same type and ID as in `medicationJsonToInsert`,
// this `upsertMedicalResources()` call will update the previously inserted
// `MedicalResource`
updatedMedicationJsonToInsert
)
)
)
Получить записи MedicalResource
Отфильтруйте запрос на получение, указав 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.
// 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)
Получить записи MedicalResource по идентификатору
// 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
)
}
)
Удаление записи MedicalResource по идентификатору
Записи MedicalResource
могут быть удалены по идентификатору:
// Delete `MedicalResource`s matching the specified `dataSourceId`, `type` and `fhirResourceId`
healthConnectClient.deleteMedicalResources(
medicalResources.map { medicalResource: MedicalResource ->
MedicalResourceId(
dataSourceId = medicalDataSource.id,
fhirResourceType = medicalResource.id.fhirResourceType,
fhirResourceId = medicalResource.id.fhirResourceId
)
}
)
Или их можно удалить с помощью medicalResourceType
:
// Delete all `MedicalResource`s that are in any pair of provided `dataSourceIds` and
// `medicalResourceTypes`
healthConnectClient.deleteMedicalResources(
DeleteMedicalResourcesRequest(
dataSourceIds = setOf(medicalDataSource.id),
medicalResourceTypes = setOf(MEDICAL_RESOURCE_TYPE_MEDICATIONS)
)
)
Доступность функций
Чтобы определить, поддерживает ли устройство пользователя планы тренировок в 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.WRITE_MEDICAL_DATA
-
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 Console для вашего приложения, а также в манифесте вашего приложения:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
<uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES" />
...
</application>
Вы несете ответственность за объявление всех соответствующих разрешений, которые вы собираетесь использовать на своих устройствах и приложениях. Перед использованием вам также следует убедиться, что каждое разрешение было предоставлено пользователем.
Пример использования
В этом разделе представлены примеры кода основных операций для предстоящего выпуска Jetpack SDK с поддержкой PHR, которые могут быть изменены.
Создайте запись MedicalDataSource.
// Create a `MedicalDataSource`
// Note that `displayName` must be unique across `MedicalDataSource`s
// Each `MedicalDataSource` is assigned an `id` by the system on creation
val medicalDataSource: MedicalDataSource =
healthConnectClient.createMedicalDataSource(
CreateMedicalDataSourceRequest(
fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
displayName = "Test Data Source",
fhirVersion = FhirVersion(4, 0, 1)
)
)
Удаление записи MedicalDataSource
Предыдущий пример возвращает id
системы при создании. Чтобы удалить, укажите тот же id
:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
Получить запись 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))
Вставка или обновление записей MedicalResource
Используйте UpsertMedicalResourceRequest
для вставки новых или обновления существующих записей MedicalResource
для MedicalDataSource
:
// Insert `MedicalResource`s into the `MedicalDataSource`
val medicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
medicationJsonToInsert // a valid FHIR json string
)
)
)
// Update `MedicalResource`s in the `MedicalDataSource`
val updatedMedicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
// a valid FHIR json string
// if this resource has the same type and ID as in `medicationJsonToInsert`,
// this `upsertMedicalResources()` call will update the previously inserted
// `MedicalResource`
updatedMedicationJsonToInsert
)
)
)
Получить записи MedicalResource
Отфильтруйте запрос на получение, указав 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.
// 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)
Получить записи MedicalResource по идентификатору
// 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
)
}
)
Удаление записи MedicalResource по идентификатору
Записи MedicalResource
могут быть удалены по идентификатору:
// Delete `MedicalResource`s matching the specified `dataSourceId`, `type` and `fhirResourceId`
healthConnectClient.deleteMedicalResources(
medicalResources.map { medicalResource: MedicalResource ->
MedicalResourceId(
dataSourceId = medicalDataSource.id,
fhirResourceType = medicalResource.id.fhirResourceType,
fhirResourceId = medicalResource.id.fhirResourceId
)
}
)
Или их можно удалить с помощью medicalResourceType
:
// Delete all `MedicalResource`s that are in any pair of provided `dataSourceIds` and
// `medicalResourceTypes`
healthConnectClient.deleteMedicalResources(
DeleteMedicalResourcesRequest(
dataSourceIds = setOf(medicalDataSource.id),
medicalResourceTypes = setOf(MEDICAL_RESOURCE_TYPE_MEDICATIONS)
)
)
Доступность функций
Чтобы определить, поддерживает ли устройство пользователя планы тренировок в 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.WRITE_MEDICAL_DATA
-
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 Console для вашего приложения, а также в манифесте вашего приложения:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
<uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES" />
...
</application>
Вы несете ответственность за объявление всех соответствующих разрешений, которые вы собираетесь использовать на своих устройствах и приложениях. Перед использованием вам также следует убедиться, что каждое разрешение было предоставлено пользователем.
Пример использования
В этом разделе представлены примеры кода основных операций для предстоящего выпуска Jetpack SDK с поддержкой PHR, которые могут быть изменены.
Создайте запись MedicalDataSource.
// Create a `MedicalDataSource`
// Note that `displayName` must be unique across `MedicalDataSource`s
// Each `MedicalDataSource` is assigned an `id` by the system on creation
val medicalDataSource: MedicalDataSource =
healthConnectClient.createMedicalDataSource(
CreateMedicalDataSourceRequest(
fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
displayName = "Test Data Source",
fhirVersion = FhirVersion(4, 0, 1)
)
)
Удаление записи MedicalDataSource
Предыдущий пример возвращает id
системы при создании. Чтобы удалить, укажите тот же id
:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
Получить запись 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))
Вставка или обновление записей MedicalResource
Используйте UpsertMedicalResourceRequest
, чтобы вставить новые или обновить существующие записи MedicalResource
для MedicalDataSource
:
// Insert `MedicalResource`s into the `MedicalDataSource`
val medicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
medicationJsonToInsert // a valid FHIR json string
)
)
)
// Update `MedicalResource`s in the `MedicalDataSource`
val updatedMedicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
// a valid FHIR json string
// if this resource has the same type and ID as in `medicationJsonToInsert`,
// this `upsertMedicalResources()` call will update the previously inserted
// `MedicalResource`
updatedMedicationJsonToInsert
)
)
)
Получить записи MedicalResource
Отфильтруйте запрос на получение, указав 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.
// 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)
Получить записи MedicalResource по идентификатору
// 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
)
}
)
Удаление записи MedicalResource по идентификатору
Записи MedicalResource
могут быть удалены по идентификатору:
// Delete `MedicalResource`s matching the specified `dataSourceId`, `type` and `fhirResourceId`
healthConnectClient.deleteMedicalResources(
medicalResources.map { medicalResource: MedicalResource ->
MedicalResourceId(
dataSourceId = medicalDataSource.id,
fhirResourceType = medicalResource.id.fhirResourceType,
fhirResourceId = medicalResource.id.fhirResourceId
)
}
)
Или их можно удалить с помощью medicalResourceType
:
// Delete all `MedicalResource`s that are in any pair of provided `dataSourceIds` and
// `medicalResourceTypes`
healthConnectClient.deleteMedicalResources(
DeleteMedicalResourcesRequest(
dataSourceIds = setOf(medicalDataSource.id),
medicalResourceTypes = setOf(MEDICAL_RESOURCE_TYPE_MEDICATIONS)
)
)