Aplikasi Terintegrasi Health Connect Pertama Anda

1. Pengantar

e4a4985ad1cdae8b.png

Apa itu Health Connect?

Health Connect adalah platform data kesehatan untuk developer aplikasi Android. Layanan ini menyediakan satu antarmuka gabungan untuk akses ke data kesehatan dan kebugaran pengguna, serta perilaku fungsional yang konsisten di semua perangkat. Dengan Health Connect, pengguna memiliki penyimpanan data kesehatan dan kebugaran yang aman di perangkat, dengan kontrol dan transparansi penuh atas akses.

Bagaimana cara kerja Health Connect?

Health Connect mendukung lebih dari 50 jenis dan kategori data kesehatan dan kebugaran umum, termasuk aktivitas, tidur, nutrisi, pengukuran tubuh, dan tanda vital seperti detak jantung dan tekanan darah.

Cara Kerja Health Connect

Dengan izin pengguna, developer dapat membaca dari dan menulis ke Health Connect dengan aman menggunakan skema standar dan perilaku API. Pengguna mendapatkan kontrol penuh atas setelan privasi mereka, dengan kontrol terperinci untuk melihat aplikasi mana yang meminta akses ke data pada waktu tertentu. Data di Health Connect disimpan di perangkat dan dienkripsi. Pengguna juga mendapatkan kemampuan untuk menonaktifkan akses atau menghapus data yang tidak mereka inginkan di perangkat, dan opsi untuk memprioritaskan satu sumber data daripada sumber data lainnya saat menggunakan beberapa aplikasi.

Arsitektur Health Connect

arsitektur

Berikut adalah penjelasan mengenai aspek utama dan komponen arsitektur Health Connect:

  • Aplikasi klien: Untuk berintegrasi dengan Health Connect, aplikasi klien menautkan SDK ke dalam aplikasi kesehatan dan kebugaran mereka. Hal ini menyediakan platform API untuk berinteraksi dengan Health Connect API.
  • Software Development Kit: SDK ini memungkinkan aplikasi klien berkomunikasi dengan APK Health Connect melalui IPC.
  • Health Connect APK: Ini adalah APK yang mengimplementasikan Health Connect. APK ini berisi komponen Pengelolaan Izin dan Pengelolaan Data. APK Health Connect tersedia langsung di perangkat pengguna sehingga berorientasi pada perangkat, bukan akun.
  • Pengelolaan izin: Health Connect mencakup antarmuka pengguna yang digunakan oleh aplikasi untuk meminta izin pengguna agar menampilkan data. Health Connect juga memberikan daftar izin pengguna yang ada. Tindakan ini memungkinkan pengguna mengelola akses yang telah mereka berikan atau tolak ke berbagai aplikasi.
  • Pengelolaan data: Health Connect menyediakan antarmuka pengguna yang berisi ringkasan data yang dicatat, baik itu jumlah langkah pengguna, kecepatan bersepeda, detak jantung, maupun jenis data lainnya yang didukung.

Yang akan Anda bangun

Dalam Codelab ini, Anda akan membangun aplikasi kesehatan dan kebugaran sederhana yang terintegrasi dengan Health Connect. Aplikasi Anda akan melakukan hal berikut:

  • Mendapatkan dan memeriksa izin pengguna untuk akses data.
  • Menulis data ke Health Connect.
  • Membaca data gabungan dari Health Connect.

Yang akan Anda pelajari

  • Cara menyiapkan lingkungan Anda untuk mendukung pengembangan integrasi Health Connect.
  • Cara mendapatkan izin dan menjalankan pemeriksaan izin.
  • Cara mengontribusikan data kesehatan dan kebugaran ke platform Health Connect.
  • Cara memanfaatkan penyimpanan data di perangkat.
  • Cara memvalidasi aplikasi dengan alat developer yang disediakan Google.

Yang akan Anda butuhkan

  • Android Studio versi stabil terbaru.
  • Perangkat seluler Android dengan Android SDK versi 28 (Pie) atau lebih tinggi.

2. Penyiapan

Menginstal Health Connect

Health Connect tersedia di Play Store. Instal Health Connect ke perangkat seluler untuk menangani semua permintaan yang dikirim aplikasi Anda menggunakan Health Connect SDK. Pindai kode QR untuk menginstal Health Connect.

633ed0490a74595d.png

Mendapatkan kode contoh

Jika sudah menginstal git, Anda dapat menjalankan perintah di bawah ini untuk meng-clone kode dari repositori ini. Untuk memeriksa apakah git sudah diinstal, ketik git --version di terminal atau command line dan pastikan git dijalankan dengan benar.

git clone https://github.com/android/android-health-connect-codelab.git
cd android-health-connect-codelab

Jika tidak memiliki git, Anda dapat mengklik tombol berikut untuk mendownload semua kode untuk codelab ini:

Direktori contoh berisi kode start dan finished untuk Codelab ini. Pada tampilan Project di Android Studio, Anda akan menemukan dua modul:

  • start: Kode awal untuk project ini, tempat Anda akan membuat perubahan pada kode ini untuk menyelesaikan Codelab.
  • finished: Kode yang sudah selesai untuk Codelab ini, tempat kode ini digunakan untuk memeriksa pekerjaan Anda.

Mempelajari kode 'start'

Aplikasi contoh Codelab memiliki UI dasar yang dibuat menggunakan Jetpack Compose dengan layar berikut:

  • WelcomeScreen: Halaman landing aplikasi yang menampilkan pesan berbeda yang bergantung pada ketersediaan Health Connect, baik diinstal, tidak diinstal, atau tidak didukung.
  • PrivacyPolicyScreen: Bagian ini menjelaskan penggunaan izin aplikasi yang ditampilkan saat pengguna mengklik link Kebijakan privasi dalam dialog izin Health Connect.
  • InputReadingsScreen: Menunjukkan pembacaan dan penulisan catatan berat sederhana.
  • ExerciseSessionScreen: Di sinilah pengguna menyisipkan dan membuat daftar sesi latihan. Saat mengklik data, pengguna akan diarahkan ke ExerciseSessionDetailScreen untuk menampilkan lebih banyak data yang terkait dengan sesi tersebut.
  • DifferentialChangesScreen: Menunjukkan cara mendapatkan token Perubahan dan mendapatkan perubahan baru dari Health Connect.

HealthConnectManager menyimpan semua fungsi yang berinteraksi dengan Health Connect. Dalam Codelab ini, kami akan memandu Anda langkah demi langkah untuk menyelesaikan fungsi penting. String <!-- TODO: pada build start memiliki bagian yang sesuai dalam Codelab ini, tempat kode contoh diberikan agar dapat Anda masukkan ke dalam project.

Mari kita mulai dengan menambahkan Health Connect ke project.

Menambahkan SDK klien Health Connect

Untuk mulai menggunakan Health Connect SDK, Anda perlu menambahkan dependensi pada file build.gradle. Untuk menemukan Health Connect versi terbaru, periksa rilis library Jetpack.

dependencies {
    // Add a dependency of Health Connect SDK
    implementation "androidx.health.connect:connect-client:1.0.0-alpha11"
}

Mendeklarasikan visibilitas Health Connect

Untuk berinteraksi dengan Health Connect dalam aplikasi, deklarasikan nama paket Health Connect di AndroidManifest.xml:

<!-- TODO: declare Health Connect visibility -->
<queries>
   <package android:name="com.google.android.apps.healthdata" />
</queries>

Menjalankan project

Setelah semuanya siap, jalankan project start. Pada tahap ini, Anda akan melihat layar sambutan yang menampilkan teks "Health Connect diinstal di perangkat ini" dan panel menu. Kami akan menambahkan fungsi untuk berinteraksi dengan Health Connect di bagian berikutnya.

d54773774e4dc9f.png 462cd7b6cf553ad.png

3. Kontrol izin

Health Connect merekomendasikan developer untuk membatasi permintaan izin pada jenis data yang digunakan dalam aplikasi. Permintaan izin menyeluruh mengurangi kepercayaan pengguna pada aplikasi dan dapat menurunkan kepercayaan pengguna. Jika izin ditolak lebih dari dua kali, aplikasi Anda akan dikunci. Akibatnya, permintaan izin tidak akan muncul lagi.

Untuk tujuan Codelab ini, kita hanya memerlukan izin berikut:

  • Sesi Latihan
  • Detak Jantung
  • Langkah
  • Total Kalori yang Dibakar
  • Berat

Mendeklarasikan izin

Setiap jenis data yang dibaca atau ditulis oleh aplikasi Anda harus dideklarasikan menggunakan izin di AndroidManifest.xml. Mulai dari versi alpha10, Health Connect menggunakan format pernyataan izin Android standar.

Guna mendeklarasikan izin untuk jenis data yang diperlukan, gunakan elemen <uses-permission> dan tetapkan namanya masing-masing dengan izin. Tempatkan keduanya di dalam tag <manifest>. Untuk mengetahui daftar lengkap izin dan jenis data yang sesuai, lihat Daftar jenis data.

<!-- TODO: declare Health Connect permissions -->
  <uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
  <uses-permission android:name="android.permission.health.WRITE_HEART_RATE"/>
  <uses-permission android:name="android.permission.health.READ_STEPS"/>
  <uses-permission android:name="android.permission.health.WRITE_STEPS"/>
  <uses-permission android:name="android.permission.health.READ_EXERCISE"/>
  <uses-permission android:name="android.permission.health.WRITE_EXERCISE"/>
  <uses-permission android:name="android.permission.health.READ_TOTAL_CALORIES_BURNED"/>
  <uses-permission android:name="android.permission.health.WRITE_TOTAL_CALORIES_BURNED"/>
  <uses-permission android:name="android.permission.health.READ_WEIGHT"/>
  <uses-permission android:name="android.permission.health.WRITE_WEIGHT"/>

Deklarasikan filter intent dalam AndroidManifest.xml untuk menangani intent yang menjelaskan cara aplikasi Anda menggunakan izin tersebut. Aplikasi Anda harus menangani intent ini dan menampilkan kebijakan privasi yang menjelaskan cara data pengguna digunakan dan ditangani. Intent ini dikirim ke aplikasi setelah pengguna mengetuk link Kebijakan privasi di dialog izin Health Connect.

<!-- TODO: Add intent filter to handle permission rationale intent -->
<intent-filter>
    <action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>

Sekarang buka kembali aplikasi untuk melihat izin yang dideklarasikan. Klik Setelan dari panel menu untuk membuka layar Setelan Health Connect. Kemudian, klik Izin aplikasi tempat Anda akan melihat Codelab Health Connect dalam daftar. Klik Health Connect Codelab guna menampilkan daftar jenis data untuk akses baca dan tulis di aplikasi tersebut.

fbed69d871f92178.png 1b9c7764c1dbdfac.png

Meminta izin

Selain mengarahkan pengguna langsung ke Setelan Health Connect untuk mengelola izin, Anda juga dapat meminta izin dari aplikasi melalui Health Connect API. Perhatikan bahwa pengguna dapat mengubah izin kapan saja, jadi pastikan aplikasi Anda memeriksa apakah izin yang diperlukan tersedia. Dalam project Codelab, kita memeriksa dan mengirim permintaan izin sebelum membaca atau menulis data.

HealthConnectClient adalah titik entri ke Health Connect API. Di HealthConnectManager.kt, dapatkan instance HealthConnectClient.

private val healthConnectClient by lazy { HealthConnectClient.getOrCreate(context) }

Untuk memulai dialog permintaan izin dalam aplikasi, pertama-tama build kumpulan izin untuk jenis data yang diperlukan. Anda hanya boleh meminta izin untuk jenis data yang akan digunakan.

Misalnya, di layar Rekam berat, Anda hanya perlu memberikan izin baca dan tulis untuk Berat. Kami telah membuat izin yang disetel di InputReadingsViewModel.kt seperti yang ditunjukkan pada kode berikut.

  val permissions = setOf(
    HealthPermission.getReadPermission(WeightRecord::class),
    HealthPermission.getWritePermission(WeightRecord::class),
  )

Kemudian, periksa apakah izin telah diberikan sebelum meluncurkan permintaan izin. Di HealthConnectManager.kt, gunakan getGrantedPermissions untuk memastikan apakah izin jenis data yang diperlukan diberikan. Untuk meluncurkan permintaan izin, Anda harus membuat ActivityResultContract dengan menggunakan PermissionController.createRequestPermissionResultContract(), yang harus diluncurkan saat izin yang diperlukan tidak diberikan.

  suspend fun hasAllPermissions(permissions: Set<String>): Boolean {
    return healthConnectClient.permissionController.getGrantedPermissions().containsAll(permissions)
  }

  fun requestPermissionsActivityContract(): ActivityResultContract<Set<String>, Set<String>> {
    return PermissionController.createRequestPermissionResultContract()
  }

