Bu kılavuz, Health Connect 1.1.0 veya sonraki sürümlerle uyumludur.
Kullanıcıların yaşamsal değerlerini yöneten bir uygulama geliştirmek istiyorsanız Health Connect'i kullanarak şunları yapabilirsiniz:
- Diğer uygulamalardan tansiyon, nabız ve vücut ısısı gibi hayati bulgu verilerini okuma
- Uygulamanız veya bağlı cihazlar tarafından kaydedilen yaşamsal değer verilerini yazma
- Yaşam değerleri verilerine dayalı olarak trendleri izleme ve sağlık analizleri sunma
Bu kılavuzda, izinler, okuma ve yazma iş akışları ile en iyi uygulamalar dahil olmak üzere yaşamsal değer veri türleriyle nasıl çalışılacağı açıklanmaktadır.
Genel bakış: Kapsamlı bir yaşamsal değerler takip uygulaması oluşturma
Aşağıdaki temel adımları uygulayarak Health Connect'i kullanan kapsamlı bir yaşamsal değerleri izleme deneyimi oluşturabilirsiniz:
- Yaşam değerleri veri türleri için uygun izinleri isteme
BloodPressureRecord,HeartRateRecordve diğer yaşamsal değer kayıtları gibi kayıtları kullanarak yaşamsal değer verilerini yazma.- Görüntüleme, analiz veya senkronizasyon için önemli verileri okuma.
- Verileri verimli bir şekilde yazmak ve okumak için toplu işlem kullanma
Bu iş akışı, diğer Health Connect uygulamalarıyla birlikte çalışabilirliği sağlar ve kullanıcı tarafından kontrol edilen veri erişimini doğrular.
Başlamadan önce
Temel özellikler uygulanmadan önce:
- Uygun bağımlılığı kullanarak Health Connect'i entegre edin.
HealthConnectClientörneği oluşturun.- Uygulamanızın, Sağlık İzinleri'ne dayalı çalışma zamanında istenen izin akışlarını uyguladığını doğrulayın.
Temel kavramlar
Health Connect'teki yaşamsal değer verileri, her biri belirli bir fizyolojik ölçüme karşılık gelen çeşitli kayıt türleriyle temsil edilir. Antrenman oturumlarının aksine, yaşamsal değerler genellikle belirli bir zaman noktasındaki veya aralığa dayalı veriler olarak kaydedilir.
Vitals veri türleri
Yaşam değerleri verileri, ayrı kayıt türleriyle temsil edilir. Yaygın türler şunlardır:
BloodPressureRecord: Sistolik ve diyastolik basınç ile vücut pozisyonu dahil olmak üzere tek bir tansiyon ölçümünü temsil eder.HeartRateRecord: Bir dizi nabız ölçümünü temsil eder.RestingHeartRateRecord: Dinlenme nabzının tek bir ölçümünü temsil eder.BodyTemperatureRecord: Ölçüm konumu dahil olmak üzere tek bir vücut sıcaklığı ölçümünü temsil eder.BloodGlucoseRecord: Öğünle ve numune kaynağıyla ilişki dahil olmak üzere tek bir kan şekeri ölçümünü temsil eder.OxygenSaturationRecord: Tek bir kandaki oksijen doygunluğu ölçümünü temsil eder.RespiratoryRateRecord: Tek bir solunum hızı ölçümünü temsil eder.
Veri türlerinin tam listesi için Health Connect veri türleri başlıklı makaleye bakın.
Geliştirme ile ilgili dikkat edilmesi gereken noktalar
Yaşam değerleri verileri hassas olabilir ve uygulamaların, sensörlerden veya kullanıcı girişlerinden gelen ölçümlere yanıt olarak veri yazması ya da bir arka uçtan veri senkronize etmesi gerekebilir. Yaşam değerleri verilerini işlemek için izinler çok önemlidir.
İzinler
Uygulamanız, yaşamsal belirti verilerini okumadan veya yazmadan önce ilgili Health Connect izinlerini istemelidir. Hayati bulgular için yaygın izinler arasında tansiyon, nabız, vücut ısısı, kan şekeri, oksijen doygunluğu ve solunum hızı yer alır. Bu alanlar/yollar aşağıdakileri içerir:
- Tansiyon:
BloodPressureRecordiçin okuma ve yazma izinleri. - Nabız:
HeartRateRecordiçin okuma ve yazma izinleri. - Dinlenme nabzı:
RestingHeartRateRecordiçin okuma ve yazma izinleri. - Vücut Sıcaklığı:
BodyTemperatureRecordiçin okuma ve yazma izinleri. - Kan şekeri:
BloodGlucoseRecordiçin okuma ve yazma izinleri. - Oksijen doygunluğu:
OxygenSaturationRecordiçin okuma ve yazma izinleri. - Solunum hızı:
RespiratoryRateRecordiçin okuma ve yazma izinleri.
Aşağıda tansiyon, nabız ve vücut sıcaklığı için izin isteme örneği verilmiştir:
Uygulamanız, istemci örneği oluşturduktan sonra kullanıcıdan izin istemelidir. Kullanıcıların diledikleri zaman izin vermelerine veya izinleri reddetmelerine olanak tanınmalıdır. Bunun için gerekli veri türlerine yönelik bir izin grubu oluşturun. Öncelikle, kümedeki izinlerin Android manifest dosyanızda beyan edildiğinden emin olun.
val permissions = setOf( HealthPermission.getReadPermission(BloodPressureRecord::class), HealthPermission.getWritePermission(BloodPressureRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(HeartRateRecord::class), HealthPermission.getReadPermission(BodyTemperatureRecord::class), HealthPermission.getWritePermission(BodyTemperatureRecord::class) )
getGrantedPermissions yöntemini kullanın. Aksi takdirde bu izinleri istemek için createRequestPermissionResultContract yöntemini kullanın. Health Connect izinleri ekranı açılır.
val permissions = setOf( HealthPermission.getReadPermission(StepsRecord::class), HealthPermission.getWritePermission(StepsRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(HeartRateRecord::class) ) val requestPermissionsLauncher = rememberLauncherForActivityResult( contract = PermissionController.createRequestPermissionResultContract() ) { grantedPermissions -> if (grantedPermissions.containsAll(permissions)) { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions granted!") } } else { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions denied.") } } }
İzin istemek için checkPermissionsAndRun işlevini çağırın:
if (!granted.containsAll(permissions)) { // Check if required permissions are not granted, and return return emptySet() } // Permissions already granted; proceed with inserting or reading data
Yalnızca tek bir veri türü (ör. tansiyon) için izin istemeniz gerekiyorsa izin setinize yalnızca bu veri türünü ekleyin:
Tansiyon verilerine erişim aşağıdaki izinlerle korunur:
android.permission.health.READ_BLOOD_PRESSUREandroid.permission.health.WRITE_BLOOD_PRESSURE
Uygulamanıza tansiyon özelliğini eklemek için öncelikle BloodPressureRecord veri türü için izin isteyin.
Tansiyon verilerini yazabilmek için beyan etmeniz gereken izin şudur:
<application>
<uses-permission
android:name="android.permission.health.WRITE_BLOOD_PRESSURE" />
...
</application>
Tansiyonu okumak için aşağıdaki izinleri istemeniz gerekir:
<application>
<uses-permission
android:name="android.permission.health.READ_BLOOD_PRESSURE" />
...
</application>
Hayati bulgu verilerini yazma
Bu bölümde, yaşamsal belirti verilerinin Health Connect'e nasıl yazılacağı açıklanmaktadır. Yaşam belirtisi verileri genellikle ayrı kayıtlar olarak yazılır. Bir sensörden veya arka uçtan senkronizasyon gibi aynı anda birden fazla kayıt yazıyorsanız toplu işlem kullanın.
BloodPressureRecord yazma örneği:
suspend fun writeBloodPressureRecord(healthConnectClient: HealthConnectClient) { val record = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) healthConnectClient.insertRecords(listOf(record)) }
Toplu yazma
Uygulamanızın bağlı bir cihazdan veya arka uç hizmetinden veri senkronizasyonu gibi birden fazla veri noktası yazması gerekiyorsa verimliliği artırmak ve pil tüketimini azaltmak için yazma işlemlerini toplu olarak yapmanız gerekir. Health Connect, tek bir yazma isteğinde en fazla 1.000 kaydı işleyebilir.
Aşağıdaki kodda, birden fazla kaydın aynı anda nasıl toplu olarak yazılacağı gösterilmektedir:
suspend fun writeBatchRecords(healthConnectClient: HealthConnectClient) { val bloodPressureRecord = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) val heartRateRecord = HeartRateRecord( startTime = Instant.now().minusSeconds(60), startZoneOffset = ZoneOffset.UTC, endTime = Instant.now(), endZoneOffset = ZoneOffset.UTC, samples = listOf(HeartRateRecord.Sample(time = Instant.now().minusSeconds(30), beatsPerMinute = 80)) ) healthConnectClient.insertRecords(listOf(bloodPressureRecord, heartRateRecord)) }
Yaşam değerleri verilerini okuma
Uygulamalar, ölçümleri görüntülemek, trendleri analiz etmek veya verileri harici bir sunucuyla senkronize etmek için önemli verileri okuyabilir. Temel değerleri okumak için belirli kayıt türüne sahip bir ReadRecordsRequest kullanın ve zaman aralığına göre filtreleyin.
BloodPressureRecord verilerini okuma örneği:
suspend fun readBloodPressureRecords( healthConnectClient: HealthConnectClient, startTime: Instant, endTime: Instant ) { val response = healthConnectClient.readRecords( ReadRecordsRequest( recordType = BloodPressureRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) for (record in response.records) { // Process each blood pressure record val systolic = record.systolic val diastolic = record.diastolic } }
Hayati belirti verilerini bir arka uç sunucusuyla senkronize etmeniz veya uygulamanızın veri deposunu Health Connect ile güncel tutmanız gerekiyorsa ChangeLogs'u kullanın. Bu sayede, belirli bir zaman noktasından sonra eklenen, güncellenen veya silinen kayıtların listesini alabilirsiniz. Bu, değişiklikleri manuel olarak izlemekten veya tüm verileri tekrar tekrar okumaktan daha verimlidir. Daha fazla bilgi için Verileri Health Connect ile senkronize etme başlıklı makaleyi inceleyin.
En iyi uygulamalar
Veri güvenilirliğini ve kullanıcı deneyimini iyileştirmek için aşağıdaki yönergeleri uygulayın:
- Yazma isteklerini toplu olarak gönderme: Giriş/çıkış ek yükünü azaltmak ve pil ömrünü korumak için her veri noktasını ayrı ayrı yazmak yerine veri noktalarını 1.000 kayda kadar toplu olarak tek bir
insertRecordsçağrısında gruplandırın. - Canlı takip sırasında sık sık yazma: Sensörlerden (ör. sürekli glikoz monitörleri veya nabız ölçerler) sık sık güncelleme almak için verileri 15 dakikaya kadar aralıklarla gruplar halinde yazarak anlık güncellemeler ile pil verimliliğini dengeleyin.
- Arka plan senkronizasyonları için WorkManager'ı kullanın: Yardımcı cihazdan veya arka uç hizmetinden veri senkronizasyonu gibi ertelenen yazma işlemleri için
WorkManagerkullanın. Toplu yazma işlemleri için 15 dakikalık bir aralık hedefleyin. - Yinelenen veriler yazmaktan kaçınma: İstemci kimliklerini kullanma: Kayıt oluştururken
metadata.clientRecordIdayarlayın. Health Connect, benzersiz kayıtları tanımlamak için bu bilgiyi kullanır. Zaten mevcut olan birclientRecordIdile kayıt yazmaya çalışırsanız Health Connect, yeni bir kayıt oluşturmak yerine kopyayı yok sayar veya mevcut kaydı günceller.metadata.clientRecordIdayarlamak, senkronizasyon yeniden denemeleri veya uygulamanın yeniden yüklenmesi sırasında yinelenenleri önlemenin en etkili yoludur.val record = StepsRecord( count = 100, startTime = startTime, endTime = endTime, startZoneOffset = ZoneOffset.UTC, endZoneOffset = ZoneOffset.UTC, metadata = Metadata( // Use a unique ID from your own database clientRecordId = "daily_steps_2023_10_27_user_123" ) )
- Mevcut verileri kontrol edin: Verileri senkronize etmeden önce, senkronizasyon zaman aralığındaki kayıtlar için Health Connect'i sorgulayarak uygulamanızdaki verilerin zaten mevcut olup olmadığını kontrol edin. Böylece, yinelenen verileri veya daha yeni verilerin üzerine yazılmasını önleyebilirsiniz.
- İzin için net gerekçeler sunun: Uygulamanızın sağlık verilerine neden erişmesi gerektiğini açıklamak için
Permission.createIntentakışını kullanın. Örneğin: "Tansiyonunuzda gözlemlenen değişimleri izlemek ve analizler sunmak için." - Zaman damgalarını ölçümlerle uyumlu hale getirin: Kayıt zaman damgalarının, ölçümlerin ne zaman yapıldığını doğru şekilde yansıttığını doğrulayın.
HeartRateRecordgibi aralık verileri içinstartTimeveendTimedeğerlerinin doğru olduğunu doğrulayın.
Test
Verilerin doğruluğunu ve yüksek kaliteli bir kullanıcı deneyimini doğrulamak için bu test stratejilerini uygulayın ve resmi En önemli kullanım alanlarını test etme belgelerine bakın.
Doğrulama araçları
- Health Connect Araç Kutusu: Kayıtları manuel olarak incelemek, test verilerini silmek ve veritabanındaki değişiklikleri simüle etmek için bu tamamlayıcı uygulamayı kullanın. Kayıtlarınızın doğru şekilde saklandığını doğrulamanın en iyi yolu budur.
FakeHealthConnectClientile birim testi: Uygulamanızın, izin iptali veya API istisnaları gibi uç durumları fiziksel bir cihaza ihtiyaç duymadan nasıl işlediğini doğrulamak için test kitaplığını kullanın.
Kalite kontrol listesi
Tipik mimari
Önemli verilerin uygulanması genellikle şunları içerir:
| Bileşen | Yönetir |
|---|---|
| Vitals denetleyicisi | Sensör/giriş okuma Toplu iş mantığı |
| Kod deposu katmanı (Health Connect işlemlerini sarmalar:) | Yaşam değerleri kayıtlarını ekleme Yaşam değerleri kayıtlarını okuma |
| Kullanıcı arayüzü katmanı (ekranlar): | Canlı ölçümler Geçmiş veriler Grafikler ve trendler |
Sorun giderme
| Belirti | Olası neden | Çözünürlük |
|---|---|---|
| Eksik veri türleri (ör. tansiyon) | Yazma izinleri eksik veya zaman filtreleri yanlış. | İlgili veri türü iznini talep ettiğinizden ve kullanıcının bu izni verdiğinden emin olun. ReadRecordsRequest öğenizin, ölçüm zamanını kapsayan bir TimeRangeFilter kullandığını doğrulayın. İzinler'i inceleyin. |
| Yinelenen kayıtlar görünüyor | clientRecordId eksik. |
Her kaydın Metadata alanına benzersiz bir clientRecordId atayın. Bu sayede Health Connect, senkronizasyon yeniden denemesi sırasında aynı veriler iki kez yazılırsa tekilleştirme yapabilir. En iyi uygulamalar bölümüne bakın. |
| Kayıtlar yazılamıyor | Birimler yanlış veya değerler geçerli aralığın dışında. | Health Connect, kayıt değerlerini doğrular. Örneğin, tansiyon değerleri fizyolojik olarak makul bir aralıkta olmalıdır. Geçerli aralıklar ve birimler için veri türü belgelerini inceleyin. |
Sık kullanılan hata ayıklama adımları
| İzin durumunu kontrol edin. | Okuma veya yazma işlemi yapmadan önce her zaman getPermissionStatus() yöntemini çağırın. Kullanıcılar, sistem ayarlarından izinleri istedikleri zaman iptal edebilir. |