איך מתחילים להשתמש ב-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 ל-14.

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

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

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

שלב 2: מוסיפים את Health Connect SDK לאפליקציה

Health Connect SDK אחראית לשימוש ב-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 מופעלת שכבת אבטחה לפעולות קריאה וכתיבה, כדי לשמור על אמון המשתמשים.

ב-Play Console, מצהירים על גישה לסוגי הנתונים של 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): צריך לכלול את ה-SDK באפליקציה כדי להשתמש ב-Health Connect API.
  • מידע על API: כדאי לעיין במידע על Jetpack לגבי Health Connect API.
  • הצהרה על שימוש בסוגי נתונים: ב-Play Console, מצהירים על גישה לסוגי הנתונים של Health Connect שהאפליקציה קוראת מהם וכותבת אליהם.
  • קוד לדוגמה ו-codelab אופציונליים ב-GitHub: כדי להתחיל, אפשר לעיין במאגר של הקוד לדוגמה ב-GitHub ובתרגיל codelab.

השלבים הבאים

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