איך מתחילים להשתמש ב-Health Connect

המדריך הזה תואם לגרסה 1.1.0‎-alpha12 של Health Connect ואילך.

במדריך הזה מוסבר איך להתחיל להשתמש ב-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 ל-Android 14.

פותחים את אפליקציית Health Connect

אפליקציית Health Connect לא מופיעה יותר במסך הבית כברירת מחדל. אפשר לפתוח את Health Connect דרך ההגדרות, אבל הנתיב משתנה בהתאם לגרסת Android:

  • ב-Android מגרסה 14 ואילך: עוברים אל הגדרות > אבטחה ופרטיות > אמצעי בקרה על פרטיות > Health Connect, או מחפשים את Health Connect בהגדרות.
  • ב-Android מגרסה 13 ומטה: עוברים אל הגדרות > אפליקציות > 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.2.0-alpha06"
  ...
}

כדי לראות את הגרסה העדכנית, אפשר לעיין בגרסאות של Health Connect.

גרסה 1.1.0 ואילך של connect-client דורשת את compileSdk = 36 ואת הפלאגין של Android Gradle ‏ (AGP) בגרסה 8.9.1 ואילך. מעדכנים את compileSdk בקובץ build.gradle ברמת המודול:

android {
  compileSdk = 36
}

שימוש בתכונות של ערוץ ההפצה Canary

כדי להשתמש בתכונות בערוץ ההפצה Canary, משנים את הגרסה של compileSdk בקובץ build.gradle ברמת המודול:

android {
  compileSdkPreview = "CANARY"
}

שלב 3: מגדירים את האפליקציה

בקטעים הבאים מוסבר איך להגדיר את האפליקציה לשילוב עם Health Connect.

בדיקת זמינות של תכונות

כשמוסיפים תכונות חדשות ל-Health Connect, המשתמשים לא תמיד מעדכנים את הגרסה של Health Connect. ‫Feature Availability API מאפשר לבדוק אם תכונה מסוימת ב-Health Connect זמינה במכשיר של המשתמש, ולקבוע איזו פעולה לבצע.

הפונקציה העיקרית לבדיקת הזמינות של תכונות היא getFeatureStatus(). הפונקציה מחזירה קבועים של מספרים שלמים, FEATURE_STATUS_AVAILABLE או FEATURE_STATUS_UNAVAILABLE:

fun enqueueBackgroundReadWorker(context: Context, healthConnectClient: HealthConnectClient) {
    if (healthConnectClient
            .features
            .getFeatureStatus(
                HealthConnectFeatures.FEATURE_READ_HEALTH_DATA_IN_BACKGROUND
            ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE
    ) {

        val periodicWorkRequest = PeriodicWorkRequestBuilder<ScheduleWorker>(1, TimeUnit.HOURS)
            .build()

        WorkManager.getInstance(context).enqueueUniquePeriodicWork(
            "read_health_connect",
            ExistingPeriodicWorkPolicy.KEEP,
            periodicWorkRequest
        )
    }
}

הצהרה על הרשאות

הגישה לנתונים של אימוני כושר ובריאות היא רגישה. ב-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 צריך לכלול Activity שמציגה את מדיניות הפרטיות של האפליקציה, שהיא ההסבר של האפליקציה להרשאות המבוקשות, ומתארת איך הנתונים של המשתמשים מטופלים ואיזה שימוש נעשה בהם.

צריך להצהיר על הפעילות הזו כדי לטפל ב-intent‏ 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>

לאחר מכן, בודקים ב-Activity אם אפליקציית Health Connect מותקנת באמצעות getSdkStatus. אם כן, מקבלים מופע של HealthConnectClient.

val availabilityStatus = HealthConnectClient.getSdkStatus(context)
if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE) {
    Box(modifier = modifier.padding(16.dp), contentAlignment = Alignment.Center) {
        Text(
            text = "Health Connect is not available on this device. Please ensure it is installed and updated.",
            style = MaterialTheme.typography.bodyLarge,
            textAlign = TextAlign.Center
        )
    }
    return
}

val healthConnectClient = remember {
    if (availabilityStatus == HealthConnectClient.SDK_AVAILABLE) {
        HealthConnectClient.getOrCreate(context)
    } else {
        null
    }
}

שלב 4: מבקשים הרשאות מהמשתמש

אחרי שיוצרים מופע של לקוח, האפליקציה צריכה לבקש הרשאות מהמשתמש. המשתמשים חייבים להיות מסוגלים להעניק או לדחות הרשאות בכל שלב. כדי לעשות זאת, יוצרים קבוצת הרשאות לסוגי הנתונים הנדרשים. קודם צריך לוודא שההרשאות בקבוצה מוצהרות במניפסט של Android.

val permissions =
    setOf(
        HealthPermission.getReadPermission(HeartRateRecord::class),
        HealthPermission.getWritePermission(HeartRateRecord::class),
        HealthPermission.getReadPermission(StepsRecord::class),
        HealthPermission.getWritePermission(StepsRecord::class)
    )
אפשר להשתמש ב-getGrantedPermissions כדי לבדוק אם האפליקציה כבר קיבלה את ההרשאות הנדרשות. אם לא, משתמשים ב-createRequestPermissionResultContract כדי לבקש את ההרשאות האלה. הפעולה הזו תציג את מסך ההרשאות של Health Connect.
val permissions = setOf(
        HealthPermission.getReadPermission(StepsRecord::class),
        HealthPermission.getWritePermission(StepsRecord::class),
        HealthPermission.getReadPermission(HeartRateRecord::class),
        HealthPermission.getWritePermission(HeartRateRecord::class)
    )

