Membaca data mentah

Contoh berikut menunjukkan cara membaca data mentah sebagai bagian dari alur kerja umum.

Membaca data

Health Connect memungkinkan aplikasi membaca data dari datastore saat aplikasi berada di latar depan dan latar belakang:

  • Pembacaan latar depan: Anda biasanya dapat membaca data dari Health Connect saat aplikasi berada di latar depan. Dalam kasus ini, Anda dapat mempertimbangkan untuk menggunakan layanan latar depan untuk menjalankan operasi ini jika pengguna atau sistem menempatkan aplikasi Anda di latar belakang selama operasi baca.

  • Pembacaan latar belakang: Dengan meminta izin tambahan dari pengguna, Anda dapat membaca data setelah pengguna atau sistem menempatkan aplikasi Anda di latar belakang. Lihat contoh pembacaan latar belakang yang lengkap.

Jenis data Langkah di Health Connect mendeteksi jumlah langkah pengguna di sela-sela pembacaan. Jumlah langkah mewakili pengukuran umum di seluruh platform kesehatan, kebugaran, dan kesegaran. Health Connect memudahkan Anda membaca dan menulis data jumlah langkah.

Untuk membaca data, buat ReadRecordsRequest dan berikan saat Anda memanggil readRecords.

Contoh berikut menunjukkan cara membaca data jumlah langkah untuk pengguna dalam waktu tertentu. Untuk contoh yang diperluas dengan SensorManager, lihat panduan data jumlah langkah.

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

Contoh pembacaan latar belakang

Untuk membaca data di latar belakang, deklarasikan izin berikut dalam file manifes Anda:

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

Contoh berikut menunjukkan cara membaca data jumlah langkah di latar belakang untuk pengguna dalam waktu tertentu menggunakan 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
  ...
}

Membaca data yang ditulis sebelumnya

Jika aplikasi telah menulis catatan ke Health Connect sebelumnya, aplikasi tersebut dapat membacanya kembali tanpa memerlukan izin Baca ke catatan tertentu. Hal ini berlaku untuk skenario saat aplikasi perlu disinkronkan ulang dengan Health Connect setelah pengguna menginstal ulang aplikasi.

Untuk membaca data dalam skenario ini, Anda perlu menunjukkan nama paket sebagai objek DataOrigin dalam parameter dataOriginFilter dari ReadRecordsRequest.

Contoh berikut menampilkan cara menunjukkan nama paket saat membaca data Langkah:

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
}

Batasan baca

Secara default, aplikasi Anda dapat membaca data hingga 30 hari dengan izin apa pun yang diberikan. Dengan izin PERMISSION_READ_HEALTH_DATA_HISTORY, aplikasi Anda dapat membaca data yang lebih lama dari 30 hari.

Batasan 30 hari

Aplikasi dapat membaca data dari Health Connect hingga 30 hari sebelum izin apa pun pertama kali diberikan.

Namun, jika pengguna menghapus aplikasi Anda, histori izin akan hilang. Jika pengguna menginstal ulang aplikasi Anda dan memberikan izin lagi, aplikasi Anda dapat membaca data dari Health Connect hingga 30 hari sebelum tanggal baru tersebut.

Contoh 30 hari

Jika pengguna pertama kali memberikan izin baca ke aplikasi Anda pada 30 Maret 2023, data paling awal yang dapat dibaca kembali oleh aplikasi Anda akan berasal dari 28 Februari 2023 dan seterusnya.

Kemudian, pengguna tersebut menghapus aplikasi Anda pada 10 Mei 2023. Pengguna tersebut memutuskan untuk menginstal ulang pada 15 Mei 2023 dan memberikan izin baca. Tanggal awal data yang dapat dibaca aplikasi Anda sekarang adalah dari tanggal 15 April 2023.

Membaca data yang lebih lama dari 30 hari

Jika ingin membaca data yang lebih lama dari 30 hari, Anda harus menggunakan izin PERMISSION_READ_HEALTH_DATA_HISTORY. Tanpa izin ini, upaya untuk membaca satu data yang lebih lama dari 30 hari akan menyebabkan error. Anda juga tidak dapat membaca data yang lebih lama dari 30 hari menggunakan salah satu permintaan rentang waktu.