המדריך הזה תואם לגרסה 1.1.0-beta02 של Health Connect.
כדי לקרוא נתונים רפואיים באמצעות תיעוד רפואי אישי (PHR) ב-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 Console, וגם במניפסט של האפליקציה:
<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.
// 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 לפי מזהה
אפשר גם לאחזר 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
)
}
)
מקורות נתונים
אתם יכולים לקרוא כל מקור נתונים (MedicalDataSource
) שנכתב ב-Health Connect עבור המשתמש, כולל נתונים שנוספו על ידי אפליקציות אחרות.
אחזור רשומה של 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))