این راهنما با Health Connect نسخه 1.1.0-rc01 سازگار است.
Health Connect نوع داده آگاهی را برای اندازهگیری جنبههای مختلف سلامت روان، مثل استرس و اضطراب، ارائه میدهد. «آگاهی» نوعی داده است که بخشی از تندرستی کلی در Health Connect است.
بررسی دردسترس بودن Health Connect
برنامه شما باید قبلاز تلاش برای استفاده از Health Connect، بررسی کند که آیا Health Connect در دستگاه کاربر دردسترس است یا نه. Health Connect ممکن است در همه دستگاهها پیشنصب نشده باشد یا ممکن است غیرفعال باشد.
بااستفاده از روش HealthConnectClient.getSdkStatus() میتوانید دردسترس بودن را بررسی کنید.
نحوه بررسی دردسترس بودن Health Connect
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() برمیگرداند، میتوانید کاربر را راهنمایی کنید
تا درصورت لزوم «اتصال به خدمات بهداشتی» را از «فروشگاه Google Play» نصب یا بهروزرسانی کند.
دردسترس بودن ویژگی
برای تعیین اینکه آیا دستگاه کاربر از سوابق جلسه ذهنآگاهی در Health Connect پشتیبانی میکند یا نه، دردسترس بودنFEATURE_MINDFULNESS_SESSION را در مشتری بررسی کنید:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_MINDFULNESS_SESSION
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
مجوزهای لازم
دسترسی به ذهنآگاهی با اجازههای زیر محافظت میشود:
android.permission.health.READ_MINDFULNESSandroid.permission.health.WRITE_MINDFULNESS
برای افزودن قابلیت ذهنآگاهی به برنامهتان، ابتدا
اجازههای نوع داده MindfulnessSession را درخواست کنید.
برای اینکه بتوانید «آگاهی» بنویسید، باید اجازه زیر را اعلام کنید:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MINDFULNESS" />
...
</application>
برای خواندن ذهنآگاهی، باید اجازههای زیر را درخواست کنید:
<application>
<uses-permission
android:name="android.permission.health.READ_MINDFULNESS" />
...
</application>
درخواست اجازهها از کاربر
پساز ایجاد نمونه کارخواه، برنامه شما باید از کاربر اجازه درخواست کند. کاربران باید بتوانند در هر زمانی اجازهها را اعطا یا رد کنند. برای انجام این کار، مجموعهای از اجازهها را برای انواع داده موردنیاز ایجاد کنید. ابتدا مطمئن شوید که اجازههای موجود در مجموعه در مانیفست Android شما اعلام شده باشد.
val permissions = setOf( HealthPermission.getReadPermission(MindfulnessSessionRecord::class), HealthPermission.getWritePermission(MindfulnessSessionRecord::class) )
getGrantedPermissions
استفاده کنید تا ببینید آیا برنامه شما ازقبل اجازههای لازم را دارد یا نه. درغیراینصورت، از
createRequestPermissionResultContract
برای درخواست این اجازهها استفاده کنید. با این کار، صفحه اجازههای Health Connect نمایش داده میشود.
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.") } } }
اطلاعات موجود در سابقه جلسه ذهنآگاهی
هر سابقه جلسه ذهنآگاهی هر نوع جلسه ذهنآگاهی را که کاربر انجام میدهد، برای مثال مراقبه، تنفس، و حرکت، ثبت میکند. این گزارش میتواند شامل یادداشتهای اضافی درباره جلسه نیز باشد.
انواع جلسه ذهنآگاهی زیر برای MindfulnessSessionRecord دردسترس است:
MINDFULNESS_SESSION_TYPE_UNKNOWNMINDFULNESS_SESSION_TYPE_MEDITATIONMINDFULNESS_SESSION_TYPE_BREATHINGMINDFULNESS_SESSION_TYPE_MUSICMINDFULNESS_SESSION_TYPE_MOVEMENTMINDFULNESS_SESSION_TYPE_UNGUIDED
برای فهرست کامل انواع جلسه ذهنآگاهی، به
MindfulnessSessionRecord
مستندات مرجع مراجعه کنید.
تجمعهای پشتیبانیشده
مقادیر تجمیعی زیر برای
MindfulnessSessionRecord دردسترس است:
نوشتن جلسه ذهنآگاهی
تکهکد زیر نحوه نوشتن جلسه ذهنآگاهی را نشان میدهد:
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.activelyRecorded( clientRecordId = "myid", clientRecordVersion = 1L, device = Device(type = Device.TYPE_PHONE) ) )
خواندن جلسه ذهنآگاهی
تکهکد زیر نحوه خواندن جلسه ذهنآگاهی را در محدوده زمانی نشان میدهد:
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}")
}