อ่านข้อมูลดิบ

ตัวอย่างต่อไปนี้แสดงวิธีอ่านข้อมูลดิบซึ่งเป็นส่วนหนึ่งของเวิร์กโฟลว์ทั่วไป

อ่านข้อมูล

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

ตัวอย่างการอ่านในเบื้องหลัง

หากต้องการอ่านข้อมูลในเบื้องหลัง ให้ประกาศสิทธิ์ต่อไปนี้ในไฟล์ Manifest

<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 วันโดยใช้คําขอช่วงเวลาไม่ได้