মনোযোগ সহকারে কাটানো সময় ট্র্যাক করা

এই নির্দেশিকা 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 Store থেকে Health Connect ইনস্টল বা আপডেট করার ব্যাপারে গাইড করতে পারবেন।

ফিচারের উপলভ্যতা

কোনও ব্যবহারকারীর ডিভাইসে 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_MINDFULNESS
  • android.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_UNKNOWN
  • MINDFULNESS_SESSION_TYPE_MEDITATION
  • MINDFULNESS_SESSION_TYPE_BREATHING
  • MINDFULNESS_SESSION_TYPE_MUSIC
  • MINDFULNESS_SESSION_TYPE_MOVEMENT
  • MINDFULNESS_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}")
}