Verileri yazma

Bu kılavuz, Health Connect'te veri yazma veya güncelleme işlemlerini kapsar.

Veri yapısını ayarlayın

Verileri yazmadan önce kayıtları oluşturmamız gerekir. 50'den fazla veri türünün her biri kendi yapısına sahiptir. Kullanılabilir veri türleri hakkında daha fazla ayrıntı için Jetpack referansına bakın.

Temel kayıtlar

Health Connect'teki Adımlar 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 yaygın olarak kullanılan bir ölçümdür.

Aşağıdaki örnekte adım sayısı verilerinin nasıl ayarlanacağı gösterilmektedir:

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

Ölçü birimleri içeren kayıtlar

Health Connect, doğruluk sağlamak için değerleri ölçü birimleriyle birlikte depolayabilir. Örneğin, geniş ve kapsamlı Beslenme veri türü. Toplam karbonhidrattan vitaminlere kadar çeşitlilik gösteren, isteğe bağlı çok çeşitli besin alanları içerir. Her veri noktası, bir öğün veya gıda öğesinin parçası olarak tüketilmiş olabilecek besin maddelerini temsil eder.

Bu veri türünde, tüm besinler Mass birimleriyle temsil edilirken energy, Energy birimi cinsinden temsil edilir.

Aşağıdaki örnekte, muz yiyen bir kullanıcı için besin verilerinin nasıl ayarlanacağı gösterilmektedir:

val banana = NutritionRecord(
    name = "banana",
    energy = 105.0.kilocalories,
    dietaryFiber = 3.1.grams,
    potassium = 0.422.grams,
    totalCarbohydrate = 27.0.grams,
    totalFat = 0.4.grams,
    saturatedFat = 0.1.grams,
    sodium = 0.001.grams,
    sugar = 14.0.grams,
    vitaminB6 = 0.0005.grams,
    vitaminC = 0.0103.grams,
    startTime = START_TIME,
    endTime = END_TIME,
    startZoneOffset = START_ZONE_OFFSET,
    endZoneOffset = END_ZONE_OFFSET
)

Seri verileri içeren kayıtlar

Health Connect, seri verilerinin listesini depolayabilir. Bunun bir örneği, ölçümler arasında algılanan bir dizi kalp atışı örneğini yakalayan Nabız veri türüdür.

Bu veri türünde samples parametresi, Nabız örnekleri listesiyle temsil edilir. Her örnek bir beatsPerMinute değeri ve bir time değeri içerir.

Aşağıdaki örnekte, nabız serisi verilerinin nasıl ayarlanacağı gösterilmektedir:

val heartRateRecord = HeartRateRecord(
    startTime = START_TIME,
    startZoneOffset = START_ZONE_OFFSET,
    endTime = END_TIME,
    endZoneOffset = END_ZONE_OFFSET,
    // records 10 arbitrary data, to replace with actual data
    samples = List(10) { index ->
        HeartRateRecord.Sample(
            time = START_TIME + Duration.ofSeconds(index.toLong()),
            beatsPerMinute = 100 + index.toLong(),
        )
    }
)

Verileri yazma

Health Connect'te en sık kullanılan iş akışlarından biri veri yazmaktır. Kayıt eklemek için insertRecords kullanın.

Aşağıdaki örnekte, veri ekleyerek adım sayılarının nasıl yazılacağı gösterilmektedir:

suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
    try {
        val stepsRecord = StepsRecord(
            count = 120,
            startTime = START_TIME,
            endTime = END_TIME,
            startZoneOffset = START_ZONE_OFFSET,
            endZoneOffset = END_ZONE_OFFSET
        )
        healthConnectClient.insertRecords(listOf(stepsRecord))
    } catch (e: Exception) {
        // Run error handling here
    }
}

Verileri güncelle

Bir veya daha fazla kaydı değiştirmeniz, özellikle de uygulama veri deponuzu Health Connect'teki verilerle senkronize etmeniz gerektiğinde verilerinizi güncelleyebilirsiniz. Mevcut verileri güncellemenin iki yolu vardır. Bu yöntem, kayıtları bulmak için kullanılan tanımlayıcıya bağlıdır.

