Bu rehberde, Health Connect'te veri yazma veya güncelleme süreci ele alınmaktadır.
Veri yapısını ayarlama
Veri yazmadan önce kayıtları oluşturmamız gerekir. 50'den fazla veri türü için her birinin kendi yapısı vardır. Kullanılabilen veri türleri hakkında daha fazla ayrıntı için Jetpack referansına bakın.
Temel kayıtlar
Health Connect'teki Steps veri türü, bir kullanıcının okumalar arasında kaç adım gerçekleştirdiği bilgisini yakalar. Adım sayıları sağlık, fitness ve sağlıklı yaşam platformlarında yaygın olarak kullanılan bir ölçümü temsil eder.
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çü birimleriyle kayıt yapar
Health Connect, doğruluk sağlamak için değerleri ölçüm birimleriyle birlikte depolayabilir. Buna örnek olarak, çok büyük ve kapsamlı olan Nutrition veri türü verilebilir. Toplam karbonhidrattan vitaminlere kadar çok çeşitli, isteğe bağlı besin alanlarını içerir. Her veri noktası, bir yemek veya gıdanın parçası olarak potansiyel olarak tüketilen besinleri temsil eder.
Bu veri türünde, tüm besin maddeleri Mass
, energy
ise Energy
birimi cinsinden temsil edilir.
Aşağıdaki örnekte, muz yiyen bir kullanıcı için beslenme 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 verileriyle kayıtlar
Health Connect, seri verilerinin listesini saklayabilir. Bu türlerden biri, okumalar 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'teki yaygın iş akışlarından biri veri yazmadır. Kayıt eklemek için insertRecords
kodunu kullanın.
Aşağıdaki örnekte, adım sayısı ekleyerek nasıl veri 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 gerekiyorsa, özellikle de uygulama veri deponuzu Health Connect'ten alınan 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 önce Metadata
sınıfını incelemek gerekir. Oluşturulduğunda Health Connect'teki her Record
bir metadata
alanı içerir. Aşağıdaki özellikler senkronizasyonla ilgilidir:
Kod | Açıklama |
---|---|
id
|
Health Connect'teki her Record benzersiz bir id değerine sahiptir.Health Connect, yeni bir kayıt eklerken bunu otomatik olarak doldurur. |
lastModifiedTime
|
Her Record , kaydın en son değiştirildiği tarihi de izler.Health Connect bu bilgiyi otomatik olarak doldurur. |
clientRecordId
|
Her Record , uygulama veri deponuzda referans olarak kullanılmak üzere kendisiyle ilişkilendirilmiş benzersiz bir kimliğe sahip olabilir.
Uygulamanız bu değeri sağlar. |
clientRecordVersion
|
Bir kaydın clientRecordId değeri olduğunda clientRecordVersion , verilerin uygulama veri deponuzdaki sürümle senkronize kalmasını sağlamak için kullanılabilir.Uygulamanız bu değeri sağlar. |
Kayıt kimliği üzerinden güncelleme
Verileri güncellemek için önce gerekli kayıtları hazırlayın. Gerekirse kayıtlarda
değişiklik yapın. Ardından, değişiklikleri yapmak için updateRecords
numaralı telefonu arayın.
Aşağıdaki örnekte verilerin nasıl güncelleneceği gösterilmektedir. Bu amaçla her kaydın alt bölge ofseti değerleri PST'ye ayarlanı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 Kayıt Kimliği aracılığıyla Upsert (İstemci Kaydı Kimliği) yükseltme
İsteğe bağlı İstemci Kaydı Kimliği ve İstemci Kaydı Sürümü değerlerini kullanıyorsanız updateRecords
yerine insertRecords
kullanmanızı öneririz.
insertRecords
işlevi, verileri güncelleyebilir.
Veriler Health Connect'te belirtilen İstemci Kayıt Kimliği grubuna göre mevcutsa verilerin üzerine yazılır. Aksi takdirde, yeni veriler olarak yazılır.
Bu senaryo, uygulama veri deponuzdaki verileri Health Connect ile senkronize etmeniz gerektiğinde kullanmak için uygundur.
Aşağıdaki örnekte, uygulama veri deposundan çekilen veriler üzerinde nasıl üst işlem gerçekleştirileceği 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 yukarı işlem gerçekleşir. Aksi takdirde işlem, değişikliği yok sayar ve değer aynı kalır.
Verilerinize sürüm oluşturmayı dahil etmek için Metadata.clientRecordVersion
sürümüne, sürüm oluşturma mantığınıza göre bir Long
değeri sağlamanız gerekir.
val sr = StepsRecord(
count = count,
startTime = startTime,
startZoneOffset = startZoneOffset,
endTime = endTime,
endZoneOffset = endZoneOffset,
metadata = Metadata(
clientRecordId = cid,
clientRecordVersion = version
)
)
Upser'lar değişiklik olduğunda version
değerini otomatik olarak artırmaz ve bu sayede verilerin üzerine yazılması gibi beklenmedik durumlar önlenir. Bununla birlikte, ona manuel olarak
daha yüksek bir değer sağlamanız gerekir.
En iyi uygulamalar
Mantığı oluşturduktan sonra, veri yazarken veya güncellerken en iyi uygulamaları takip edebilirsiniz.