Health Connect'i kullanmaya başlama

Bu kılavuz, Health Connect 1.1.0-alpha12 sürümüyle uyumludur.

Bu kılavuzda, Health Connect'i uygulamanızda nasıl kullanmaya başlayabileceğiniz gösterilmektedir.

1. adım: Health Connect uygulamasını hazırlayın

Uygulamanızın Health Connect SDK'sı aracılığıyla gönderdiği tüm isteklerin işlenmesi Health Connect uygulamasından sorumludur. Bu istekler arasında verilerin depolanması ve okuma ve yazma erişiminin yönetilmesi yer alır.

Health Connect'e erişim, telefona yüklenen Android sürümüne bağlıdır. Aşağıdaki bölümlerde, Android'in son sürümlerinin nasıl kullanılacağı açıklanmaktadır.

Android 14

Android 14'ten (API düzeyi 34) itibaren Health Connect, Android Framework'in bir parçasıdır. Health Connect'in bu sürümü bir çerçeve modülüdür. Bununla birlikte, herhangi bir kurulum yapmanız gerekmez.

Android 13 ve önceki sürümler

Android 13 (API düzeyi 33) ve önceki sürümlerde Health Connect, Android Framework'in bir parçası değildir. Bunun için Google Play Store'dan Health Connect uygulamasını yüklemeniz gerekir.

Uygulamanızı Android 13 ve önceki sürümlerde Health Connect ile entegre ettiyseniz ve Android 14'e taşımak istiyorsanız Android 13'ten 14'e geçiş başlıklı makaleyi inceleyin.

Health Connect uygulamasını açma

Health Connect artık varsayılan olarak ana ekranda görünmez. Health Connect'i açmak için Ayarlar > Uygulamalar > Health Connect'e gidin veya Health Connect'i Hızlı Ayarlar menünüze ekleyin.

Ayrıca Health Connect, cihaz kilitliyken Health Connect'te depolanan sağlık verilerinin kötü amaçlı kişilerden korunması için kullanıcının PIN, desen veya şifreyle ekran kilidini etkinleştirmesini zorunlu kılar. Ekran kilidi ayarlamak için Ayarlar > Güvenlik > Ekran kilidi'ne gidin.

2. Adım: Health Connect SDK'sını uygulamanıza ekleyin

Health Connect SDK'sı, Health Connect uygulamasındaki veri deposunda işlem gerçekleştirirken istek göndermek için Health Connect API'yi kullanmaktan sorumludur.

Modül düzeyindeki build.gradle dosyanıza Health Connect SDK'sı bağımlılığını ekleyin:

dependencies {
  ...
  implementation "androidx.health.connect:connect-client:1.1.0-rc02"
  ...
}

En son sürüm için Health Connect sürümlerine bakın.

3. Adım: Uygulamanızı yapılandırın

Aşağıdaki bölümlerde, uygulamanızı Health Connect ile entegre edecek şekilde nasıl yapılandıracağınız açıklanmaktadır.

İzinleri beyan etme

Sağlık ve fitness verilerine erişim hassastır. Health Connect, okuma ve yazma işlemleri için bir güvenlik katmanı uygulayarak kullanıcı güvenini korur.

Uygulamanızda, gerekli veri türlerine göre AndroidManifest.xml dosyasında okuma ve yazma izinlerini beyan edin. Bu izinler, Play Console'da erişim beyan ettiğiniz izinlerle eşleşmelidir.

Health Connect, standart Android izin beyan biçimini kullanır. <uses-permission> etiketleriyle izin atama Bunları <manifest> etiketlerinin içine yerleştirin.

<manifest>
  <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"/>

  <application>
  ...
  </application>
</manifest>

İzinlerin ve karşılık gelen veri türlerinin tam listesi için Veri türleri listesi başlıklı makaleyi inceleyin.

Uygulamanızın gizlilik politikası iletişim kutusunu gösterme

