خواندن داده های خام

مثال زیر نحوه خواندن داده های خام را به عنوان بخشی از گردش کار رایج به شما نشان می دهد.

داده ها را بخوانید

Health Connect به برنامه‌ها اجازه می‌دهد تا زمانی که برنامه در پیش‌زمینه و پس‌زمینه است، داده‌ها را از دیتا استور بخوانند:

  • پیش‌زمینه خوانده می‌شود : وقتی برنامه شما در پیش‌زمینه است، معمولاً می‌توانید داده‌ها را از Health Connect بخوانید. در این موارد، در صورتی که کاربر یا سیستم برنامه شما را در حین عملیات خواندن در پس‌زمینه قرار دهد، ممکن است از یک سرویس پیش‌زمینه برای اجرای این عملیات استفاده کنید.

  • پس‌زمینه می‌خواند : با درخواست مجوز اضافی از کاربر، می‌توانید پس از اینکه کاربر یا سیستم برنامه شما را در پس‌زمینه قرار داد، داده‌ها را بخوانید. نمونه خواندن کامل پس زمینه را ببینید.

نوع داده Steps در 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 خود نشان دهید.

مثال زیر نحوه نشان دادن نام بسته را هنگام خواندن رکوردهای Steps نشان می دهد:

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 روز قبل از اولین اعطای مجوز بخواند.

با این حال، اگر کاربری برنامه شما را حذف کند، تاریخچه مجوز از بین می رود. اگر کاربر برنامه شما را مجدداً نصب کند و دوباره مجوز بدهد، برنامه شما می‌تواند تا 30 روز قبل از تاریخ جدید داده‌ها را از Health Connect بخواند.

مثال 30 روزه

اگر کاربر برای اولین بار در 30 مارس 2023 مجوز خواندن را به برنامه شما اعطا کرد، اولین اطلاعاتی که برنامه شما می تواند بازخوانی کند از 28 فوریه 2023 به بعد خواهد بود.

سپس کاربر برنامه شما را در 10 مه 2023 حذف می کند. کاربر تصمیم می گیرد آن را در 15 مه 2023 مجدداً نصب کند و اجازه خواندن را اعطا کند. اولین تاریخی که برنامه شما اکنون می تواند داده ها را بخواند ، 15 آوریل 2023 است.

خواندن داده های قدیمی تر از 30 روز

اگر می‌خواهید داده‌های قدیمی‌تر از 30 روز را بخوانید، باید از مجوز PERMISSION_READ_HEALTH_DATA_HISTORY استفاده کنید. بدون این مجوز، تلاش برای خواندن یک رکورد قدیمی‌تر از 30 روز منجر به خطا می‌شود. همچنین نمی‌توانید با استفاده از یکی از درخواست‌های محدوده زمانی، داده‌های قدیمی‌تر از 30 روز را بخوانید.