val requestPermissionsLauncher = rememberLauncherForActivityResult(
    contract = PermissionController.createRequestPermissionResultContract()
) { grantedPermissions ->
    if (grantedPermissions.containsAll(permissions)) {
        coroutineScope.launch { snackbarHostState.showSnackbar("Permissions granted!") }
    } else {
        coroutineScope.launch { snackbarHostState.showSnackbar("Permissions denied.") }
    }
}
המשתמשים יכולים לתת או לבטל הרשאות בכל שלב, ולכן האפליקציה צריכה לבדוק אם ההרשאות ניתנו בכל פעם לפני שהיא משתמשת בהן, ולטפל במקרים שבהם הרשאה כלשהי בוטלה.

הוספת משתמשים

באפליקציות רבות יש תהליך מותאם אישית להצטרפות, כמו הסבר על התכונות או בקשת הסכמה מהמשתמש. כדי לאפשר ל-Health Connect להפעיל את תהליך ההצטרפות, מוסיפים את הקוד הבא למניפסט:

<!-- Required to support pre-Android 14 devices with APK Health Connect -->
<activity
  android:name=".OnboardingActivity"
  android:exported="true"
  android:permission="com.google.android.apps.healthdata.permission.START_ONBOARDING">
  <intent-filter>
    <action android:name="androidx.health.ACTION_SHOW_ONBOARDING"/>
  </intent-filter>
</activity>
<!-- Required to support Android 14+ devices with platform Health Connect -->
<activity-alias
  android:name="UAndAboveOnboardingActivity"
  android:exported="true"
  android:targetActivity=".OnboardingActivity"
  android:permission="android.permission.health.START_ONBOARDING">
  <intent-filter>
    <action android:name="android.health.connect.action.SHOW_ONBOARDING" />
  </intent-filter>
</activity-alias>

המשתמשים יכולים להתחיל את החיבור לאפליקציה ישירות מאפליקציית Health Connect, ולא מתוך האפליקציה שלכם. אם האפליקציה שלכם דורשת אינטראקציה נוספת מעבר לקבלת הרשאה לקרוא או לכתוב נתונים, צריך לספק פעילות של הגדרת האפליקציה.

חשוב לזכור שפעילות ההגדרה יכולה להתחיל יותר מפעם אחת. לדוגמה, אם המשתמש מבטל את ההרשאות לאפליקציה ואז מחבר אותה מחדש.

שלב 5: ביצוע פעולות

עכשיו, כשהכול מוכן, אתם יכולים לבצע פעולות קריאה וכתיבה באפליקציה.

יכול להיות שהמשתמשים שלכם משתמשים באפליקציות אחרות שמסנכרנות נתונים עם Health Connect, כדי שהאפליקציה שלכם תוכל לגשת אליהם. אם המשתמש עדיין לא הגדיר את האפליקציות האלה לכתיבה ב-Health Connect, אתם יכולים להשתמש ב-Matchmaking API כדי לקשר את האפליקציות האלה בצורה חלקה בשביל המשתמשים.

כתיבת נתונים

מארגנים את הנתונים ברשומה. רשימת סוגי הנתונים שזמינים ב-Health Connect

val zoneOffset = ZoneOffset.systemDefault().rules.getOffset(startTime)
val stepsRecord = StepsRecord(
    count = 120,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = zoneOffset,
    endZoneOffset = zoneOffset,
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    )
)
healthConnectClient.insertRecords(listOf(stepsRecord))

לאחר מכן, כותבים את הרשומה באמצעות insertRecords.

val zoneOffset = ZoneOffset.systemDefault().rules.getOffset(startTime)
val stepsRecord = StepsRecord(
    count = 120,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = zoneOffset,
    endZoneOffset = zoneOffset,
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    )
)
healthConnectClient.insertRecords(listOf(stepsRecord))

קריאת נתונים

אתם יכולים לקרוא את הנתונים בנפרד באמצעות readRecords.

val response = healthConnectClient.readRecords(
    ReadRecordsRequest(
        HeartRateRecord::class,
        timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
    )
)
response.records.forEach { record ->
    /* Process records */
}

אפשר גם לקרוא את הנתונים בצורה נצברת באמצעות aggregate.

suspend fun readStepsAggregate(startTime: Instant, endTime: Instant): Long {
    val response = healthConnectClient.aggregate(
        AggregateRequest(
            metrics = setOf(StepsRecord.COUNT_TOTAL),
            timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
        )
    )
    return response[StepsRecord.COUNT_TOTAL] ?: 0L
}

סרטוני הדרכה

בסרטונים הבאים מוסבר על התכונות של Health Connect ועל השיטות המומלצות לשילוב חלק:

משאבים

כדאי לעיין במקורות המידע הבאים שיעזרו לכם בהמשך הפיתוח.

  • SDK של Health Connect (זמין ב-Jetpack):כלול את ה-SDK הזה ביישום שלך כדי להשתמש ב-API של Health Connect.
  • מאמרי העזרה של ה-API: עיינו במאמרי העזרה של Jetpack בנושא Health Connect API.
  • הצהרה על שימוש בסוגי נתונים: ב-Play Console, הצהירו על גישה לסוגי הנתונים של Health Connect שהאפליקציה שלכם קוראת מהם וכותבת אליהם.
  • דוגמת קוד אופציונלית ב-GitHub ו-Codelab: כדי להתחיל, אפשר לעיין במאגר של דוגמת הקוד ב-GitHub ובתרגיל Codelab.

השלבים הבאים

בקטע תהליכי עבודה נפוצים מוסבר איך לבצע פעולות ב-Health Connect, כמו: