ত্বকের তাপমাত্রা পরিমাপ করা

এই নির্দেশিকা Health Connect-এর 1.1.0-alpha12 ভার্সনের সাথে মানানসই।

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_SKIN_TEMPERATURE-এর উপলভ্যতা চেক করুন:

if (healthConnectClient
     .features
     .getFeatureStatus(
       HealthConnectFeatures.FEATURE_SKIN_TEMPERATURE
     ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

  // Feature is available
} else {
  // Feature isn't available
}
আরও জানতে ফিচারের উপলভ্যতা চেক করুন। -এর মতো ক্লাস ব্যবহার করুন।

প্রয়োজনীয় অনুমতি

নিম্নলিখিত অনুমতি দ্বারা ত্বকের তাপমাত্রা সংক্রান্ত ডেটার অ্যাক্সেস সুরক্ষিত থাকে:

  • android.permission.health.READ_SKIN_TEMPERATURE
  • android.permission.health.WRITE_SKIN_TEMPERATURE

আপনার অ্যাপে ত্বকের তাপমাত্রা সংক্রান্ত ফিচার যোগ করতে, SkinTemperature ডেটা টাইপের জন্য অনুমতি চেয়ে শুরু করুন।

ত্বকের তাপমাত্রা লেখার জন্য আপনাকে এই অনুমতি ঘোষণা করতে হবে:

<application>
  <uses-permission
android:name="android.permission.health.WRITE_SKIN_TEMPERATURE" />
...
</application>

ত্বকের তাপমাত্রা রিড করার জন্য, আপনাকে নিম্নলিখিত অনুমতিগুলির জন্য অনুরোধ করতে হবে:

<application>
  <uses-permission
android:name="android.permission.health.READ_SKIN_TEMPERATURE" />
...
</application>

ব্যবহারকারীর থেকে অনুমতি চাওয়া

ক্লায়েন্ট ইনস্ট্যান্স তৈরি করার পরে, আপনার অ্যাপকে ব্যবহারকারীর কাছে অনুমতি চেয়ে অনুরোধ করতে হবে। ব্যবহারকারীদের যেকোনও সময় অনুমতি দেওয়া বা প্রত্যাহার করার সুবিধা দিতে হবে। এটি করতে, প্রয়োজনীয় ডেটার ধরনের জন্য অনুমতির একটি সেট তৈরি করুন। সেটে থাকা অনুমতিগুলি প্রথমে আপনার Android মেনিফেস্টে ঘোষণা করা হয়েছে কিনা তা ভালো করে দেখে নিন।

val permissions =
    setOf(
        HealthPermission.getReadPermission(SkinTemperatureRecord::class),
        HealthPermission.getWritePermission(SkinTemperatureRecord::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.") }
    }
}
যেহেতু ব্যবহারকারীরা যেকোনও সময় অনুমতি দিতে বা প্রত্যাহার করতে পারেন, তাই আপনার অ্যাপকে প্রতিবার অনুমতি ব্যবহার করার আগে তা চেক করতে হবে এবং অনুমতি প্রত্যাহার করা হলে সেই পরিস্থিতি সামলাতে হবে।

ত্বকের তাপমাত্রা রেকর্ডে অন্তর্ভুক্ত তথ্য

ত্বকের তাপমাত্রা সংক্রান্ত পরিমাপ রেকর্ড হিসেবে সাজানো থাকে। প্রতিটি রেকর্ডে নিম্নলিখিত তথ্য থাকে:

  • বেসলাইন তাপমাত্রা, ডিগ্রি সেলসিয়াস বা ডিগ্রি ফারেনহাইটে। এটি একটি ঐচ্ছিক ভ্যালু যা আপনার অ্যাপের UI-তে ভিজ্যুয়ালাইজেশনের জন্য সবচেয়ে উপযোগী।
  • ত্বকের তাপমাত্রার ডেল্টার তালিকা, প্রতিটিই শেষ পরিমাপের পর থেকে ত্বকের তাপমাত্রার পরিবর্তন দেখাচ্ছে। বেসলাইন তাপমাত্রা প্রদান করা হলে, এই ডেল্টায় একই তাপমাত্রা একক ব্যবহার করা উচিত।
  • ব্যবহারকারীর শরীরে যে লোকেশনে পরিমাপ নেওয়া হয়েছে: আঙুল, পায়ের আঙুল বা কবজি।

যেসব এগ্রিগেশন কাজ করে

SkinTemperatureRecord-এর জন্য নিম্নলিখিত অ্যাগ্রিগেট ভ্যালু উপলভ্য:

ব্যবহারের উদাহরণ

নিচের কোড স্নিপেট থেকে কীভাবে ত্বকের তাপমাত্রা মাপতে হয় তা জানতে পারবেন।

ত্বকের তাপমাত্রা সংক্রান্ত রেকর্ড পড়া

Jetpack লাইব্রেরি ব্যবহার করে কীভাবে ত্বকের তাপমাত্রা মাপতে হয় তা নিম্নলিখিত কোড স্নিপেট থেকে বোঝা যাবে:

suspend fun readSkinTemperatures() {
    // Error handling, permission check, and feature availability check
    // aren't included.

    // Record includes measurements during the past hour.
    val recordEndTime = Instant.now()
    val recordStartTime = recordEndTime.minusSeconds(60 * 60)

    val response = healthConnectClient.readRecords(
        ReadRecordsRequest<SkinTemperatureRecord>(
            timeRangeFilter = TimeRangeFilter.between(
                recordStartTime, recordEndTime
            )
        )
    )

    for (skinTemperatureRecord in response.records) {
        // Process each skin temperature record here.
    }
}

শরীরের তাপমাত্রা সংক্রান্ত রেকর্ড লেখা

Jetpack লাইব্রেরি ব্যবহার করে কীভাবে ত্বকের তাপমাত্রা মাপতে হয় তা নিম্নলিখিত কোড স্নিপেট থেকে বোঝা যাবে:


suspend fun writeSkinTemperatures(): InsertRecordsResponse {
    // Error handling, permission check, and feature availability check
    // aren't included.

    // Record includes measurements during the past hour.
    val recordEndTime: ZonedDateTime = now()
    val recordStartTime: ZonedDateTime = recordEndTime.minusHours(1)

    healthConnectClient.insertRecords(
        // For this example, there's only one skin temperature record.
        listOf(
            SkinTemperatureRecord(
                baseline = Temperature.celsius(37.0),
                startTime = recordStartTime.toInstant(),
                startZoneOffset = recordStartTime.offset,
                endTime = recordEndTime.toInstant(),
                endZoneOffset = recordEndTime.offset,
                deltas = listOf(
                    SkinTemperatureRecord.Delta(
                        recordEndTime.minusMinutes(50).toInstant(), celsius(0.5)
                    ), SkinTemperatureRecord.Delta(
                        recordEndTime.minusMinutes(30).toInstant(), celsius(-0.7)
                    )
                ),
                measurementLocation = SkinTemperatureRecord.MEASUREMENT_LOCATION_FINGER,
                metadata = Metadata.autoRecorded(
                    device = Device(type = Device.TYPE_RING)
                ),
            )
        )
    )
}