Dalam aplikasi contoh Codelab, Anda mungkin melihat tombol Minta izin yang ditampilkan di layar jika belum memberikan izin ke jenis data yang diperlukan. Klik Minta izin untuk membuka dialog izin Health Connect. Berikan izin yang diperlukan dan kembali ke aplikasi Codelab.

626eedcec23659ce.png 6df6cf0e5c4a1a9e.png

4. Menulis data

Mari kita mulai menulis catatan ke Health Connect. Untuk menulis data Berat, buat objek WeightRecord dengan nilai input bobot. Perhatikan bahwa Health Connect SDK mendukung berbagai class unit. Misalnya, gunakan Mass.kilograms(weightInput) untuk menetapkan berat pengguna dalam kilogram.

Semua data yang ditulis ke Health Connect harus menentukan informasi offset zona waktu. Menentukan informasi offset zona Waktu saat menulis data memberikan informasi zona waktu saat membaca data di Health Connect.

Setelah membuat catatan berat, gunakan healthConnectClient.insertRecords untuk menulis data ke Health Connect.

/**
* TODO: Writes [WeightRecord] to Health Connect.
*/
suspend fun writeWeightInput(weightInput: Double) {
   val time = ZonedDateTime.now().withNano(0)
   val weightRecord = WeightRecord(
       weight = Mass.kilograms(weightInput),
       time = time.toInstant(),
       zoneOffset = time.offset
   )
   val records = listOf(weightRecord)
   try {
      healthConnectClient.insertRecords(records)
      Toast.makeText(context, "Successfully insert records", Toast.LENGTH_SHORT).show()
   } catch (e: Exception) {
      Toast.makeText(context, e.message.toString(), Toast.LENGTH_SHORT).show()
   }
}

Sekarang, mari kita jalankan aplikasi. Klik Rekam berat lalu masukkan catatan berat baru dalam kilogram. Untuk memverifikasi apakah catatan berat berhasil ditulis ke Health Connect, buka aplikasi Health Connect di Setelan, lalu buka Data dan akses > Pengukuran tubuh > Berat > Lihat semua entri. Anda akan melihat catatan berat baru yang ditulis dari Health Connect Codelab.

Menulis sesi latihan

Sesi adalah interval waktu selama pengguna melakukan aktivitas. Sesi latihan di Health Connect dapat mencakup semua hal, mulai dari berlari hingga bulu tangkis. Sesi memungkinkan pengguna mengukur performa berdasarkan waktu. Data ini mencatat array sampel instan yang diukur selama jangka waktu tertentu, misalnya detak jantung berkelanjutan atau sampel lokasi selama aktivitas.

Contoh berikut menunjukkan cara menulis sesi latihan. Gunakan healthConnectClient.insertRecords untuk menyisipkan beberapa catatan data yang terkait dengan sesi. Permintaan penyisipan dalam contoh ini mencakup ExerciseSessionRecord dengan ExerciseType, StepsRecord dengan jumlah langkah, TotalCaloriesBurnedRecord dengan Energy, dan serangkaian sampel HeartRateRecord.

  /**
   * TODO: Writes an [ExerciseSessionRecord] to Health Connect.
   */
  suspend fun writeExerciseSession(start: ZonedDateTime, end: ZonedDateTime) {
    healthConnectClient.insertRecords(
      listOf(
        ExerciseSessionRecord(
          startTime = start.toInstant(),
          startZoneOffset = start.offset,
          endTime = end.toInstant(),
          endZoneOffset = end.offset,
          exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_RUNNING,
          title = "My Run #${Random.nextInt(0, 60)}"
        ),
        StepsRecord(
          startTime = start.toInstant(),
          startZoneOffset = start.offset,
          endTime = end.toInstant(),
          endZoneOffset = end.offset,
          count = (1000 + 1000 * Random.nextInt(3)).toLong()
        ),
        TotalCaloriesBurnedRecord(
          startTime = start.toInstant(),
          startZoneOffset = start.offset,
          endTime = end.toInstant(),
          endZoneOffset = end.offset,
          energy = Energy.calories((140 + Random.nextInt(20)) * 0.01)
        )
      ) + buildHeartRateSeries(start, end)
    )
  }

  /**
   * TODO: Build [HeartRateRecord].
   */
  private fun buildHeartRateSeries(
    sessionStartTime: ZonedDateTime,
    sessionEndTime: ZonedDateTime,
  ): HeartRateRecord {
    val samples = mutableListOf<HeartRateRecord.Sample>()
    var time = sessionStartTime
    while (time.isBefore(sessionEndTime)) {
      samples.add(
        HeartRateRecord.Sample(
          time = time.toInstant(),
          beatsPerMinute = (80 + Random.nextInt(80)).toLong()
        )
      )
      time = time.plusSeconds(30)
    }
    return HeartRateRecord(
      startTime = sessionStartTime.toInstant(),
      startZoneOffset = sessionStartTime.offset,
      endTime = sessionEndTime.toInstant(),
      endZoneOffset = sessionEndTime.offset,
      samples = samples
    )
  }

