קריאת נתונים גולמיים

בדוגמה הבאה מוסבר איך לקרוא נתונים גולמיים כחלק מתהליך העבודה הנפוץ.

קריאת נתונים

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

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

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

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

כדי לקרוא רשומות, יוצרים ReadRecordsRequest ומספקים אותו בקריאה ל-readRecords.

בדוגמה הבאה מוסבר איך לקרוא נתונים של מספר הצעדים של משתמש בפרק זמן מסוים. דוגמה מורחבת עם SensorManager מופיעה במדריך הנתונים של ספירת השלבים.

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
    }
}

דוגמה לקריאה ברקע

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

<application>
  <uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
...
</application>

הדוגמה הבאה מראה איך לקרוא את נתוני ספירת הצעדים ברקע עבור משתמש בפרק זמן מסוים באמצעות WorkManager:

class ScheduleWorker(private val appContext: Context, workerParams: WorkerParameters):
    CoroutineWorker(appContext, workerParams) {

    override suspend fun doWork(): Result {
        // Read data and process it.
        ...

        // Return success indicating successful data retrieval
        return Result.success()
    }
}

if (healthConnectClient
    .features
    .getFeatureStatus(
    HealthConnectFeatures.FEATURE_READ_HEALTH_DATA_IN_BACKGROUND
    ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

    // Check if necessary permission is granted
    val grantedPermissions = healthConnectClient.permissionController.getGrantedPermissions()

    if (PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND !in grantedPermissions) {
        // Perform read in foreground
        ...
    } else {
        // Schedule the periodic work request in background
        val periodicWorkRequest = PeriodicWorkRequestBuilder<ScheduleWorker>(1, TimeUnit.HOURS)
            .build()

        WorkManager.getInstance(context).enqueueUniquePeriodicWork(
            "read_health_connect",
            ExistingPeriodicWorkPolicy.KEEP,
            periodicWorkRequest
        )
    }
} else {
  // Background reading is not available, perform read in foreground
  ...
}

קריאת נתונים שנכתבו בעבר

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

כדי לקרוא נתונים בתרחיש הזה, צריך לציין את שם החבילה כאובייקט DataOrigin בפרמטר dataOriginFilter של ReadRecordsRequest.

הדוגמה הבאה מראה איך לציין שם של חבילת נתונים בזמן קריאת רשומות של שלבים:

try {
    val response =  healthConnectClient.readRecords(
        ReadRecordsRequest(
            recordType = StepsRecord::class,
            timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
            dataOriginFilter = setOf(DataOrigin("com.my.package.name"))
        )
    )
    for (record in response.records) {
        // Process each record
    }
} catch (e: Exception) {
    // Run error handling here
}

הגבלות קריאה

כברירת מחדל, האפליקציה יכולה לקרוא נתונים במשך עד 30 ימים, עם כל הרשאה שהוענקה. ההרשאה PERMISSION_READ_HEALTH_DATA_HISTORY מאפשרת לאפליקציה לקרוא נתונים שנאספו לפני יותר מ-30 יום.

הגבלה ל-30 יום

מערכת Health Connect יכולה לקרוא נתונים מ-30 הימים שלפני ההרשאה הראשונה שניתנה.

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

דוגמה ל-30 יום

אם המשתמש נתן הרשאת קריאה לאפליקציה ב-30 במרץ 2023, הנתונים המוקדם ביותר שהאפליקציה יכולה לקרוא יהיו מ-28 בפברואר 2023 ואילך.

לאחר מכן, המשתמש מחק את האפליקציה ב-10 במאי 2023. המשתמש מחליט להתקין אותה מחדש ב-15 במאי 2023 ולהעניק הרשאת קריאה. התאריך המוקדם ביותר שהאפליקציה יכולה לקרוא נתונים ממנו הוא 15 באפריל 2023.

קריאת נתונים מלפני יותר מ-30 יום

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