Kullanıcıların hayati bulgularını yöneten bir uygulama oluşturmak istiyorsanız Health Connect'i kullanarak şunları yapabilirsiniz:
- Diğer uygulamalardan tansiyon, nabız ve vücut ısısı gibi hayati bulgularla ilgili verileri okuma
- Uygulamanız veya bağlı cihazlar tarafından kaydedilen hayati bulgular verilerini yazma
- Trendleri izleme ve hayati bulgular verilerine dayalı sağlık analizleri sağlama
Bu kılavuzda, izinler, okuma ve yazma iş akışları ve en iyi uygulamalar da dahil olmak üzere hayati bulgular veri türleriyle nasıl çalışılacağı açıklanmaktadır.
Genel bakış: Kapsamlı bir Vitals izleyici oluşturma
Aşağıdaki temel adımları uygulayarak Health Connect'i kullanarak kapsamlı bir hayati bulgular izleme deneyimi oluşturabilirsiniz:
- Hayati veri türleri için uygun izinleri isteme
BloodPressureRecord,HeartRateRecordve diğer hayati kayıtlar gibi kayıtları kullanarak hayati verileri yazma- Görüntüleme, analiz veya senkronizasyon için vitals verilerini okuma.
- Verimli veri yazma ve okuma için gruplandırma kullanma.
Bu iş akışı, diğer Health Connect uygulamalarıyla birlikte çalışabilmeyi sağlar ve kullanıcı kontrollü veri erişimini doğrular.
Başlamadan önce
Vitals özelliklerini uygulamadan ö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ı izin akışlarını uyguladığını doğrulayın.
Temel kavramlar
Health Connect'teki hayati bulgular verileri, her biri belirli bir fizyolojik ölçüme karşılık gelen çeşitli kayıt türleriyle temsil edilir. Antrenman seanslarının aksine, hayati bulgular genellikle belirli bir zamandaki veya aralığa dayalı veriler olarak kaydedilir.
Vitals veri türleri
Vitals 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ü gösterir.RestingHeartRateRecord: Dinlenme sırasındaki kalp atış hızının tek bir ölçümünü gösterir.BodyTemperatureRecord: Ölçüm yeri de dahil olmak üzere tek bir vücut sıcaklığı ölçümünü gösterir.BloodGlucoseRecord: Yemekle ilişkisi ve numune kaynağı dahil olmak üzere tek bir kan şekeri ölçümünü gösterir.OxygenSaturationRecord: Tek bir kan oksijen doygunluğu ölçümünü gösterir.RespiratoryRateRecord: Tek bir solunum hızı ölçümünü gösterir.
Veri türlerinin tam listesi için Health Connect veri türleri başlıklı makaleyi inceleyin.
Geliştirme ile ilgili dikkat edilmesi gereken hususlar
Vitals verileri hassas olabilir ve uygulamaların, sensörlerden gelen ölçümlere veya kullanıcı girişine yanıt olarak veri yazması ya da arka uçtaki verileri senkronize etmesi gerekebilir. Hayati verilerin işlenmesi için izinler çok önemlidir.
İzinler
Uygulamanız, hayati bulgular 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 destek, şunları içerir:
- Tansiyon:
BloodPressureRecordiçin okuma ve yazma izinleri. - Kalp atış hı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 gösterilmektedir:
İstemci örneği oluşturduktan sonra uygulamanızın kullanıcıdan izin istemesi gerekir. Kullanıcıların izinleri istedikleri zaman vermesine veya reddetmesine izin verilmelidir.
Bunu yapmak için gerekli veri türleri için bir dizi izin oluşturun. Gruptaki izinlerin önce Android manifestinizde tanımlandığından emin olun.
// Create a set of permissions for required data types
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)
)
Uygulamanıza gerekli izinlerin verilip verilmediğini görmek için getGrantedPermissions aracını kullanın. Aksi takdirde, bu izinleri istemek için createRequestPermissionResultContract seçeneğini kullanın. Bu işlem, Health Connect izinleri ekranını gösterir.
// 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 izinleri istedikleri zaman verebilir veya iptal edebilir. Bu nedenle, uygulamanız izinleri kullanmadan önce her seferinde kontrol etmeli ve izinlerin kaybedildiği senaryoları ele almalıdır.
İzin istemek için checkPermissionsAndRun işlevini çağırın:
if (!granted.containsAll(PERMISSIONS)) {
requestPermissions.launch(PERMISSIONS)
// Check if required permissions are not granted, and return
}
// Permissions already granted; proceed with inserting or reading data
Yalnızca kan basıncı gibi tek bir veri türü için izin istemeniz gerekiyorsa izin kümenize yalnızca bu veri türünü ekleyin:
Tansiyona erişim aşağıdaki izinlerle korunur:
android.permission.health.READ_BLOOD_PRESSUREandroid.permission.health.WRITE_BLOOD_PRESSURE
Uygulamanıza tansiyon özelliği eklemek için öncelikle BloodPressureRecord veri türüyle ilgili izinleri isteyerek başlayın.
Kan basıncı yazabilmek için bildirmeniz gereken izin aşağıda verilmiştir:
<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 bulguları yazma
Bu bölümde, hayati bulgular verilerinin Health Connect'e nasıl yazılacağı açıklanmaktadır. Vitals verileri genellikle ayrı kayıtlar olarak yazılır. Bir sensör veya arka uçtan senkronizasyon gibi aynı anda birden fazla kayıt yazıyorsanız gruplandırmayı 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 gelen verileri senkronize etmek 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 1.000'e kadar 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)) }
Hayati bulgu verilerini okuma
Uygulamalar, ölçümleri göstermek, trendleri analiz etmek veya verileri harici bir sunucuyla senkronize etmek için hayati verileri okuyabilir. Yaşamsal belirtileri okumak için belirli kayıt türüyle ReadRecordsRequest kullanın ve bir 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 bulgularla ilgili verileri 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 yöntem, belirli bir zamandan beri eklenen, güncellenen veya silinen kayıtların listesini almanıza olanak tanır. 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önergelere uyun:
- Yazma sıklığı ve toplu işleme: Giriş/çıkış ek yükünü azaltmak ve pil ömrünü korumak için veri noktalarını tek tek yazmak yerine 1.000 kayda kadar toplu işleme ile tek bir
insertRecordsçağrısında gruplandırın.- Canlı İzleme: Sensörlerden (ör. sürekli glikoz ölçerler 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ği arasında denge kurun.
- Arka plan senkronizasyonu: Yardımcı cihaz veya arka uç hizmetinden veri senkronize etme gibi ertelenmiş yazma işlemleri için
WorkManagerkullanın. Toplu yazma işlemleri için 15 dakikalık bir aralık hedefleyin.
Yinelenen veriler yazmaktan kaçının: İstemci kimliklerini kullanın Kayıt oluştururken
metadata.clientRecordIddeğerini ayarlayı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, yinelenen kaydı yoksayar veya yeni bir kayıt oluşturmak yerine mevcut kaydı günceller. Senkronizasyon yeniden denemeleri veya uygulama yeniden yüklemeleri sırasında yinelenen öğeleri önlemenin en etkili yolumetadata.clientRecordIdayarlamaktır.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, metadata = Metadata( // Use a unique ID from your own database clientRecordId = "bp_20240101_user123" ) )
Mevcut verileri kontrol edin: Verileri senkronize etmeden önce, uygulamanızdaki verilerin zaten mevcut olup olmadığını görmek için senkronizasyon zaman aralığındaki kayıtlar için Health Connect'e sorgu gönderin. Böylece, yinelenen verileri veya yeni verilerin üzerine yazılmasını önleyebilirsiniz.
İzin için net gerekçeler sunun: Uygulamanızın neden sağlık verilerine erişmesi gerektiğini açıklamak için
Permission.createIntentakışını kullanın. Örneğin, "Tansiyon trendlerinizi izlemek ve analizler sunmak için".Zaman damgalarını ölçümlerle eşleştirin: 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ı deneyimi sağlamak için aşağıdaki test stratejilerini uygulayın ve resmi En sık kullanılan test senaryoları dokümanına bakın.
Doğrulama araçları
- Health Connect Araç Kutusu: Kayıtları manuel olarak incelemek, test verilerini silmek ve veritabanında değişiklikleri simüle etmek için bu yardımcı uygulamayı kullanın. Bu, kayıtlarınızın doğru şekilde saklandığını doğrulamanın en iyi yoludur.
FakeHealthConnectClientile birim testi: Uygulamanızın, fiziksel bir cihaza ihtiyaç duymadan izin iptali veya API istisnaları gibi uç durumları nasıl işlediğini doğrulamak için test kitaplığını kullanın.
Kalite kontrol listesi
Tipik mimari
Hayati bulguların uygulanması genellikle şunları içerir:
| Bileşen | Yönetir |
|---|---|
| Vitals denetleyicisi | Sensör/Giriş okuma Toplu işleme mantığı |
| Depo katmanı (Health Connect işlemlerini kapsar): | Hayati verileri ekleme Hayati verileri okuma |
| Kullanıcı Arayüzü Katmanı (Ekranlar): | Anlık okumalar Geçmiş veriler Grafikler ve trendler |
Sorun giderme
| Belirti | Olası neden | Çözünürlük |
|---|---|---|
| Eksik veri türleri (örneğin, tansiyon) | Yazma izinlerinin eksik olması veya zaman filtrelerinin yanlış olması. | İlgili veri türü iznini istediğ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 başlıklı makaleyi inceleyin. |
| Yinelenen kayıtlar gösteriliyor | clientRecordId eksik. |
Her kaydın Metadata bölümünde benzersiz bir clientRecordId atayın. Bu sayede, senkronizasyon yeniden denemesi sırasında aynı veriler iki kez yazılırsa Health Connect, verileri tekilleştirebilir. En iyi uygulamalar bölümüne bakın. |
| Kayıtlar yazılamıyor | Yanlış birimler veya geçerli aralığın dışındaki değerler. | 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 kontrol edin. |
Sık karşılaşılan hata ayıklama adımları
| İzin durumunu kontrol edin. | Okuma veya yazma işlemi yapmadan önce her zaman getPermissionStatus() işlevini çağırın. Kullanıcılar, sistem ayarlarından izinleri istedikleri zaman iptal edebilir. |