Meta veri

Verileri güncellerken gerekli olduğu için ilk olarak Metadata sınıfını incelemeniz önerilir. Health Connect'te, oluşturulan her Record için bir metadata alanı bulunur. Aşağıdaki özellikler senkronizasyonla ilgilidir:

Kod Açıklama
id Health Connect'teki her Record öğesi benzersiz bir id değerine sahiptir.
Health Connect yeni bir kayıt eklerken bunu otomatik olarak doldurur.
lastModifiedTime Her Record, kaydın en son ne zaman değiştirildiğini de takip eder.
Health Connect bunu otomatik olarak doldurur.
clientRecordId Her Record, uygulama veri deponuzda referans olarak kullanılmak için kendisiyle ilişkilendirilmiş benzersiz bir kimliğe sahip olabilir.
Uygulamanız bu değeri sağlıyor.
clientRecordVersion Bir kayıtta clientRecordId bulunuyorsa clientRecordVersion, verilerin uygulama veri deponuzdaki sürümle senkronize olmasını sağlamak için kullanılabilir.
Uygulamanız bu değeri sağlıyor.

Kayıt Kimliği aracılığıyla güncelleme

Verileri güncellemek için öncelikle gerekli kayıtları hazırlayın. Gerekirse kayıtlarda değişiklik yapın. Ardından, değişiklikleri yapmak için updateRecords adlı kuruluşu arayın.

Aşağıdaki örnekte verilerin nasıl güncelleneceği gösterilmektedir. Bu amaçla, her kaydın alt bölge ofset değerleri PST olarak ayarlanmıştır.

