Bu kılavuz, Health Connect 1.1.0-beta02 veya sonraki sürümlerle uyumludur.
Health Connect'teki Tıbbi Kayıtlar'ı kullanarak tıbbi verileri okumak için aşağıdaki adımları uygulayın:
- Özelliklerin kullanılabilirlik durumunu kontrol edin.
- Okuma izni isteyin.
MedicalResourcekayıtları veyaMedicalDataSourceayrıntıları gibi verileri okuma
Özelliğin kullanılabilirliği
Kullanıcının cihazının Health Connect'te Tıbbi Kayıtlar'ı destekleyip desteklemediğini belirlemek için istemcideFEATURE_PERSONAL_HEALTH_RECORD özelliğinin kullanılabilirliğini kontrol edin:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Gerekli izinler
Tıbbi verilerin okunması aşağıdaki izinle korunur:
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
Bu izinleri Google Play Console'da uygulamanız için ve uygulamanızın manifest dosyasında beyan edin:
<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>
Cihazlarınızda ve uygulamalarınızda kullanmayı planladığınız tüm uygun izinleri beyan etmek sizin sorumluluğunuzdadır. Ayrıca, her iznin kullanılmadan önce kullanıcı tarafından verildiğini de kontrol etmeniz gerekir.
Kullanıcıdan izin isteme
Uygulamanız, istemci örneği oluşturduktan sonra kullanıcıdan izin istemelidir. Kullanıcıların diledikleri zaman izin vermelerine veya izinleri reddetmelerine olanak tanınmalıdır.
Bunun için gerekli veri türlerine yönelik bir izin grubu oluşturun. Öncelikle, kümedeki izinlerin Android manifest dosyanızda beyan edildiğinden emin olun.
// 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
)
Uygulamanızın gerekli izinlere sahip olup olmadığını görmek için getGrantedPermissions yöntemini kullanın. Yoksa bu izinleri istemek için createRequestPermissionResultContract seçeneğini kullanın. Health Connect izinleri ekranı açılır.
// 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)
}
}
Kullanıcılar izinleri istedikleri zaman verebilir veya iptal edebilir. Bu nedenle, uygulamanızın izinleri kullanmadan önce her seferinde kontrol etmesi ve iznin kaybedildiği senaryoları ele alması gerekir.
Tıbbi kaynaklar
Kullanıcı için Health Connect'e yazılan tüm tıbbi kaynakları (MedicalResource) okuyabilirsiniz. Diğer uygulamalar tarafından eklenen kaynaklar da buna dahildir.
MedicalResource kayıtlarını alma
medicalResourceType değerini belirterek bir GET isteğini filtreleyin. Sayfalandırılmış istekleri kullandığınızdan emin olun ve sıklık sınırlamasına dikkat edin.
// 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)
Kimliğe göre MedicalResource kayıtlarını alma
Kimlik kullanarak da MedicalResource alabilirsiniz:
// 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
)
}
)
Veri Kaynakları
Diğer uygulamalar tarafından eklenenler de dahil olmak üzere kullanıcı için Health Connect'e yazılan tüm veri kaynaklarını (MedicalDataSource) okuyabilirsiniz.
MedicalDataSource, tıbbi kayıtların kaynağını (ör. hastane veya klinik) temsil eder. Bu sayede, belirli tıbbi kayıtların nereden geldiğini belirleyebilirsiniz. Bu, verileri filtrelemek veya kullanıcıya kaynak bilgilerini göstermek için kullanışlıdır.
Paket adına göre MedicalDataSource kaydı alma
Paket adına (uygulama) göre istekte bulunmak için GetMedicalDataSourcesRequest kullanın:
// 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))
)
Kimliğe göre MedicalDataSource kaydı alma
Biliyorsanız id ile de talep edebilirsiniz:
// Retrieve all `MedicalDataSource` with `id` matching any of the given ids
val medicalDataSources: List<MedicalDataSource> =
healthConnectClient.getMedicalDataSources(listOf(medicalDataSource.id, anotherId))