Ham verileri okuma

Aşağıdaki örnekte, ortak iş akışının bir parçası olarak ham verilerin nasıl okunacağı gösterilmektedir.

Verileri okuma

Health Connect, uygulamaların ön planda ve arka plandayken veri deposundan veri okumasına izin verir:

  • Ön planda okuma: Normalde uygulamanız ön plandayken Health Connect'ten veri okuyabilirsiniz. Bu gibi durumlarda, kullanıcı veya sistem bir okuma işlemi sırasında uygulamanızı arka plana yerleştirirse bu işlemi çalıştırmak için bir ön plan hizmeti kullanmayı düşünebilirsiniz.

  • Arka planda okuma: Kullanıcıdan ek izin isteyerek, kullanıcı veya sistem uygulamanızı arka plana yerleştirdikten sonra verileri okuyabilirsiniz. Arka planda okuma örneğinin tamamını inceleyin.

Health Connect'teki Adım Sayısı veri türü, kullanıcının ölçümler arasında attığı adım sayısını yakalar. Adım sayıları, sağlık, fitness ve sağlıklı yaşam platformlarında ortak bir ölçümü temsil eder. Health Connect, adım sayısı verilerini okumayı ve yazmayı kolaylaştırır.

Kayıtları okumak için bir ReadRecordsRequest oluşturun ve readRecords işlevini çağırırken bu değeri sağlayın.

Aşağıdaki örnekte, belirli bir zamandaki bir kullanıcının adım sayısı verilerinin nasıl okunacağı gösterilmektedir. SensorManager içeren genişletilmiş bir örnek için adım sayısı veri kılavuzuna bakın.

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

Arka planda okuma örneği

Arka planda veri okumak için manifest dosyanızda aşağıdaki izni beyan edin:

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

Aşağıdaki örnekte, WorkManager kullanılarak belirli bir süre içinde bir kullanıcının adım sayısı verilerinin arka planda nasıl okunacağı gösterilmektedir:

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

Daha önce yazılmış verileri okuma

Daha önce Health Connect'e kayıt yazan bir uygulama, söz konusu kayıtlar için okuma izni gerekmeden bunları tekrar okuyabilir. Bu, kullanıcının uygulamayı yeniden yükledikten sonra uygulamanın Health Connect ile yeniden senkronize edilmesi gereken senaryolar için geçerlidir.

Bu senaryoda verileri okumak için paket adını, ReadRecordsRequest öğenizin dataOriginFilter parametresinde DataOrigin nesnesi olarak belirtmeniz gerekir.

Aşağıdaki örnekte, adımlar kayıtlarını okurken paket adının nasıl belirtileceği gösterilmektedir:

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
}

Okundu bilgisi kısıtlamaları

Uygulamanız, varsayılan olarak verilen tüm izinlerle 30 güne kadar eski verileri okuyabilir. PERMISSION_READ_HEALTH_DATA_HISTORY izniyle uygulamanız 30 günden eski verileri okuyabilir.

30 günlük kısıtlama

Uygulamalar, ilk izin verildiği tarihten önceki 30 güne kadar Health Connect'teki verileri okuyabilir.

Ancak bir kullanıcı uygulamanızı silerse izin geçmişi kaybolur. Kullanıcı uygulamanızı yeniden yükleyip tekrar izin verirse uygulamanız, bu yeni tarihten 30 gün öncesine kadarki Health Connect verilerini okuyabilir.

30 günlük örnek

Bir kullanıcı uygulamanıza ilk kez 30 Mart 2023'te okuma izni verdiyse uygulamanızın geri okuyabileceği en eski veriler 28 Şubat 2023'ten itibaren olacaktır.

Kullanıcı, 10 Mayıs 2023'te uygulamanızı siler. Kullanıcı, 15 Mayıs 2023'te uygulamayı yeniden yüklemeye ve okuma izni vermeye karar verir. Uygulamanızın artık veri okuyabileceği en erken tarih 15 Nisan 2023'tür.

30 günden eski verileri okuma

30 günden eski verileri okumak istiyorsanız PERMISSION_READ_HEALTH_DATA_HISTORY iznini kullanmanız gerekir. Bu izin olmadan 30 günden eski tek bir kaydı okuma girişimi hatayla sonuçlanır. Ayrıca, zaman aralığı isteklerinden birini kullanarak 30 günden eski verileri de okuyamazsınız.