צבירת נתונים ב-Health Connect כוללת צבירות בסיסיות או צבירת נתונים לדליים. בתהליכי העבודה הבאים מוסבר איך עושים את שתי הפעולות.
צבירה בסיסית
כדי להשתמש באגרגציה בסיסית של הנתונים, משתמשים בפונקציה aggregate
באובייקט HealthConnectClient
. הפונקציה מקבלת אובייקט AggregateRequest
שבו מוסיפים את סוגי המדדים ואת טווח הזמן כפרמטרים. אופן הקריאה של נתונים מצטברים בסיסיים תלוי בסוגי המדדים שבהם נעשה שימוש.
צבירה מצטברת
בצבירה מצטברת מחושב הערך הכולל.
בדוגמה הבאה אפשר לראות איך לצבור נתונים עבור סוג נתונים:
suspend fun aggregateDistance(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response = healthConnectClient.aggregate(
AggregateRequest(
metrics = setOf(DistanceRecord.DISTANCE_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
// The result may be null if no data is available in the time range
val distanceTotalInMeters = response[DistanceRecord.DISTANCE_TOTAL]?.inMeters ?: 0L
} catch (e: Exception) {
// Run error handling here
}
}
סינון לפי מקור הנתונים
אפשר גם לסנן נתונים מצטברים לפי המקור שלהם. לדוגמה, לכלול רק נתונים שנכתבו על ידי אפליקציה ספציפית.
בדוגמה הבאה אפשר לראות איך משתמשים ב-dataOriginFilter
וב-AggregateRequest
כדי לצבור נתונים של צעדים מאפליקציה ספציפית:
suspend fun aggregateStepsFromSpecificApp(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant,
appPackageName: String
) {
try {
val response = healthConnectClient.aggregate(
AggregateRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
dataOriginFilter = setOf(DataOrigin(appPackageName))
)
)
// The result may be null if no data is available in the time range
val totalSteps = response[StepsRecord.COUNT_TOTAL] ?: 0L
} catch (e: Exception) {
// Run error handling here
}
}
צבירה סטטיסטית
צבירה סטטיסטית מחשבת את הערכים המינימליים, המקסימליים או הממוצעים של רשומות עם דוגמאות.
בדוגמה הבאה אפשר לראות איך משתמשים בצבירה סטטיסטית:
suspend fun aggregateHeartRate(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response =
healthConnectClient.aggregate(
AggregateRequest(
setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
// The result may be null if no data is available in the time range
val minimumHeartRate = response[HeartRateRecord.BPM_MIN]
val maximumHeartRate = response[HeartRateRecord.BPM_MAX]
} catch (e: Exception) {
// Run error handling here
}
}
קטגוריות
אפשר גם להשתמש ב-Health Connect כדי לצבור נתונים בקטגוריות. יש שני סוגים של קבוצות שאפשר להשתמש בהן: משך ותקופה.
אחרי שקוראים להן, הן מחזירות רשימה של קטגוריות. שימו לב שהרשימה יכולה להיות דלילה, ולכן אם דלי לא מכיל נתונים, הוא לא ייכלל ברשימה.
משך הזמן
במקרה הזה, הנתונים המצטברים מחולקים לקבוצות בתוך פרק זמן קבוע, כמו דקה או שעה. כדי לצבור נתונים לדליים, משתמשים ב-aggregateGroupByDuration
. היא מקבלת אובייקט AggregateGroupByDurationRequest
שבו מוסיפים את סוגי המדדים, את טווח הזמן ואת Duration
כפרמטרים.
בדוגמה הבאה מוצג צבירה של צעדים לקטגוריות של דקה:
suspend fun aggregateStepsIntoMinutes(
healthConnectClient: HealthConnectClient,
startTime: LocalDateTime,
endTime: LocalDateTime
) {
try {
val response =
healthConnectClient.aggregateGroupByDuration(
AggregateGroupByDurationRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
timeRangeSlicer = Duration.ofMinutes(1L)
)
)
for (durationResult in response) {
// The result may be null if no data is available in the time range
val totalSteps = durationResult.result[StepsRecord.COUNT_TOTAL]
}
} catch (e: Exception) {
// Run error handling here
}
}
נקודה
במקרה כזה, הנתונים המצטברים מחולקים לקבוצות בתוך פרק זמן שמבוסס על תאריך, כמו שבוע או חודש. כדי לצבור נתונים לדליים, משתמשים ב-aggregateGroupByPeriod
. היא מקבלת אובייקט AggregateGroupByPeriodRequest
שבו מוסיפים את סוגי המדדים, את טווח הזמן ואת Period
כפרמטרים.
בדוגמה הבאה אפשר לראות איך מצטברים נתונים של שלבים לקטגוריות חודשיות:
suspend fun aggregateStepsIntoMonths(
healthConnectClient: HealthConnectClient,
startTime: LocalDateTime,
endTime: LocalDateTime
) {
try {
val response =
healthConnectClient.aggregateGroupByPeriod(
AggregateGroupByPeriodRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
timeRangeSlicer = Period.ofMonths(1)
)
)
for (monthlyResult in response) {
// The result may be null if no data is available in the time range
val totalSteps = monthlyResult.result[StepsRecord.COUNT_TOTAL]
}
} catch (e: Exception) {
// Run error handling here
}
}
הגבלות קריאה
כברירת מחדל, כל האפליקציות יכולות לקרוא נתונים מ-Health Connect עד 30 ימים לפני מועד מתן ההרשאה הראשונה.
אם אתם צריכים להרחיב את הרשאות הקריאה מעבר להגבלות ברירת המחדל, אתם צריכים לבקש את PERMISSION_READ_HEALTH_DATA_HISTORY
.
אחרת, ללא ההרשאה הזו, ניסיון לקרוא רשומות מלפני יותר מ-30 יום יגרום לשגיאה.
היסטוריית ההרשאות של אפליקציה שנמחקה
אם משתמש מוחק את האפליקציה שלכם, כל ההרשאות, כולל הרשאת הגישה להיסטוריה, מבוטלות. אם המשתמש מתקין מחדש את האפליקציה שלכם ומעניק לה הרשאה שוב, חלות עליה ההגבלות שמוגדרות כברירת מחדל, והאפליקציה יכולה לקרוא נתונים מ-Health Connect עד 30 ימים לפני התאריך החדש.
לדוגמה, נניח שהמשתמש מוחק את האפליקציה שלכם ב-10 במאי 2023, ואז מתקין אותה מחדש ב-15 במאי 2023 ומעניק לה הרשאות קריאה. התאריך המוקדם ביותר שממנו האפליקציה יכולה לקרוא נתונים כברירת מחדל הוא 15 באפריל 2023.
נתונים מצטברים שהושפעו מסדרי העדיפויות של האפליקציות שנבחרו על ידי המשתמשים
משתמשי קצה יכולים להגדיר עדיפות לאפליקציות השינה והפעילות שהם שילבו עם Health Connect. רק משתמשי קצה יכולים לשנות את רשימות העדיפות האלה. כשמבצעים קריאה מצטברת, Aggregate API מתחשב בכל הנתונים הכפולים ושומר רק את הנתונים מהאפליקציה עם העדיפות הכי גבוהה. יכול להיות שיהיו נתונים כפולים אם המשתמש מפעיל כמה אפליקציות שכותבות את אותו סוג של נתונים – למשל מספר הצעדים או המרחק – בו-זמנית.
מידע על האופן שבו משתמשי קצה יכולים לתת עדיפות לאפליקציות שלהם מופיע במאמר ניהול נתונים ב-Health Connect.
המשתמש יכול גם להוסיף או להסיר אפליקציות ולשנות את סדר העדיפויות שלהן. יכול להיות שמשתמש ירצה להסיר אפליקציה שכותבת נתונים כפולים, כדי שסיכומי הנתונים במסך של Health Connect יהיו זהים לנתונים באפליקציה שהוא נתן לה את העדיפות הכי גבוהה. הסיכומים של הנתונים מתעדכנים בזמן אמת.
למרות ש-Aggregate API מחשב את הנתונים של אפליקציות הפעילות והשינה על ידי ביטול כפילויות בנתונים בהתאם להגדרת העדיפויות של המשתמש, עדיין אפשר ליצור לוגיקה משלכם כדי לחשב את הנתונים בנפרד לכל אפליקציה שכותבת את הנתונים האלה.
רק סוגי הנתונים 'פעילות' ו'שינה' עוברים ביטול כפילויות ב-Health Connect, והסכומים הכוללים של הנתונים שמוצגים הם הערכים אחרי שבוצע ביטול הכפילויות על ידי Aggregate API. הנתונים הכוללים האלה הם מהיום המלא האחרון שבו היו נתונים לגבי צעדים ומרחק. באפליקציות מסוגים אחרים, המספרים הכוללים של כל האפליקציות האלה יחד מוצגים בסיכומי הנתונים ב-Health Connect.
קריאות ברקע
אתם יכולים לבקש שהאפליקציה שלכם תפעל ברקע ותקרא נתונים מ-Health Connect. אם תבקשו את ההרשאה Background Read, המשתמש יוכל להעניק לאפליקציה שלכם גישה לקריאת נתונים ברקע.
סוגי נתונים מצטברים נתמכים לפי רשומה
בטבלה הזו מפורטים כל סוגי הנתונים המצטברים שנתמכים על ידי רשומות Health Connect.