تشمل عملية تجميع البيانات في 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
}
}
التجميع الإحصائي
تُحسِّب التجميعات الإحصائية الحد الأدنى أو الأقصى أو المتوسط لقيم السجلّات التي تتضمّن عيّنات.
يوضّح المثال التالي كيفية استخدام التجميع الإحصائي:
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
}
}
قيود القراءة
يمكن لتطبيقك قراءة البيانات لمدة تصل إلى 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 يومًا باستخدام أحد طلبات ملف تعريف الارتباط
للفترة الزمنية.