Android manifest dosyanızda, uygulamanızın gizlilik politikasını gösteren bir Etkinlik bulunmalıdır. Bu gizlilik politikası, uygulamanızın istenen izinler için gerekçesi olup kullanıcı verilerinin nasıl kullanıldığını ve işlendiğini açıklar.

Kullanıcı Health Connect izinleri ekranındaki gizlilik politikası bağlantısını tıkladığında uygulamaya gönderilen ACTION_SHOW_PERMISSIONS_RATIONALE intent'ini işlemek için bu etkinliği tanımlayın.

...
<application>
  ...
  <!-- For supported versions through Android 13, create an activity to show the rationale
       of Health Connect permissions once users click the privacy policy link. -->
  <activity
      android:name=".PermissionsRationaleActivity"
      android:exported="true">
    <intent-filter>
      <action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
    </intent-filter>
  </activity>

  <!-- For versions starting Android 14, create an activity alias to show the rationale
       of Health Connect permissions once users click the privacy policy link. -->
  <activity-alias
      android:name="ViewPermissionUsageActivity"
      android:exported="true"
      android:targetActivity=".PermissionsRationaleActivity"
      android:permission="android.permission.START_VIEW_PERMISSION_USAGE">
    <intent-filter>
      <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
      <category android:name="android.intent.category.HEALTH_PERMISSIONS" />
    </intent-filter>
  </activity-alias>
  ...
</application>
...

Health Connect istemcisi edinme

HealthConnectClient, Health Connect API'ye giriş noktasıdır. Uygulamanın Health Connect uygulamasındaki veri deposunu kullanmasına olanak tanır. Alttaki depolama katmanıyla olan bağlantısını otomatik olarak yönetir ve giden isteklerin ve gelen yanıtların tüm IPC ve serileştirme işlemlerini gerçekleştirir.

İstemci örneği almak için önce Android manifest dosyanızda Health Connect paket adını beyan edin.

<application> ... </application>
...
<!-- Check if Health Connect is installed -->
<queries>
    <package android:name="com.google.android.apps.healthdata" />
</queries>

Ardından Etkinlik'te getSdkStatus simgesini kullanarak Health Connect'in yüklü olup olmadığını kontrol edin. Öyleyse bir HealthConnectClient örneği edinin.

val availabilityStatus = HealthConnectClient.getSdkStatus(context, providerPackageName)
if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE) {
  return // early return as there is no viable integration
}
if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED) {
  // Optionally redirect to package installer to find a provider, for example:
  val uriString = "market://details?id=$providerPackageName&url=healthconnect%3A%2F%2Fonboarding"
  context.startActivity(
    Intent(Intent.ACTION_VIEW).apply {
      setPackage("com.android.vending")
      data = Uri.parse(uriString)
      putExtra("overlay", true)
      putExtra("callerId", context.packageName)
    }
  )
  return
}
val healthConnectClient = HealthConnectClient.getOrCreate(context)
// Issue operations with healthConnectClient

4. Adım: Kullanıcıdan izin isteyin

Uygulamanızın, istemci örneği oluşturduktan sonra kullanıcıdan izin istemesi gerekir. Kullanıcıların diledikleri zaman izin vermesine veya reddetmesine izin verilmelidir.

Bunun için gerekli veri türleri için bir dizi izin oluşturun. Öncelikle, gruptaki izinlerin Android manifest dosyanızda tanımlandığından emin olun.

// Create a set of permissions for required data types
val PERMISSIONS =
    setOf(
  HealthPermission.getReadPermission(HeartRateRecord::class),
  HealthPermission.getWritePermission(HeartRateRecord::class),
  HealthPermission.getReadPermission(StepsRecord::class),
  HealthPermission.getWritePermission(StepsRecord::class)
)

Uygulamanıza gerekli izinlerin verilip verilmediğini görmek için getGrantedPermissions'u kullanın. Aksi takdirde bu izinleri istemek için createRequestPermissionResultContract değerini kullanın. Health Connect izinleri ekranı gösterilir.

// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()

val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
  if (granted.containsAll(PERMISSIONS)) {
    // Permissions successfully granted
  } else {
    // Lack of required permissions
  }
}

suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
  val granted = healthConnectClient.permissionController.getGrantedPermissions()
  if (granted.containsAll(PERMISSIONS)) {
    // Permissions already granted; proceed with inserting or reading data
  } else {
    requestPermissions.launch(PERMISSIONS)
  }
}

Kullanıcılar diledikleri zaman izin verebilir veya iptal edebilir. Bu nedenle, uygulamanızın izinleri düzenli olarak kontrol etmesi ve izinlerin kaybedildiği senaryoları ele alması gerekir.

5. adım: İşlemler gerçekleştirin

Artık her şey hazır olduğuna göre uygulamanızda okuma ve yazma işlemleri gerçekleştirin.

Verileri yazma

Verilerinizi bir kayıt halinde yapılandırın. Health Connect'te kullanılabilen veri türlerinin listesine göz atın.

val stepsRecord = StepsRecord(
    count = 120,
    startTime = START_TIME,
    endTime = END_TIME,
    startZoneOffset = START_ZONE_OFFSET,
    endZoneOffset = END_ZONE_OFFSET,
)

Ardından insertRecords simgesini kullanarak kaydınızı yazın.

suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
    val endTime = Instant.now()
    val startTime = endTime.minus(Duration.ofMinutes(15))
    try {
        val stepsRecord = StepsRecord(
            count = 120,
            startTime = startTime,
            endTime = endTime,
            startZoneOffset = ZoneOffset.UTC,
            endZoneOffset = ZoneOffset.UTC,
            metadata = Metadata.autoRecorded(
                device = Device(type = Device.TYPE_WATCH)
            ),
        )
        healthConnectClient.insertRecords(listOf(stepsRecord))
    } catch (e: Exception) {
        // Run error handling here
    }
}

Verileri okuma

readRecords'i kullanarak verilerinizi tek tek okuyabilirsiniz.

suspend fun readHeartRateByTimeRange(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.readRecords(
            ReadRecordsRequest(
                HeartRateRecord::class,
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        for (record in response.records) {
            // Process each record
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

aggregate'u kullanarak verilerinizi toplu olarak da okuyabilirsiniz.

suspend fun aggregateSteps(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.aggregate(
            AggregateRequest(
                metrics = setOf(StepsRecord.COUNT_TOTAL),
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        // The result may be null if no data is available in the time range
        val stepCount = response[StepsRecord.COUNT_TOTAL]
    } catch (e: Exception) {
        // Run error handling here
    }
}

Video eğiticileri

Health Connect özellikleri ve sorunsuz bir entegrasyon için en iyi uygulama yönergeleri hakkında daha fazla bilgi edinmek üzere aşağıdaki videoları izleyin:

Kaynaklar

Geliştirme sürecinde size yardımcı olacak aşağıdaki kaynaklara göz atın.

  • Health Connect SDK'sı (Jetpack'te kullanılabilir): Health Connect API'yi kullanmak için bu SDK'yı uygulamanıza ekleyin.
  • API referansı: Health Connect API için Jetpack referansına göz atın.
  • Veri türlerinin kullanımını beyan edin: Play Console'da, uygulamanızın okuduğu ve yazdığı Health Connect veri türlerine erişimi beyan edin.
  • İsteğe bağlı GitHub kod örneği ve kod laboratuvarı: Başlamanıza yardımcı olması için GitHub kod örneği deposuna ve kod laboratuvarı egzersizine bakın.

Sonraki adımlar

Health Connect'te aşağıdaki gibi işlemleri nasıl gerçekleştireceğinizi öğrenmek için Yaygın iş akışları başlıklı makaleyi inceleyin: