यह गाइड, Health Connect के 1.1.0-alpha11 वर्शन के साथ काम करती है.
Health Connect, नींद के सेशन का डेटा टाइप उपलब्ध कराता है. इससे किसी व्यक्ति की नींद के बारे में जानकारी सेव की जा सकती है. जैसे, रात में सोने या दिन में झपकी लेने का डेटा.
इन सेशन को दिखाने के लिए, SleepSessionRecord डेटा टाइप का इस्तेमाल किया जाता है.
सेशन की मदद से, उपयोगकर्ता समय के हिसाब से परफ़ॉर्मेंस को मेज़र कर सकते हैं. जैसे, लगातार धड़कन की दर या जगह की जानकारी का डेटा.
SleepSessionRecord सेशन में ऐसा डेटा होता है जो नींद के चरणों को रिकॉर्ड करता है. जैसे, AWAKE, SLEEPING, और DEEP.
सबटाइप डेटा, सेशन से "जुड़ा" होता है. यह सिर्फ़ तब काम का होता है, जब इसे पैरंट सेशन के साथ पढ़ा जाता है. उदाहरण के लिए, नींद की स्थिति.
वहीं, जुड़ा हुआ डेटा उस डेटा को कहते हैं जिसे अलग से रिकॉर्ड किया जाता है. हालांकि, यह किसी सेशन की समयावधि के दौरान रिकॉर्ड किया जाता है. उदाहरण के लिए, अगर कोई व्यक्ति नींद के सेशन के दौरान धड़कन की दर रिकॉर्ड करता है, तो धड़कन की दर का डेटा, जुड़ा हुआ डेटा होगा. सबटाइप डेटा, सेशन रिकॉर्ड का हिस्सा होता है. इसके उलट, जुड़े हुए डेटा में अलग-अलग रिकॉर्ड होते हैं. हर रिकॉर्ड का अपना यूयूआईडी होता है.
यह देखना कि Health Connect मौजूद और चालू है या नहीं
Health Connect का इस्तेमाल करने से पहले, आपके ऐप्लिकेशन को यह पुष्टि करनी चाहिए कि उपयोगकर्ता के डिवाइस पर Health Connect इंस्टॉल हो. ऐसा हो सकता है कि Health Connect, सभी डिवाइसों पर पहले से इंस्टॉल न हो या इसे बंद कर दिया गया हो.
HealthConnectClient.getSdkStatus()
का इस्तेमाल करके, यह देखा जा सकता है कि Health Connect उपलब्ध है या नहीं.
यह देखने का तरीका कि 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 Store से Health Connect इंस्टॉल या अपडेट करने के लिए कहा जा सकता है.
सुविधा की उपलब्धता
इस डेटा टाइप के लिए, सुविधा की उपलब्धता का कोई फ़्लैग नहीं है.
ज़रूरी अनुमतियां
नींद के सेशन को ऐक्सेस करने के लिए, इन अनुमतियों का इस्तेमाल किया जाता है:
android.permission.health.READ_SLEEPandroid.permission.health.WRITE_SLEEP
अपने ऐप्लिकेशन में नींद के सेशन की सुविधा जोड़नी है, तो SleepSession डेटा टाइप के लिए, अनुमतियों का अनुरोध करें.
यहां उस अनुमति के बारे में बताया गया है जिसके बारे में आपको एलान करना होगा, ताकि नींद के सेशन से जुड़े डेटा में बदलाव किया जा सके:
<application>
<uses-permission
android:name="android.permission.health.WRITE_SLEEP" />
...
</application>
नींद के सेशन की जानकारी ऐक्सेस करने के लिए, आपको ये अनुमतियां मांगनी होंगी:
<application>
<uses-permission
android:name="android.permission.health.READ_SLEEP" />
...
</application>
उपयोगकर्ता से अनुमतियों का अनुरोध करना
क्लाइंट इंस्टेंस बनाने के बाद, आपके ऐप्लिकेशन को उपयोगकर्ता से अनुमतियों का अनुरोध करना होगा. उपयोगकर्ताओं के पास किसी भी समय अनुमतियां देने या अस्वीकार करने का विकल्प ज़रूर होना चाहिए. इसके लिए, ज़रूरी डेटा टाइप के लिए अनुमतियों का सेट बनाएं. पक्का करें कि सेट में मौजूद अनुमतियों का एलान, सबसे पहले आपके Android मेनिफ़ेस्ट में किया गया हो.
val permissions = setOf( HealthPermission.getReadPermission(SleepSessionRecord::class), HealthPermission.getWritePermission(SleepSessionRecord::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.") } } }
इस्तेमाल किए जा सकने वाले एग्रीगेशन
SleepSessionRecord के लिए, ये एग्रीगेट वैल्यू उपलब्ध हैं:
सामान्य दिशा-निर्देश
Health Connect में नींद के सेशन के साथ काम करने के सबसे सही तरीकों के बारे में यहां बताया गया है.
- नींद के किसी सेशन का डेटा जोड़ने के लिए, सेशन का इस्तेमाल किया जाना चाहिए. जैसे, नींद के लिए:
suspend fun writeSleepSession(healthConnectClient: HealthConnectClient) { healthConnectClient.insertRecords( listOf( SleepSessionRecord( startTime = Instant.parse("2022-05-10T23:00:00.000Z"), startZoneOffset = ZoneOffset.of("-08:00"), endTime = Instant.parse("2022-05-11T07:00:00.000Z"), endZoneOffset = ZoneOffset.of("-08:00"), title = "My Sleep" ), ) ) }
- सबटाइप डेटा को किसी सेशन में, क्रम से लगे टाइमस्टैंप के साथ अलाइन किया जाना चाहिए. साथ ही, टाइमस्टैंप एक-दूसरे से ओवरलैप नहीं होने चाहिए. हालांकि, टाइमस्टैंप के बीच में गैप हो सकता है.
- सबटाइप डेटा में यूयूआईडी नहीं है, लेकिन उससे जुड़े डेटा में अलग-अलग यूयूआईडी हैं.
- सेशन तब काम आते हैं, जब उपयोगकर्ता को डेटा को किसी सेशन से जोड़ना हो और उसे लगातार रिकॉर्ड करने के बजाय, सेशन के हिस्से के तौर पर ट्रैक करना हो.
नींद के सेशन
Health Connect में नींद का डेटा देखा या सेव किया जा सकता है. नींद के डेटा को एक सेशन के तौर पर दिखाया जाता है. इसे नींद के आठ अलग-अलग चरणों में बांटा जा सकता है:
UNKNOWN: अगर उपयोगकर्ता सो रहा है, तो यह जानकारी नहीं दी जाती या यह जानकारी उपलब्ध नहीं होती.AWAKE: उपयोगकर्ता दिन के दौरान नहीं, बल्कि स्लीप साइकल के दौरान जगा हुआ है.SLEEPING: नींद के बारे में सामान्य या कम जानकारी.OUT_OF_BED: उपयोगकर्ता नींद के सेशन के बीच में बिस्तर से उठ जाता है.AWAKE_IN_BED: उपयोगकर्ता बिस्तर पर लेटा हुआ है, लेकिन उसे नींद नहीं आ रही है.LIGHT: उपयोगकर्ता हल्की नींद के स्लीप साइकल में है.DEEP: उपयोगकर्ता गहरी नींद के स्लीप साइकल में है.REM: उपयोगकर्ता आरईएम स्लीप साइकल में है.
इन वैल्यू से पता चलता है कि किसी समयावधि में उपयोगकर्ता को किस तरह की नींद आई. नींद की अलग-अलग स्टेज के बारे में लिखना ज़रूरी नहीं है. हालांकि, अगर यह जानकारी उपलब्ध है, तो हमारा सुझाव है कि आप इसे लिखें.
नींद के सेशन का डेटा सेव करने की अनुमति दें
SleepSessionRecord डेटा टाइप के दो हिस्से होते हैं:
- नींद के पूरे समय का सेशन.
- नींद के सेशन के दौरान अलग-अलग चरण, जैसे कि हल्की नींद या गहरी नींद.
यहां नींद के चरणों के बिना नींद का सेशन जोड़ने का तरीका बताया गया है:
SleepSessionRecord( title = "weekend sleep", startTime = startTime, endTime = endTime, startZoneOffset = ZoneOffset.UTC, endZoneOffset = ZoneOffset.UTC, )
नींद के सेशन की पूरी अवधि को कवर करने वाले चरण जोड़ने का तरीका यहां बताया गया है:
val stages = listOf(
SleepSessionRecord.Stage(
startTime = START_TIME,
endTime = END_TIME,
stage = SleepSessionRecord.STAGE_TYPE_SLEEPING,
)
)
SleepSessionRecord(
title = "weekend sleep",
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET,
stages = stages,
)
नींद के सेशन का डेटा पढ़ने की अनुमति दें
नींद के हर सेशन के लिए, आपको यह देखना चाहिए कि नींद की स्टेज का डेटा भी मौजूद है या नहीं:
val response = healthConnectClient.readRecords( ReadRecordsRequest( SleepSessionRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) for (sleepRecord in response.records) { // Retrieve relevant sleep stages from each sleep record val sleepStages = sleepRecord.stages }
नींद का सेशन मिटाना
किसी सेशन को मिटाने का तरीका यहां बताया गया है. इस उदाहरण के लिए, हमने नींद के सेशन का इस्तेमाल किया है:
val timeRangeFilter = TimeRangeFilter.between(sleepRecord.startTime, sleepRecord.endTime) healthConnectClient.deleteRecords(SleepSessionRecord::class, timeRangeFilter)