Bu kılavuz, Health Connect'in 1.1.0-rc01 sürümüyle uyumludur.
Health Connect, stres ve kaygı gibi zihinsel sağlığın çeşitli yönlerini ölçmek için farkındalık veri türünü sunar. Farkındalık, Health Connect'teki genel sağlıklı yaşamın bir parçası olan bir veri türüdür.
Health Connect'in kullanılabilirliğini kontrol etme
Uygulamanız, Health Connect'i kullanmaya çalışmadan önce kullanıcının cihazında Health Connect'in kullanılabilir olduğunu doğrulamalıdır. Health Connect bazı cihazlara önceden yüklenmemiş veya devre dışı bırakılmış olabilir.
Kullanılabilirlik durumunu HealthConnectClient.getSdkStatus() yöntemini kullanarak kontrol edebilirsiniz.
Health Connect'in kullanılabilirliğini kontrol etme
fun checkHealthConnectAvailability(context: Context) { val providerPackageName = "com.google.android.apps.healthdata" // Or get from HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME val availabilityStatus = HealthConnectClient.getSdkStatus(context, providerPackageName) if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE) { // Health Connect is not available. Guide the user to install/enable it. // For example, show a dialog. return // early return as there is no viable integration } if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED) { // Health Connect is available but requires an update. // Optionally redirect to package installer to find a provider, for example: val uriString = "market://details?id=$providerPackageName&url=healthconnect%3A%2F%2Fonboarding" context.startActivity( Intent(Intent.ACTION_VIEW).apply { setPackage("com.android.vending") data = Uri.parse(uriString) putExtra("overlay", true) putExtra("callerId", context.packageName) } ) return } // Health Connect is available, obtain a HealthConnectClient instance val healthConnectClient = HealthConnectClient.getOrCreate(context) // Issue operations with healthConnectClient }
getSdkStatus() tarafından döndürülen duruma bağlı olarak, gerekirse kullanıcıyı Google Play Store'dan Health Connect'i yüklemeye veya güncellemeye yönlendirebilirsiniz.
Özelliğin kullanılabilirliği
Kullanıcının cihazının Health Connect'te farkındalık oturumu kayıtlarını destekleyip desteklemediğini belirlemek için istemcideFEATURE_MINDFULNESS_SESSION simgesinin kullanılabilirliğini kontrol edin:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_MINDFULNESS_SESSION
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Gerekli izinler
Farkındalık özelliklerine erişim aşağıdaki izinlerle korunur:
android.permission.health.READ_MINDFULNESSandroid.permission.health.WRITE_MINDFULNESS
Uygulamanıza farkındalık özelliği eklemek için öncelikle MindfulnessSession veri türü için izin isteyerek başlayın.
Farkındalıkla ilgili yazılar yazabilmek için bildirmeniz gereken izin şudur:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MINDFULNESS" />
...
</application>
Farkındalık okumak için aşağıdaki izinleri istemeniz gerekir:
<application>
<uses-permission
android:name="android.permission.health.READ_MINDFULNESS" />
...
</application>
Kullanıcıdan izin isteme
İstemci örneği oluşturduktan sonra uygulamanızın kullanıcıdan izin istemesi gerekir. Kullanıcılar, izinleri istedikleri zaman verebilmeli veya reddedebilmelidir. 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.
val permissions = setOf( HealthPermission.getReadPermission(MindfulnessSessionRecord::class), HealthPermission.getWritePermission(MindfulnessSessionRecord::class) )
getGrantedPermissions
kullanın. Sahip değilse bu izinleri istemek için
createRequestPermissionResultContract
kullanın. Bu işlem, Health Connect izinleri ekranını gösterir.
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.") } } }
Farkındalık oturumu kaydında yer alan bilgiler
Her farkındalık oturumu kaydı, kullanıcının yaptığı her türlü farkındalık oturumunu (ör. meditasyon, nefes ve hareket) yakalar. Kayda oturumla ilgili ek notlar da eklenebilir.
MindfulnessSessionRecord için aşağıdaki farkındalık oturumu türleri kullanılabilir:
MINDFULNESS_SESSION_TYPE_UNKNOWNMINDFULNESS_SESSION_TYPE_MEDITATIONMINDFULNESS_SESSION_TYPE_BREATHINGMINDFULNESS_SESSION_TYPE_MUSICMINDFULNESS_SESSION_TYPE_MOVEMENTMINDFULNESS_SESSION_TYPE_UNGUIDED
Farkındalık oturumu türlerinin tam listesi için MindfulnessSessionRecord
referans belgelerine bakın.
Desteklenen toplamalar
MindfulnessSessionRecord için aşağıdaki toplama değerleri kullanılabilir:
Farkındalık oturumunu yazma
Aşağıdaki kod snippet'inde, farkındalık oturumunun nasıl yazılacağı gösterilmektedir:
val isAvailable = healthConnectClient.features.getFeatureStatus(FEATURE_MINDFULNESS_SESSION) if (isAvailable == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) { val record = MindfulnessSessionRecord( startTime = Instant.now().minus(Duration.ofHours(1)), startZoneOffset = ZoneOffset.UTC, endTime = Instant.now(), endZoneOffset = ZoneOffset.UTC, mindfulnessSessionType = MindfulnessSessionRecord.MINDFULNESS_SESSION_TYPE_MEDITATION, title = "Lake meditation", notes = "Meditation by the lake", metadata = Metadata( clientRecordId = "myid", clientRecordVersion = 1L, device = Device(type = Device.TYPE_PHONE) ) )
Farkındalık oturumunu okuma
Aşağıdaki kod snippet'inde, bir zaman aralığındaki farkındalık oturumunun nasıl okunacağı gösterilmektedir:
Val now = Instant.now()
val records = healthConnectClient.readRecords(
ReadRecordsRequest(
recordType = MindfulnessSessionRecord::class,
timeRangeFilter = TimeRangeFilter.between(
startTime = now.minus(Duration.ofHours(5)),
endTime = now
)
)
)
// Process the returned records
records.records.forEach { session ->
println("Mindfulness session:")
println("Start: ${session.startTime}")
println("End: ${session.endTime}")
println("Title: ${session.title}")
println("Notes: ${session.notes}")
println("Type: ${session.mindfulnessSessionType}")
}