5. Toolbox Health Connect

Pengantar Toolbox Health Connect

Toolbox Health Connect adalah alat developer pendamping untuk membantu Anda menguji integrasi aplikasi menggunakan Health Connect. Alat ini dapat membaca dan menulis data langsung ke Health Connect, sehingga Anda dapat menguji operasi CRUD aplikasi.

Dalam Codelab ini, kita akan menggunakan Toolbox Health Connect untuk menguji fungsi pembacaan dan penulisan yang baru saja Anda terapkan.

Menyiapkan Toolbox Health Connect

Ekstrak folder ZIP untuk mendapatkan file APK. Kemudian, untuk menginstal APK Toolbox pada perangkat yang terhubung, gunakan adb. Jelajahi folder tempat APK berada dan jalankan perintah berikut:

$ adb install HealthConnectToolbox-{Version Number}.apk

Saat pertama kali membuka aplikasi Toolbox Health Connect, Anda akan diarahkan ke setelan izin pada Aplikasi > Akses aplikasi khusus > Tampilkan di atas aplikasi lain. Izin ini memungkinkan Toolbox Health Connect menampilkan overlay di atas aplikasi lain sehingga Anda dapat menguji data pembacaan dan penulisan tanpa keluar dari aplikasi yang sedang dikembangkan.

Untuk mengelola izin baca dan tulis untuk pengujian, Anda dapat membuka aplikasi Health Connect dari layar utama aplikasi Toolbox atau langsung membuka alur izin.

c3e6fd40b03b408a.png

Membaca dan menulis catatan kesehatan

Toolbox Health Connect mendukung pembacaan dan penulisan semua jenis data Health Connect. Di sesi terakhir Codelab, Anda berhasil menulis catatan Sesi Berat dan Latihan ke Health Connect. Mari periksa apakah Anda dapat membaca data dari Toolbox Health Connect.

Sebelum membaca dan menulis ke Health Connect, izin dari pengguna harus diperoleh. Hal yang sama berlaku untuk Toolbox Health Connect. Pertama, terima permintaan izin dari Toolbox Health Connect. Selanjutnya, klik ikon penelusuran1f407c55884bb8c3.png dari menu overlay untuk membuka dialog, pilih jenis data seperti Berat, lalu klik BACA CATATAN KESEHATAN. Anda akan melihat data dari aplikasi contoh Codelab yang baru saja ditulis ke Health Connect.

Untuk memasukkan catatan ke Health Connect, klik ikon edit 10c524823c596aea.png dari menu overlay untuk membuka dialog. Lalu, pilih jenis data. Mari kita masukkan catatan Berat dari Toolbox. Pada sesi berikutnya, kami akan menunjukkan cara membaca data melalui Health Connect API dan menampilkan data di aplikasi Anda.

cac9d4c249a1d107.png

6. Membaca data

Sekarang setelah Anda menulis catatan Sesi Latihan dan Berat dengan aplikasi contoh Codelab atau aplikasi Toolbox, mari kita gunakan Health Connect API untuk membaca catatan tersebut. Pertama-tama, buat ReadRecordsRequest dan tentukan jenis data dan rentang waktu untuk membaca data. ReadRecordsRequest juga dapat menetapkan dataOriginFilter untuk menentukan aplikasi sumber data yang ingin Anda baca.

    /**
     * TODO: Reads in existing [WeightRecord]s.
     */
    suspend fun readWeightInputs(start: Instant, end: Instant): List<WeightRecord> {
        val request = ReadRecordsRequest(
            recordType = WeightRecord::class,
            timeRangeFilter = TimeRangeFilter.between(start, end)
        )
        val response = healthConnectClient.readRecords(request)
        return response.records
    }
  /**
   * TODO: Obtains a list of [ExerciseSessionRecord]s in a specified time frame.
   */
  suspend fun readExerciseSessions(start: Instant, end: Instant): List<ExerciseSessionRecord> {
    val request = ReadRecordsRequest(
      recordType = ExerciseSessionRecord::class,
      timeRangeFilter = TimeRangeFilter.between(start, end)
    )
    val response = healthConnectClient.readRecords(request)
    return response.records
  }

