این راهنما با 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" 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() برمیگرداند، میتوانید کاربر را راهنمایی کنید
تا درصورت لزوم Health Connect را از «فروشگاه 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}")
}