suspend fun updateSteps(
    healthConnectClient: HealthConnectClient,
    prevRecordStartTime: Instant,
    prevRecordEndTime: Instant
) {
    try {
        val request = healthConnectClient.readRecords(
            ReadRecordsRequest(
                recordType = StepsRecord::class,
                timeRangeFilter = TimeRangeFilter.between(
                    prevRecordStartTime,
                    prevRecordEndTime
                )
            )
        )

        val newStepsRecords = arrayListOf<StepsRecord>()
        for (record in request.records) {
            // Adjusted both offset values to reflect changes
            val sr = StepsRecord(
                count = record.count,
                startTime = record.startTime,
                startZoneOffset = record.startTime.atZone(ZoneId.of("PST")).offset,
                endTime = record.endTime,
                endZoneOffset = record.endTime.atZone(ZoneId.of("PST")).offset,
                metadata = record.metadata
            )
            newStepsRecords.add(sr)
        }

        client.updateRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

İstemci Kaydı Kimliği aracılığıyla güncelleme

İsteğe bağlı İstemci Kaydı Kimliği ve İstemci Kaydı Sürümü değerlerini kullanıyorsanız updateRecords yerine insertRecords değerini kullanmanızı öneririz.

insertRecords işlevi, verileri yükseltebilir. Health Connect'te belirtilen istemci kaydı kimliği grubuna göre veriler varsa bunların üzerine yazılır. Aksi takdirde, yeni veri olarak yazılır. Bu senaryo, uygulama veri mağazanızdaki verileri Health Connect ile senkronize etmeniz gerektiğinde yararlıdır.

Aşağıdaki örnekte, uygulama veri deposundan alınan veriler üzerinde bir güncellemenin nasıl yapılacağı gösterilmektedir:

suspend fun pullStepsFromDatastore() : ArrayList<StepsRecord> {
    val appStepsRecords = arrayListOf<StepsRecord>()
    // Pull data from app datastore
    // ...
    // Make changes to data if necessary
    // ...
    // Store data in appStepsRecords
    // ...
    var sr = StepsRecord(
        // Assign parameters for this record
        metadata = Metadata(
            clientRecordId = cid
        )
    )
    appStepsRecords.add(sr)
    // ...
    return appStepsRecords
}

suspend fun upsertSteps(
    healthConnectClient: HealthConnectClient,
    newStepsRecords: ArrayList<StepsRecord>
) {
    try {
        healthConnectClient.insertRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

Bundan sonra, bu işlevleri ana iş parçacığınızda çağırabilirsiniz.

upsertSteps(healthConnectClient, pullStepsFromDatastore())

İstemci Kaydı Sürümünde değer kontrolü

Verileri yükseltme işleminiz İstemci Kaydı Sürümü'nü içeriyorsa Health Connect, clientRecordVersion değerlerinde karşılaştırma kontrolleri gerçekleştirir. Eklenen verilerdeki sürüm, mevcut verilerdeki sürümden yüksekse güncelleme gerçekleşir. Aksi takdirde, işlem değişikliği yoksayar ve değer aynı kalır.

Verilerinize sürüm oluşturmayı dahil etmek için sürüm oluşturma mantığınıza göre bir Long değeri Metadata.clientRecordVersion ile sağlamanız gerekir.

val sr = StepsRecord(
    count = count,
    startTime = startTime,
    startZoneOffset = startZoneOffset,
    endTime = endTime,
    endZoneOffset = endZoneOffset,
    metadata = Metadata(
        clientRecordId = cid,
        clientRecordVersion = version
    )
)

Değişiklikler olduğunda version değerini otomatik olarak artırmaz. Böylece, verilerin beklenmedik şekilde üzerine yazılması önlenir. Bu durumda manuel olarak daha yüksek bir değer sağlamanız gerekir.

Veri yazmaya yönelik en iyi uygulamalar

Uygulamalar yalnızca kendi kaynaklı verileri Health Connect'e yazmalıdır.

Uygulamanızdaki veriler başka bir uygulamadan içe aktarıldıysa kendi verilerini Health Connect'e yazma sorumluluğu diğer uygulamaya geçer.

Verilerin sınırların dışında olması veya dahili sistem hatası gibi yazma istisnalarını işleyen bir mantık uygulamak da iyi bir fikirdir. Geri yükleme ve yeniden deneme stratejilerinizi bir iş planlama mekanizmasına uygulayabilirsiniz. Health Connect'e yazma işlemi sonuçta başarısız olursa uygulamanızın bu dışa aktarma noktasını geçebileceğinden emin olun. Teşhise yardımcı olması için hataları günlüğe kaydetmeyi ve bildirmeyi unutmayın.

Verileri izlerken, uygulamanızın veri yazma şekline bağlı olarak uygulayabileceğiniz birkaç öneri vardır.

Pasif izleme

Buna, arka planda sürekli olarak adım kaydetme veya nabız kaydetme gibi pasif fitness veya sağlık takibi yapan uygulamalar da dahildir.

Uygulamanızın aşağıdaki şekillerde Health Connect'e düzenli aralıklarla veri yazması gerekir:

  • Her senkronizasyonda, yalnızca son senkronizasyondan sonra değiştirilen yeni ve güncellenmiş verileri yazın.
  • Yazma isteği başına en fazla 1.000 kayıt için yığın isteği gönderebilirsiniz.
  • En az 15 dakikalık bir süre boyunca düzenli arka plan görevleri planlamak için WorkManager kullanın.
  • Görevleri yalnızca cihaz boştayken ve pil seviyesi düşük olduğunda çalışacak şekilde kısıtlayın.

    val constraints = Constraints.Builder()
        .requiresBatteryNotLow()
        .requiresDeviceIdle(true)
        .build()
    
    val writeDataWork = PeriodicWorkRequestBuilder<WriteDataToHealthConnectWorker>(
            15,
            TimeUnit.MINUTES,
            5,
            TimeUnit.MINUTES
        )
        .setConstraints(constraints)
        .build()
    

Etkin izleme

Buna, egzersiz ve uyku gibi etkinliğe dayalı izleme veya beslenme gibi manuel kullanıcı girişleri yapan uygulamalar da dahildir. Bu kayıtlar, uygulama ön plandayken veya gün içinde birkaç kez kullanıldığı nadir durumlarda oluşturulur.

Uygulamanızın, Health Connect'i etkinlik süresince çalışır durumda tutmadığından emin olun.

Veriler, Health Connect'e şu iki yöntemden biriyle yazılmalıdır:

  • Etkinlik tamamlandıktan sonra verileri Health Connect ile senkronize edin. Örneğin, kullanıcı izlenen bir egzersiz oturumunu sonlandırdığında verileri senkronize edin.
  • Verileri daha sonra senkronize etmek için WorkManager aracını kullanarak tek seferlik bir görev planlayın.

Yazma işlemlerinin ayrıntı düzeyi ve sıklığı için en iyi uygulamalar

Health Connect'e veri yazarken uygun çözünürlükleri kullanın. Uygun çözünürlüğün kullanılması, tutarlı ve doğru verileri korurken depolama alanı yükünün azaltılmasına yardımcı olur. Veri çözünürlüğü iki şeyi kapsar:

  1. Yazma sıklığı: Uygulamanızın yeni verileri Health Connect'e aktarma sıklığıdır. Örneğin, her 15 dakikada bir yeni veriler yazın.
  2. Yazılı verilerin ayrıntı düzeyi: Aktarılan verilerin ne sıklıkta örneklendiği. Örneğin, 5 saniyede bir nabız örnekleri yazın. Her veri türü için aynı örnek hızı gerekmez. Adım sayısı verilerini her saniye güncellemek, daha seyrek aralıklarla (ör. 60 saniyede bir) güncellenmek yerine çok az avantaj sağlar. Ancak daha yüksek örnek hızları, kullanıcılara sağlık ve fitness verilerine daha ayrıntılı ve ayrıntılı bir bakış sunabilir. Örnek hızı frekansları ayrıntılar ile performans arasında bir denge kurmalıdır.

Gün boyunca izlenen verileri yazın

Uygulamanız, adımlar gibi sürekli olarak toplanan veriler için gün boyunca en az 15 dakikada bir Health Connect'e yazmalıdır.

Veri türü

Birim

Beklenen

Örnek

Adımlar

adım

Dakikada bir

23:14 - 23:15 - 5 adım

23:16 - 23:17 - 22 adım

23:17 - 23:18 - 8 adım

StepCadence

adım/dk.

Dakikada bir

23:14 - 23:15 - 17:00

23:16 - 23:17 - 22:00

23:17 - 23:18 - 20:00

Tekerlekli sandalye şınavları

iter

Dakikada bir

23:14 - 23:15 - 5 itme

23:16 - 23:17 - 22 itme

23:17 - 23:18 - 8 itme

Yakılan ActiveCalories

Kalori

15 dakikada bir

23:15 - 23:30 - 2 Kalori

23:30 - 23:45 - 25 Kalori

23:45 - 00:00 - 5 Kalori

Yakılan Toplam Kalori

kcal

15 dakikada bir

23:15 - 23:30 - 16 kcal

23:30 - 23:45 - 16 kcal

23:45 - 00:00 - 16 kcal

Mesafe

km/dk.

Dakikada bir

23:14-23:15 - 0,008 km

23:16 - 23:16 - 0,021 km

23:17 - 23:18 - 0,012 km

Çıkılan Tırmanma

dk.

Dakikada bir

20:36 - 20:37 - 3,048 m

20:39 - 20:40 - 3,048 m

23:23 - 23:24 - 9,144m

Çıkılan Katlar

kat

Dakikada bir

23:14 - 23:15 - 5 kat

23:16 - 23:16 - 22 kat

23:17 - 23:18 - 8 kat

Kalp Hızı

nabız/dk.

Dakikada bir

06:11 - 55 nabız/dk

Kalp HızıDeğişkenlikRmssd

ms.

Dakikada bir

06:11 - 23 ms

Solunum Hızı

nefes/dakika

Dakikada bir

23:14 - 23:15 - 60 nefes/dakika

23:16 - 23:16 - 62 nefes/dakika

23:17 - 23:18 - 64 nefes/dakika

Oksijen Doygunluğu

%

Saatte bir

%6:11 - 95,208

Oturumları yaz

Veriler, antrenman veya uyku seansının sonunda Health Connect'e yazılmalıdır.

En iyi uygulama olarak, tüm uyku seansları veya egzersiz oturumları kayıt cihazıyla ve RecordingMethod dahil olmak üzere uygun meta verilerle yazılmalıdır.

Başvurunuz en azından, aşağıdaki "beklenenler" sütununda yer alan yönergeleri izlemelidir. Mümkün olduğunda "en iyi" kılavuzu takip edin.

Egzersiz sırasında izlenen veriler

Veri türü

Birim

Beklenen

Saygılarımızla,

Örnek

Adımlar

adım

Dakikada bir

Saniyede bir

23:14-23:15: 5 adım

23:16 - 23:17 - 22 adım

23:17 - 23:18 - 8 adım

StepCadence

adım/dk.

Dakikada bir

Saniyede bir

23:14-23:15 - 35:00

23:16 - 23:17 - 37:00

23:17 - 23:18 - 40 öğe

Tekerlekli sandalye şınavları

iter

Dakikada bir

Saniyede bir

23:14-23:15 - 5 itme

23:16 - 23:17 - 22 itme

23:17 - 23:18 - 8 itme

Bisiklet Pedalası

nefes/dk.

Dakikada bir

Saniyede bir

23:14-23:15 - 65 nefes/dk.

23:16 - 23:17 - 70 nefes/dk

23:17 - 23:18 - 68 nefes/dk

Güç

vat

Dakikada bir

Saniyede bir

23:14-23:15 - 250 vat

23:16 - 23:17 - 255 vat

23:17 - 23:18 - 245 vat

Hız

km/dk.

Dakikada bir

Saniyede bir

23:14-23:15 - 0,3 km/dk

23:16 - 23:17 - 0,4 km/dk

23:17 - 23:18 -0,4 km/dk

Mesafe

km/dk

Dakikada bir

Saniyede bir

23:14-23:15 - 0,008 km

23:16 - 23:16 - 0,021 km

23:17 - 23:18 - 0,012 km

Yakılan ActiveCalories

kcal

Dakikada bir

Saniyede bir

23:14-23:15 - 20 kcal

23:16 - 23:17 - 20 kcal

23:17 - 23:18 - 25 kcal

Yakılan Toplam Kalori

kcal

Dakikada bir

Saniyede bir

23:14-23:15 - 36 kcal

23:16 - 23:17 - 36 kcal

23:17 - 23:18 - 41 kcal

Çıkılan Tırmanma

dk.

Dakikada bir

Saniyede bir

20:36 - 20:37 - 3,048 m

20:39 - 20:40 - 3,048 m

23:23 - 23:24 - 9,144m

Egzersiz Rotaları

Enl/Boyl

3-5 saniyede bir

Saniyede bir

Kalp Hızı

nabız/dk.

Dakikada bir

Saniyede bir

23:14-23:15 - 150 nabız/dk

23:16 - 23:17 - 152 nabız/dk

23:17 - 23:18 - 155 nabız/dk

Uyku sırasında izlenen veriler

Veri türü

Birim

Beklenen örnek sayısı

Örnek

Uyku Aşaması

sahne

Uyku aşaması başına ayrıntılı süre

23:46 - 23:50 - uyanık

23:50 - 23:56 - Hafif uyku

23:56 - 00:16 - derin uyku

Dinlenirken Kalp Hızı

nabız/dk.

Tek günlük değer (sabahları ilk iş olarak beklenen)

06:11 - 60 nabız/dk

Oksijen Doygunluğu

%

Tek günlük değer (sabahları ilk iş olarak beklenen)

%6:11 - 95,208