Sekarang, mari kita jalankan aplikasi dan periksa apakah Anda dapat melihat daftar catatan berat dan sesi latihan.

a08af54eef6bc832.png 3b0781389f1094a1.png

7. Membaca data diferensial

Differential Changes API Health Connect membantu melacak perubahan dari titik waktu tertentu untuk sekumpulan jenis data. Misalnya, Anda ingin tahu apakah pengguna telah memperbarui atau menghapus catatan yang ada di luar aplikasi sehingga Anda dapat memperbarui database.

Pembacaan data dengan Health Connect dibatasi untuk aplikasi yang berjalan di latar depan. Pembatasan ini diberlakukan untuk lebih memperkuat privasi pengguna. Pembatasan ini memberi tahu dan meyakinkan pengguna bahwa Health Connect tidak memiliki akses baca latar belakang ke data mereka dan bahwa data hanya dibaca serta diakses di latar depan. Saat aplikasi berada di latar depan, Differential Changes API memungkinkan developer mengambil perubahan yang dilakukan pada Health Connect dengan men-deploy token Perubahan.

Di HealthConnectManager.kt ada dua fungsi, yaitu getChangesToken() dan getChanges(). Kita akan menambahkan Differential Changes API ke fungsi ini untuk mendapatkan perubahan data.

Penyiapan token Perubahan awal

Perubahan data hanya diambil dari Health Connect saat aplikasi Anda memintanya dengan token Perubahan. Token Perubahan ini mewakili titik di histori commit yang menjadi asal pengambilan data diferensial.

Untuk mendapatkan token Perubahan, kirim ChangesTokenRequest dengan kumpulan jenis data yang ingin Anda lacak perubahan datanya. Simpan token dan gunakan saat Anda ingin mengambil info terbaru dari Health Connect.

  /**
   * TODO: Obtains a Changes token for the specified record types.
   */
  suspend fun getChangesToken(): String {
    return healthConnectClient.getChangesToken(
      ChangesTokenRequest(
        setOf(
          ExerciseSessionRecord::class,
          StepsRecord::class,
          TotalCaloriesBurnedRecord::class,
          HeartRateRecord::class,
          WeightRecord::class
        )
      )
    )
  }

Update data dengan token Perubahan

Jika Anda ingin mendapatkan perubahan sejak terakhir kali aplikasi Anda disinkronkan dengan Health Connect, gunakan token Perubahan yang Anda peroleh sebelumnya dan kirim panggilan getChanges dengan token. ChangesResponse menampilkan daftar perubahan yang diamati dari Health Connect seperti UpsertionChange dan DeletionChange.

  /**
   * TODO: Retrieve changes from a Changes token.
   */
  suspend fun getChanges(token: String): Flow<ChangesMessage> = flow {
    var nextChangesToken = token
    do {
      val response = healthConnectClient.getChanges(nextChangesToken)
      if (response.changesTokenExpired) {
        throw IOException("Changes token has expired")
      }
      emit(ChangesMessage.ChangeList(response.changes))
      nextChangesToken = response.nextChangesToken
    } while (response.hasMore)
    emit(ChangesMessage.NoMoreChanges(nextChangesToken))
  }

Sekarang, mari kita jalankan aplikasi dan buka layar Perubahan. Pertama, aktifkan Lacak perubahan untuk mendapatkan token Perubahan. Kemudian masukkan sesi latihan atau berat dari Toolbox atau dari aplikasi Codelab. Kembali ke layar Perubahan, lalu pilih Dapatkan perubahan baru. Anda akan melihat perubahan pembaruan sekarang.

f3aded8ae5487e9c.png 437d69e3e000ce81.png

8. Data gabungan

Health Connect juga menyediakan data gabungan melalui API gabungan. Contoh berikut menunjukkan cara mendapatkan data kumulatif dan statistik dari Health Connect.

Gunakan healthConnectClient.aggregate untuk mengirim AggregateRequest. Dalam permintaan gabungan, tentukan kumpulan metrik gabungan dan rentang waktu yang ingin Anda dapatkan. Misalnya, ExerciseSessionRecord.EXERCISE_DURATION_TOTAL dan StepsRecord.COUNT_TOTAL menyediakan data kumulatif, sedangkan WeightRecord.WEIGHT_AVG, HeartRateRecord.BPM_MAX, dan HeartRateRecord.BPM_MIN memberikan data statistik.

    /**
     * TODO: Returns the weekly average of [WeightRecord]s.
     */
    suspend fun computeWeeklyAverage(start: Instant, end: Instant): Mass? {
        val request = AggregateRequest(
            metrics = setOf(WeightRecord.WEIGHT_AVG),
            timeRangeFilter = TimeRangeFilter.between(start, end)
        )
        val response = healthConnectClient.aggregate(request)
        return response[WeightRecord.WEIGHT_AVG]
    }

Contoh ini menunjukkan cara mendapatkan data agregasi terkait untuk sesi latihan tertentu. Pertama, baca data menggunakan healthConnectClient.readRecord dengan uid. Kemudian, gunakan startTime dan endTime sesi latihan sebagai rentang waktu dan dataOrigin sebagai filter untuk membaca agregasi terkait.

  /**
   * TODO: Reads aggregated data and raw data for selected data types, for a given [ExerciseSessionRecord].
   */
  suspend fun readAssociatedSessionData(
      uid: String,
  ): ExerciseSessionData {
    val exerciseSession = healthConnectClient.readRecord(ExerciseSessionRecord::class, uid)
    // Use the start time and end time from the session, for reading raw and aggregate data.
    val timeRangeFilter = TimeRangeFilter.between(
      startTime = exerciseSession.record.startTime,
      endTime = exerciseSession.record.endTime
    )
    val aggregateDataTypes = setOf(
      ExerciseSessionRecord.EXERCISE_DURATION_TOTAL,
      StepsRecord.COUNT_TOTAL,
      TotalCaloriesBurnedRecord.ENERGY_TOTAL,
      HeartRateRecord.BPM_AVG,
      HeartRateRecord.BPM_MAX,
      HeartRateRecord.BPM_MIN,
    )
    // Limit the data read to just the application that wrote the session. This may or may not
    // be desirable depending on the use case: In some cases, it may be useful to combine with
    // data written by other apps.
    val dataOriginFilter = setOf(exerciseSession.record.metadata.dataOrigin)
    val aggregateRequest = AggregateRequest(
      metrics = aggregateDataTypes,
      timeRangeFilter = timeRangeFilter,
      dataOriginFilter = dataOriginFilter
    )
    val aggregateData = healthConnectClient.aggregate(aggregateRequest)
    val heartRateData = readData<HeartRateRecord>(timeRangeFilter, dataOriginFilter)

    return ExerciseSessionData(
      uid = uid,
      totalActiveTime = aggregateData[ExerciseSessionRecord.EXERCISE_DURATION_TOTAL],
      totalSteps = aggregateData[StepsRecord.COUNT_TOTAL],
      totalEnergyBurned = aggregateData[TotalCaloriesBurnedRecord.ENERGY_TOTAL],
      minHeartRate = aggregateData[HeartRateRecord.BPM_MIN],
      maxHeartRate = aggregateData[HeartRateRecord.BPM_MAX],
      avgHeartRate = aggregateData[HeartRateRecord.BPM_AVG],
      heartRateSeries = heartRateData,
    )
  }

Sekarang, mari kita jalankan aplikasi dan periksa apakah Anda dapat melihat berat rata-rata di layar Catat berat. Anda juga dapat melihat data terperinci sesi latihan dengan membuka layar Sesi latihan dan memilih salah satu catatan sesi latihan.

af1fe646159d6a60.png

9. Selamat

Selamat, Anda berhasil membuat aplikasi kesehatan dan kebugaran terintegrasi Health Connect pertama Anda.

Aplikasi dapat mendeklarasikan izin dan meminta izin pengguna pada jenis data yang digunakan dalam aplikasi. Aplikasi ini juga dapat membaca dan menulis data dari penyimpanan data Health Connect. Anda juga telah mempelajari cara menggunakan Toolbox Health Connect untuk mendukung pengembangan aplikasi Anda dengan membuat data tiruan di penyimpanan data Health Connect.

Anda sekarang tahu langkah-langkah utama yang diperlukan untuk menjadikan aplikasi kesehatan dan kebugaran Anda sebagai bagian dari ekosistem Health Connect.

Bacaan lebih lanjut