Health Connect ile entegre olan çoğu uygulamanın, doğru veri kaynağı işlevi gören kendi veri deposu vardır. Health Connect, uygulamanızı senkronize halde tutmanızı sağlayan yöntemler sunar.
Uygulamanızın aşağıdakileri yaptığından emin olun:
- Uygulamanızın veri deposundaki yeni veya güncellenmiş verileri Health Connect'e aktarır.
- Health Connect'ten veri değişikliklerini alır ve bu değişiklikleri uygulamanızın veri deposuna yansıtır.
- Uygulamanızın veri deposundan silindiğinde Health Connect'teki verileri siler.
Her durumda, senkronizasyon işleminin Health Connect ile uygulamanızın veri deposunun uyumlu olmasını sağladığından emin olun.
Health Connect'e feed verileri
Senkronizasyon işleminin ilk bölümü, uygulamanızın veri deposundan Health Connect veri deposuna veri aktarmaktır.
Verilerinizi hazırlama
Uygulamanızın veri deposundaki kayıtlar genellikle aşağıdaki ayrıntılara sahiptir:
UUID
gibi benzersiz bir anahtar.- Sürüm veya zaman damgası.
Uygulamanızın veri deposunu, Health Connect'e önceden aktarılan verileri takip edecek şekilde tasarlayın. Bunu başarmak için aşağıdaki mantığı uygulayın:
- Değişikliklerin listesini ve son jetonun yayınlanmasından bu yana güncellemeleri olan kayıtları almak için kullanılabilecek bir jeton sağlayın.
- Dışa aktarılan verilerin en son değiştirildiği zamanı izler.
Bu adımlar, Health Connect'e yalnızca yeni veya güncellenmiş verilerin aktarılmasını sağlamak için önemlidir.
Health Connect'e veri yazma
Health Connect'e veri aktarmak için aşağıdaki adımları uygulayın:
- Uygulamanızın veri deposundan yeni veya güncellenen girişlerin bir listesini alın.
- Her giriş için, söz konusu veri türüne uygun bir
Record
nesnesi oluşturun. Örneğin, ağırlıkla ilgili veriler için birWeightRecord
nesnesi oluşturun. Uygulamanızın veri deposundaki benzersiz anahtar ve sürüm ayrıntılarını kullanarak her bir
Record
için birMetadata
nesnesi belirtin. Verilerinizde sürüm belirtilmemişse alternatif olarak geçerli zaman damgasınınLong
değerini kullanabilirsiniz.val record = WeightRecord( metadata = Metadata( clientRecordId = "<Your record's Client ID>", clientRecordVersion = <Your record's version> ), weight = weight, time = time, zoneOffset = zoneOffset )
insertRecords
kullanarak verileri Health Connect'e ekleyin. Verileri yükseltme,clientRecordId
değerleri Health Connect veri deposunda bulunduğu veclientRecordVersion
değeri mevcut değerden yüksek olduğu sürece Health Connect'teki mevcut verilerin üzerine yazılacağı anlamına gelir. Aksi takdirde, yeni sürüme geçirilen veriler yeni veri olarak yazılır.healthConnectClient.insertRecords(arrayListOf(record))
Veri feed'iyle ilgili göz önünde bulundurulması gereken pratik hususlar hakkında bilgi edinmek için Veri yazma en iyi uygulamalarına göz atın.
Health Connect kimliklerini depola
Kayıtlarınızı Health Connect'e yükselttikten sonra uygulamanızın veri deposunun her kayıt için Health Connect id
deposunu depolaması gerekir. Böylece uygulamanız, verileri aldıktan sonra gelen her değişikliğin yeni bir kayıt oluşturmayı veya mevcut bir kaydı güncellemeyi gerektirip gerektirmediğini kontrol edebilir.
insertRecords
işlevi, id
değerlerinin listesini içeren bir InsertRecordsResponse
döndürür.
Yanıtı kullanarak kayıt kimliklerini alın ve saklayın.
val response = healthConnectClient.insertRecords(arrayListOf(record))
for (recordId in response.recordIdsList) {
// Store recordId to your app's datastore
}
Health Connect'ten veri alma
Senkronizasyon işleminin ikinci bölümü, Health Connect'teki herhangi bir veri değişikliklerini uygulamanızın veri deposuna çekmektir. Veri değişiklikleri, güncellemeleri ve silme işlemlerini içerebilir.
Değişiklik jetonu alma
Health Connect'ten alınacak değişikliklerin listesini almak için uygulamanızın Değişiklik jetonlarını takip etmesi gerekir. Hem veri değişiklikleri listesini hem de sonraki sefer kullanılacak yeni bir Değişiklikler jetonunu döndürecek şekilde Değişiklikler isteğinde bulunurken bunları kullanabilirsiniz.
Changes jetonu almak için getChangesToken
numaralı telefonu arayın ve gerekli veri türlerini sağlayın.
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
Veri değişikliklerini kontrol etme
Değişiklikler jetonu aldığınıza göre bu jetonu tüm Değişiklikleri almak için kullanabilirsiniz. Mevcut veri değişiklikleri olup olmadığını kontrol ettiği tüm Değişiklikleri uygulamak için bir döngü oluşturmanızı öneririz. Şu adımları uygulayın:
- Değişiklik listesini almak için jetonu kullanarak
getChanges
aracını çağırın. - Her bir değişikliği kontrol ederek değişiklik türünün
UpsertionChange
veyaDeletionChange
olup olmadığına bakın ve gerekli işlemleri gerçekleştirin.UpsertionChange
söz konusu olduğunda, verileri yeniden içe aktarmadığınızdan emin olmak için yalnızca arama uygulamasından gelmeyen değişiklikleri alın.
- Sonraki Değişiklikler jetonunu yeni jetonunuz olarak atayın.
- Hiçbir değişiklik kalmayana kadar 1-3 arasındaki adımları tekrarlayın.
- Bir sonraki jetonu saklayın ve gelecekteki bir içe aktarma işlemi için ayırın.
suspend fun processChanges(token: String): String {
var nextChangesToken = token
do {
val response = healthConnectClient.getChanges(nextChangesToken)
response.changes.forEach { change ->
when (change) {
is UpsertionChange ->
if (change.record.metadata.dataOrigin.packageName != context.packageName) {
processUpsertionChange(change)
}
is DeletionChange -> processDeletionChange(change)
}
}
nextChangesToken = response.nextChangesToken
} while (response.hasMore)
// Return and store the changes token for use next time.
return nextChangesToken
}
Veri çekmeyle ilgili göz önünde bulundurulması gereken pratik hususlar hakkında bilgi edinmek için Verileri senkronize etme ile ilgili en iyi uygulamalara göz atın.
Veri değişikliklerini işleme
Uygulamanızın veri deposundaki değişiklikleri yansıtın. UpsertionChange
için metadata
ile başlayan id
ve lastModifiedTime
öğelerini kullanarak kaydı yükseltin.
DeletionChange
söz konusu olduğunda kaydı silmek için sağlanan id
kodunu kullanın.
Health Connect'teki verileri silme
Bir kullanıcı kendi verilerini uygulamanızdan sildiğinde, verilerin Health Connect'ten de kaldırıldığından emin olun. Bunun için deleteRecords
aracını kullanın. Bu işlem, id
ve clientRecordId
değerlerinin listesini alır. Böylece, birden fazla verinin silinmesi için grup işlemi kolaylaşır.