במדריך הזה מוסבר איך מתחילים להשתמש ב-Health Connect באפליקציה.
שלב 1: הכנת אפליקציית Health Connect
אפליקציית Health Connect אחראית לטיפול בכל הבקשות שהאפליקציה שולחת דרך Health Connect SDK. הבקשות האלה כוללות אחסון נתונים וניהול הגישה לקריאה ולכתיבה שלהם.
הגישה ל-Health Connect תלויה בגרסה של Android שמותקנת בטלפון. בקטעים הבאים מוסבר איך לטפל בכמה גרסאות עדכניות של Android.
Android 14
החל מגרסה Android 14 (רמת API 34), Health Connect הוא חלק מ-Android Framework. הגרסה הזו של Health Connect היא מודול של מסגרת. כך לא תצטרכו ל��צע הגדרות.
Android מגרסה 13 ומטה
ב-Android 13 (רמת API 33) ובגרסאות קודמות, Health Connect לא נכלל ב-Android Framework. לאחר מכן, צריך להתקין את אפליקציית Health Connect מחנות Google Play.
אם שילבתם את האפליקציה שלכם עם Health Connect ב-Android מגרסה 13 ומטה, ואתם רוצים לבצע את ההעברה ל-Android 14, תוכלו לעיין במאמר העברה מ-Android 13 ל-14.
פותחים את אפליקציית Health Connect.
אפליקציית Health Connect לא מופיעה יותר במסך הבית כברירת מחדל. כדי לפתוח את Health Connect, עוברים אל הגדרות > אפליקציות > Health Connect או מוסיפים את Health Connect לתפריט הגדרות מהירות.
בנוסף, כדי שהנתונים הרפואיים ששמורים ב-Health Connect יהיו מוגנים מפני גורמים זדוניים בזמן שהמכשיר נעול, ב-Health Connect נדרש מהמשתמש להפעיל נעילת מסך באמצעות קוד אימות, קו ביטול נעילה או סיסמה. כדי להגדיר נעילת מסך, עוברים אל הגדרות > אבטחה > נעילת מסך.
שלב 2: מוסיפים את Health Connect SDK לאפליקציה
ה-SDK של Health Connect אחראי לשימוש ב-Health Connect API כדי לשלוח בקשות לביצוע פעולות במאגר הנתונים באפליקציית Health Connect.
מוסיפים את התלות ב-Health Connect SDK בקובץ build.gradle
ברמת המודול:
dependencies {
...
implementation "androidx.health.connect:connect-client:1.1.0-alph10"
...
}
כדי לבדוק מהי הגרסה האחרונה, אפשר לעיין בגרסאות של Health Connect.
שלב 3: מגדירים את האפליקציה
בקטעים הבאים מוסבר איך להגדיר את האפליקציה כך שתשתלב עם Health Connect.
הצהרה על הרשאות
הגישה לנתוני הבריאות והכושר היא רגישת. ב-Health Connect מופעלת שכבת אבטחה לפעולות קריאה וכתיבה, כדי לשמור על אמון המשתמשים.
באפליקציה, מגדירים את הרשאות הקריאה והכתיבה בקובץ AndroidManifest.xml
על סמך סוגי הנתונים הנדרשים, שצריכים להתאים לאלה שהצהרתם ��ל גישה אליהם ב-Play Console.
ב-Health Connect נעשה שימוש בפורמט הסטנדרטי של הצהרת הרשאות ב-Android.
מקצים הרשאות באמצעות התגים <uses-permission>
. צריך להטמיע אותם בתוך תגי <manifest>
.
<manifest>
<uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
<uses-permission android:name="android.permission.health.WRITE_HEART_RATE"/>
<uses-permission android:name="android.permission.health.READ_STEPS"/>
<uses-permission android:name="android.permission.health.WRITE_STEPS"/>
<application>
...
</application>
</manifest>
רשימה מלאה של ההרשאות וסוגי הנתונים התואמים להם מפורטת במאמר רשימת סוגי הנתונים.
הצגת תיבת הדו-שיח של מדיניות הפרטיות של האפליקציה
ב-Android manifest צריכה להיות פעילות שמציגה את מדיניות הפרטיות של האפליקציה. זוהי הסיבה לצורך של האפליקציה בהרשאות המבוקשות, והיא מתארת את האופן שבו נעשה שימוש בנתוני המשתמשים ואיך הם מטופלים.
מגדירים את הפעילות הזו כדי לטפל בכוונה ACTION_SHOW_PERMISSIONS_RATIONALE
, שנשלחת לאפליקציה כשהמשתמש לוחץ על הקישור למדיניות הפרטיות במסך ההרשאות של Health Connect.
...
<application>
...
<!-- For supported versions through Android 13, create an activity to show the rationale
of Health Connect permissions once users click the privacy policy link. -->
<activity
android:name=".PermissionsRationaleActivity"
android:exported="true">
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>
</activity>
<!-- For versions starting Android 14, create an activity alias to show the rationale
of Health Connect permissions once users click the privacy policy link. -->
<activity-alias
android:name="ViewPermissionUsageActivity"
android:exported="true"
android:targetActivity=".PermissionsRationaleActivity"
android:permission="android.permission.START_VIEW_PERMISSION_USAGE">
<intent-filter>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
<category android:name="android.intent.category.HEALTH_PERMISSIONS" />
</intent-filter>
</activity-alias>
...
</application>
...
אחזור לקוח של Health Connect
HealthConnectClient
היא נקודת כניסה ל-Health Connect API.
הוא מאפשר לאפליקציה להשתמש במאגר הנתונים באפליקציית Health Connect. הוא מנהל באופן אוטומטי את החיבור לשכבת האחסון הבסיסית ומטפל בכל ה-IPC וסריאליזציה של בקשות יוצאות ותשובות נכנסות.
כדי לקבל מופע לקוח, קודם צריך להצהיר על שם החבילה של Health Connect במניפסט של Android.
<application> ... </application>
...
<!-- Check if Health Connect is installed -->
<queries>
<package android:name="com.google.android.apps.healthdata" />
</queries>
לאחר מכן, בדף 'פעילות', בודקים אם Health Connect מותקנת באמצעות getSdkStatus
. אם כן, צריך לקבל מכונה של HealthConnectClient
.
val availabilityStatus = HealthConnectClient.getSdkStatus(context, providerPackageName)
if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE) {
return // early return as there is no viable integration
}
if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED) {
// Optionally redirect to package installer to find a provider, for example:
val uriString = "market://details?id=$providerPackageName&url=healthconnect%3A%2F%2Fonboarding"
context.startActivity(
Intent(Intent.ACTION_VIEW).apply {
setPackage("com.android.vending")
data = Uri.parse(uriString)
putExtra("overlay", true)
putExtra("callerId", context.packageName)
}
)
return
}
val healthConnectClient = HealthConnectClient.getOrCreate(context)
// Issue operations with healthConnectClient
שלב 4: מבקשים הרשאות מהמשתמש
אחרי שיוצרים מכונה של לקוח, האפליקציה צריכה לבקש הרשאות מהמשתמש. המשתמשים צריכים להיות מורשים להעניק או לדחות הרשאות בכל שלב.
כדי לעשות זאת, יוצרים קבוצת הרשאות לסוגים הנדרשים של נתונים. חשוב לוודא שההרשאות בקבוצה הוצהרו קודם במניפסט של Android.
// Create a set of permissions for required data types
val PERMISSIONS =
setOf(
HealthPermission.getReadPermission(HeartRateRecord::class),
HealthPermission.getWritePermission(HeartRateRecord::class),
HealthPermission.getReadPermission(StepsRecord::class),
HealthPermission.getWritePermission(StepsRecord::class)
)
אפשר להשתמש ב-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)
}
}
אל תניחו שההרשאות קבועות, כי המשתמשים יכולים להעניק או לבטל אותן בכל שלב. האפליקציה צריכה לבדוק מדי פעם אם ההרשאות ניתנו, ולטפל בתרחישים שבהם ההרשאה נשללת.
שלב 5: ביצוע פעולות
עכשיו, אחרי שהכול מוגדר, אפשר לבצע פעולות קריאה וכתיבה באפליקציה.
כתיבת נתונים
מגדירים את המבנה של הנתונים ברשומה. כדאי לעיין ברשימת סוגי הנתונים שזמינים ב-Health Connect.
val stepsRecord = StepsRecord(
count = 120,
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET,
)
לאחר מכן כותבים את הרשומה באמצעות insertRecords
.
suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
try {
val stepsRecord = StepsRecord(
count = 120,
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET,
)
healthConnectClient.insertRecords(listOf(stepsRecord))
} catch (e: Exception) {
// Run error handling here
}
}
קריאת נתונים
אפשר לקרוא את הנתונים בנפרד באמצעות readRecords
.
suspend fun readStepsByTimeRange(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response =
healthConnectClient.readRecords(
ReadRecordsRequest(
StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
for (stepRecord in response.records) {
// Process each step record
}
} catch (e: Exception) {
// Run error handling here.
}
}
אפשר גם לקרוא את הנתונים באופן מצטבר באמצעות aggregate
.
suspend fun aggregateSteps(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response = healthConnectClient.aggregate(
AggregateRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
// The result may be null if no data is available in the time range
val stepCount = response[StepsRecord.COUNT_TOTAL]
} catch (e: Exception) {
// Run error handling here
}
}
סרטוני הדרכה
כדאי לצפות בסרטונים הבאים, שבהם מוסבר בהרחבה על התכונות של Health Connect, וגם בהנחיות לשיטות מומלצות לשילוב חלק:
משאבים
כדאי לעיין במקורות המידע הבאים שיעזרו לכם בפיתוח בשלב מאוחר יותר.
- Health Connect SDK (זמין ב-Jetpack): כדי להשתמש ב-Health Connect API, צריך לכלול את ה-SDK הזה באפליקציה.
- מידע על API: כדאי לעיין במידע על Jetpack לגבי Health Connect API.
- הצהרה על שימוש בסוגי נתונים: ב-Play Console, מצהירים על גישה לסוגי הנתונים של Health Connect שה��פליקציה קוראת מהם וכותבת אליהם.
- קוד לדוגמה ו-codelab אופציונליים ב-GitHub: כדי להתחיל, אפשר לעיין במאגר של הקוד לדוגמה ב-GitHub ובתרגיל codelab.
השלבים הבאים
במאמר תהליכי עבודה נפוצים מוסבר איך לבצע פעולות ב-Health Connect, כמו: