প্রসেস না করা ডেটা পড়া

সাধারণ ওয়ার্কফ্লোর অংশ হিসেবে কীভাবে কাঁচা ডেটা পড়তে হয় তা নিম্নলিখিত উদাহরণ থেকে দেখুন।

ডেটা দেখা

অ্যাপ ফোরগ্রাউন্ড ও ব্যাকগ্রাউন্ডে থাকলে Health Connect, ডেটা স্টোর থেকে ডেটা পড়ার জন্য অ্যাপকে অনুমতি দেয়:

  • ফোরগ্রাউন্ড রিড: আপনার অ্যাপ ফোরগ্রাউন্ডে থাকলে আপনি সাধারণত Health Connect থেকে ডেটা রিড করতে পারবেন। এইসব ক্ষেত্রে, রিড অপারেশন চলাকালীন ব্যবহারকারী বা সিস্টেম আপনার অ্যাপকে ব্যাকগ্রাউন্ডে রাখলে, এই অপারেশন চালানোর জন্য আপনি ফোরগ্রাউন্ড সার্ভিস ব্যবহার করার কথা বিবেচনা করতে পারেন।

  • ব্যাকগ্রাউন্ড রিড: ব্যবহারকারীর থেকে অতিরিক্ত অনুমতি চেয়ে, ব্যবহারকারী বা সিস্টেম আপনার অ্যাপ ব্যাকগ্রাউন্ডে রাখলে আপনি ডেটা পড়তে পারবেন। সম্পূর্ণ ব্যাকগ্রাউন্ড রিড উদাহরণ দেখুন।

Health Connect-এর 'স্টেপ' ডেটা টাইপ, রিডিংয়ের মধ্যে কোনও ব্যবহারকারী কতগুলি ধাপ হেঁটেছেন তা ক্যাপচার করে। স্টেপ কাউন্ট হল স্বাস্থ্য, ফিটনেস ও সুস্থতা সংক্রান্ত প্ল্যাটফর্ম জুড়ে একটি সাধারণ পরিমাপ। Health Connect আপনাকে ধাপে ধাপে ডেটা পড়তে ও লিখতে দেয়।

রেকর্ড পড়তে, একটি ReadRecordsRequest তৈরি করুন এবং আপনি readRecords কল করলে এটি দিন।

নিচের উদাহরণে দেখানো হয়েছে যে কীভাবে কোনও ব্যবহারকারীর জন্য একটি নির্দিষ্ট সময়ের মধ্যে ধাপ গণনা সংক্রান্ত ডেটা পড়তে হয়। SensorManager সহ আরও বিস্তারিত উদাহরণের জন্য, ধাপ গণনা সংক্রান্ত ডেটা নির্দেশিকা দেখুন।

val response = healthConnectClient.readRecords(
    ReadRecordsRequest(
        HeartRateRecord::class,
        timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
    )
)
response.records.forEach { record ->
    /* Process records */
}

এছাড়াও, আপনি aggregate ব্যবহার করে আপনার ডেটা সামগ্রিকভাবে পড়তে পারবেন।

suspend fun readStepsAggregate(startTime: Instant, endTime: Instant): Long {
    val response = healthConnectClient.aggregate(
        AggregateRequest(
            metrics = setOf(StepsRecord.COUNT_TOTAL),
            timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
        )
    )
    return response[StepsRecord.COUNT_TOTAL] ?: 0L
}

মোবাইল স্টেপ রিডিং

Android 14 (API লেভেল 34) এবং SDK এক্সটেনশন ভার্সন 20 বা তার পরের যেকোনও ভার্সনে, Health Connect ডিভাইসে স্টেপ গণনা করার সুবিধা প্রদান করে। কোনও অ্যাপকে READ_STEPS অনুমতি দেওয়া হলে, Health Connect Android-পরিচালিত ডিভাইস থেকে স্টেপ ক্যাপচার করা শুরু করে এবং ব্যবহারকারীরা Health Connect-এ অটোমেটিক যোগ করা স্টেপ এন্ট্রি দেখতে পান।

ডিভাইসে স্টেপ কাউন্টিং উপলভ্য আছে কিনা তা চেক করতে, ডিভাইসটি Android 14 (API লেভেল 34) ভার্সনে চলছে কিনা এবং এতে অন্তত SDK এক্সটেনশন ভার্সন 20 আছে কিনা তা যাচাই করুন:

val isStepTrackingAvailable =
    Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE &&
        SdkExtensions.getExtensionVersion(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) >= 20

আপনার অ্যাপ যদি aggregate ব্যবহার করে মোট ধাপের সংখ্যা পড়ে এবং DataOrigin অনুযায়ী ফিল্টার না করে, তাহলে ডিভাইসে ধাপের সংখ্যা অটোমেটিক মোট সংখ্যার মধ্যে অন্তর্ভুক্ত করা হয় এবং জুন, ২০২৬ আপডেট করার জন্য কোনও পরিবর্তন করার প্রয়োজন নেই।

অন-ডিভাইস ধাপের জন্য অ্যাট্রিবিউশন পরিবর্তন

জুন ২০২৬ আপডেট থেকে, Health Connect-এর মাধ্যমে ট্র্যাক করা পদক্ষেপগুলি সিন্থেটিক প্যাকেজ নামের (SPN) সাথে অ্যাট্রিবিউট করা হয়, যেমন com.android.healthconnect.phone.jd5bdd37e1a8d3667a05d0abebfc4a89e।

আগে, বিল্ট-ইন ধাপগুলি প্যাকেজের নাম android-এর সাথে অ্যাট্রিবিউট করা হত। জুন ২০২৬-এর আগে রেকর্ড করা ঐতিহাসিক ধাপের ডেটা android প্যাকেজ নাম ধরে রাখে।

SPN ডিভাইস-নির্দিষ্ট এবং ব্যবহারকারীর গোপনীয়তা সুরক্ষিত রাখতে প্রতিটি অ্যাপ্লিকেশনের ভিত্তিতে স্কোপ করা হয়:

  • স্থিতিশীল: বর্তমান ডিভাইসের SPN আপনার অ্যাপ্লিকেশনের জন্য স্থিতিশীল।
  • অ্যাপ্লিকেশন-স্কোপ: একই ডিভাইসে থাকা আলাদা আলাদা অ্যাপ্লিকেশন, ডিভাইসে সেভ করা স্টেপ ডেটার জন্য আলাদা আলাদা SPN দেখতে পায়।

অন-ডিভাইস ধাপের জন্য কোয়েরি করা

SPN স্কোপ ও ডিভাইস-নির্দিষ্ট হওয়ার কারণে, আপনাকে অবশ্যই SPN ভ্যালু হার্ডকোড করা চলবে না। পরিবর্তে, বর্তমান ডিভাইসের SPN পেতে getCurrentDeviceDataSource() API ব্যবহার করুন।

ডিভাইসে স্টেপ গণনা করার জন্য SDK এক্সটেনশন ভার্সন ২০ বা তার পরবর্তী যেকোনও ভার্সন প্রয়োজন হলেও, getCurrentDeviceDataSource() API, SDK এক্সটেনশন ভার্সন ১১ বা তার পরবর্তী যেকোনও ভার্সনের সাথে Android 14 (API লেভেল ৩৪)-এ উপলভ্য।

getCurrentDeviceDataSource() API এখনও Health Connect Jetpack লাইব্রেরিতে উপলভ্য নেই। নিম্নলিখিত উদাহরণে Android ফ্রেমওয়ার্ক API ব্যবহার করা হয়েছে:

import android.content.Context
import android.health.connect.HealthConnectManager

val healthConnectManager = context.getSystemService(HealthConnectManager::class.java)
val deviceDataSource = healthConnectManager?.getCurrentDeviceDataSource()
val currentDeviceSpn = deviceDataSource?.deviceDataOrigin?.packageName

আপনার অ্যাপকে যদি ডিভাইসে সেভ করা ধাপ পড়তে হয় অথবা এটি যদি সোর্স অ্যাপ্লিকেশন বা ডিভাইস অনুযায়ী ভাগ করা ধাপের ডেটা দেখায়, তাহলে আপনাকে অবশ্যই এমন রেকর্ড কোয়েরি করতে হবে যেখানে DataOrigin android অথবা ডিভাইসের SPN-এর সাথে ম্যাচ করে। আপনার অ্যাপে স্টেপ ডেটার জন্য অ্যাট্রিবিউশন দেখালে, স্বতন্ত্র রেকর্ড এর জন্য সোর্স ডিভাইস শনাক্ত করতে metadata.device ব্যবহার করুন। অ্যাগ্রিগেট করা ডেটাতে SPN দ্বারা শনাক্ত করা অন-ডিভাইস ধাপের জন্য, অ্যাট্রিবিউশনের জন্য আপনি DeviceDataSource থেকে model বা manufacturer-এর মতো ডিভাইস মেটাডেটা ব্যবহার করতে পারেন অথবা অন-ডিভাইস ধাপের জন্য "আপনার ফোন"-এর মতো জেনেরিক লেবেল ব্যবহার করতে পারেন।

android ও বর্তমান ডিভাইসের SPN, দু'টির জন্য ফিল্টার করে কীভাবে ডিভাইসে সেভ করা মোট ধাপের সংখ্যা সংক্রান্ত ডেটা পড়তে হয় তা নিচের উদাহরণে দেখানো হয়েছে:

import android.content.Context
import android.health.connect.HealthConnectManager
import android.os.Build
import android.os.ext.SdkExtensions
import androidx.health.connect.client.HealthConnectClient
import androidx.health.connect.client.records.StepsRecord
import androidx.health.connect.client.records.metadata.DataOrigin
import androidx.health.connect.client.request.AggregateRequest
import androidx.health.connect.client.time.TimeRangeFilter
import java.time.Instant

suspend fun readDeviceStepsByTimeRange(
    healthConnectClient: HealthConnectClient,
    context: Context,
    startTime: Instant,
    endTime: Instant
) {
    // 1. Check if SDK Extension 11+ is available for getCurrentDeviceDataSource()
    val isDataSourceApiAvailable = Build.VERSION.SDK_INT >= Build.VERSION_CODES.U &&
            SdkExtensions.getExtensionVersion(Build.VERSION_CODES.U) >= 11

    try {
        val healthConnectManager = context.getSystemService(HealthConnectManager::class.java)

        // 2. Safely fetch the package name only if API is available and data exists
        val currentDeviceSpn = if (isDataSourceApiAvailable) {
            healthConnectManager?.getCurrentDeviceDataSource()?.deviceDataOrigin?.packageName
        } else {
            null
        }

        val dataOriginFilters = mutableSetOf(DataOrigin("android"))

        // 3. Explicit null-safety check using .let
        currentDeviceSpn?.let {
            dataOriginFilters.add(DataOrigin(it))
        }

        val response = healthConnectClient.aggregate(
            AggregateRequest(
                metrics = setOf(StepsRecord.COUNT_TOTAL),
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                dataOriginFilter = dataOriginFilters
            )
        )

        val stepCount = response[StepsRecord.COUNT_TOTAL]

    } catch (e: Exception) {
        // Now this catch block only handles actual runtime exceptions, 
        // rather than Errors from missing methods.
    }
}

ডিভাইসে স্টেপ গণনা করা

  • সেন্সর ব্যবহার: Health Connect SensorManager থেকে TYPE_STEP_COUNTER সেন্সর ব্যবহার করে। এই সেন্সরটি কম বিদ্যুৎ খরচ করার জন্য অপ্টিমাইজ করা হয়েছে, এটি নিরবচ্ছিন্ন ব্যাকগ্রাউন্ড স্টেপ ট্র্যাকিংয়ের জন্য আদর্শ।
  • ডেটা গ্র্যানুলারিটি: ব্যাটারির আয়ু বাঁচানোর জন্য, স্টেপ ডেটা সাধারণত ব্যাচ করা হয় এবং Health Connect ডেটাবেসে এক মিনিটের মধ্যে একবারের বেশি লেখা হয় না।
  • অ্যাট্রিবিউশন: জুন ২০২৬-এর আগে এই ফিচারের রেকর্ড করা ধাপগুলি DataOrigin-এ android প্যাকেজ নামের সাথে অ্যাট্রিবিউট করা হয়। এই তারিখের পরে, সেগুলি ডিভাইস-নির্দিষ্ট SPN-এর সাথে অ্যাট্রিবিউট করা হয়। অন-ডিভাইস স্টেপের জন্য অ্যাট্রিবিউশন পরিবর্তন দেখুন।
  • অ্যাক্টিভেশন: ডিভাইসে থাকা স্টেপ গণনা করার মেকানিজম তখনই অ্যাক্টিভ থাকে যখন ডিভাইসে অন্তত একটি অ্যাপ্লিকেশনকে Health Connect-এর মধ্যে READ_STEPS অনুমতি দেওয়া হয়।

ব্যাকগ্রাউন্ড রিড সংক্রান্ত উদাহরণ

ব্যাকগ্রাউন্ডে ডেটা পড়ার জন্য, আপনার ম্যানিফেস্ট ফাইলে নিম্নলিখিত অনুমতি ঘোষণা করুন:

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

WorkManager ব্যবহার করে নির্দিষ্ট সময়ের মধ্যে কোনও ব্যবহারকারীর জন্য ব্যাকগ্রাউন্ডে কীভাবে ধাপ গণনা সংক্রান্ত ডেটা পড়তে হয় তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

class ScheduleWorker(appContext: Context, workerParams: WorkerParameters) :
    CoroutineWorker(appContext, workerParams) {

    override suspend fun doWork(): Result {
        val healthConnectClient = HealthConnectClient.getOrCreate(applicationContext)
        // Perform background read logic here
        return Result.success()
    }
}
fun enqueueBackgroundReadWorker(context: Context, healthConnectClient: HealthConnectClient) {
    if (healthConnectClient
            .features
            .getFeatureStatus(
                HealthConnectFeatures.FEATURE_READ_HEALTH_DATA_IN_BACKGROUND
            ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE
    ) {

        val periodicWorkRequest = PeriodicWorkRequestBuilder<ScheduleWorker>(1, TimeUnit.HOURS)
            .build()

        WorkManager.getInstance(context).enqueueUniquePeriodicWork(
            "read_health_connect",
            ExistingPeriodicWorkPolicy.KEEP,
            periodicWorkRequest
        )
    }
}

ReadRecordsRequest প্যারামিটারের ডিফল্ট pageSize ভ্যালু হল ১০০০। একটি readResponse-এ রেকর্ড সংখ্যা যদি অনুরোধের pageSize থেকে বেশি হয়, তাহলে pageToken ব্যবহার করে সব রেকর্ড রিট্রিভ করতে আপনাকে উত্তরের সব পৃষ্ঠা জুড়ে ইটারেট করতে হবে। তবে, রেট-লিমিটিং সংক্রান্ত সমস্যা এড়াতে সতর্ক থাকুন।

page টোকেন রিড করার উদাহরণ

অনুরোধ করা সময়সীমা থেকে উপলভ্য সব ডেটা পেতে, রেকর্ড পড়ার জন্য pageToken ব্যবহার করার সাজেশন দেওয়া হয়।

নিচে দেওয়া উদাহরণ থেকে বোঝা যায় যে কীভাবে সবকটি পৃষ্ঠা টোকেন শেষ না হওয়া পর্যন্ত সব রেকর্ড পড়তে হয়:

val type = HeartRateRecord::class
val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofDays(7))

try {
    var pageToken: String? = null
    do {
        val readResponse =
            healthConnectClient.readRecords(
                ReadRecordsRequest(
                    recordType = type,
                    timeRangeFilter = TimeRangeFilter.between(
                        startTime,
                        endTime
                    ),
                    pageToken = pageToken
                )
            )
        val records = readResponse.records
        // Do something with records
        pageToken = readResponse.pageToken
    } while (pageToken != null)
} catch (quotaError: IllegalStateException) {
    // Backoff
}
বড় ডেটাসেট পড়ার সময় পেশাদার পদ্ধতি সম্পর্কে জানতে, রেট লিমিট এড়ানোর পরিকল্পনা করুন।

আগে লেখা ডেটা পড়া

কোনও অ্যাপ যদি আগে Health Connect-এ রেকর্ড লিখে থাকে, তাহলে সেই অ্যাপের পক্ষে ঐতিহাসিক ডেটা পড়া সম্ভব। এটি সেইসব পরিস্থিতির ক্ষেত্রে প্রযোজ্য যেখানে ব্যবহারকারী অ্যাপটি আবার ইনস্টল করার পরে Health Connect-এর সাথে আবার সিঙ্ক করতে হবে।

কিছু পড়ার বিধিনিষেধ প্রযোজ্য:

  • Android 14 ও এর পরের যেকোনও ভার্সনের জন্য

    • কোনও অ্যাপের নিজের ডেটা রিড করার ক্ষেত্রে কোনও ঐতিহাসিক সীমা নেই।
    • অন্য ডেটা রিড করার জন্য অ্যাপের উপর ৩০ দিনের সীমা।
  • Android 13 ও এর আগের যেকোনও ভার্সনের জন্য

    • অ্যাপের কোনও ডেটা রিড করার ক্ষেত্রে ৩০ দিনের সীমা।

পড়তে দেওয়ার অনুমতি চেয়ে বিধিনিষেধ সরানো যেতে পারে।

পুরনো ডেটা পড়তে, আপনাকে প্যাকেজের নামকে আপনার ReadRecordsRequest-এর dataOriginFilter প্যারামিটারে DataOrigin অবজেক্ট হিসেবে দেখাতে হবে।

নিম্নলিখিত উদাহরণে দেখানো হয়েছে যে হার্ট রেট রেকর্ড পড়তে প্যাকেজের নাম কীভাবে উল্লেখ করতে হয়:

try {
    val response =  healthConnectClient.readRecords(
        ReadRecordsRequest(
            recordType = HeartRateRecord::class,
            timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
            dataOriginFilter = setOf(DataOrigin("com.my.package.name"))
        )
    )
    for (record in response.records) {
        // Process each record
    }
} catch (e: Exception) {
    // Run error handling here
}

অনন্য ডিভাইস শনাক্তকারী (UDI) পড়া

মেডিক্যাল-গ্রেড ডিভাইস থেকে প্রাপ্ত রেকর্ডের ক্ষেত্রে, রিডিং অ্যাপ্লিকেশন ডিভাইস মেটাডেটা থেকে অনন্য ডিভাইস শনাক্তকারীর (UDI) ডিভাইস শনাক্তকারী (DI) অংশটি এক্সট্র্যাক্ট করতে পারে। এই তথ্য কীভাবে প্রসেস করতে হবে এবং রেগুলেশন সংক্রান্ত ডেটাবেসের সাথে ম্যাপ করতে হবে সেই বিষয়ে নির্দেশিকা পেতে, মেটাডেটা নির্দেশিকা দেখুন।

৩০ দিনের বেশি পুরনো ডেটা পড়া

সাধারণত, কোনও অনুমতি প্রথমবার দেওয়ার আগে পর্যন্ত ৩০ দিন Health Connect থেকে সব অ্যাপ্লিকেশন ডেটা পড়তে পারে।

আপনাকে যদি কোনও ডিফল্ট বিধিনিষেধের বাইরে রিড অ্যাক্সেস বাড়াতে হয়, তাহলে PERMISSION_READ_HEALTH_DATA_HISTORY-এর জন্য অনুরোধ করুন। অন্যথায়, এই অনুমতি না থাকলে, ৩০ দিনের পুরনো রেকর্ড পড়ার চেষ্টা করলে সমস্যা হয়।

মুছে দেওয়া অ্যাপের জন্য অনুমতির ইতিহাস

কোনও ব্যবহারকারী আপনার অ্যাপ মুছে দিলে, ইতিহাস সংক্রান্ত অনুমতি সহ সব অনুমতি প্রত্যাহার করা হয়। ব্যবহারকারী আপনার অ্যাপ আবার ইনস্টল করে অনুমতি দিলে, একই ডিফল্ট বিধিনিষেধ প্রযোজ্য হবে এবং আপনার অ্যাপ সেই নতুন তারিখের আগের ৩০ দিন পর্যন্ত Health Connect থেকে ডেটা পড়তে পারবে।

যেমন, ধরুন ব্যবহারকারী ১০ মে, ২০২৩-এ আপনার অ্যাপ মুছে দিয়েছেন এবং তারপরে ১৫ মে, ২০২৩-এ অ্যাপটি আবার ইনস্টল করে পড়ার অনুমতি দিয়েছেন। আপনার অ্যাপ এখন ডিফল্ট হিসেবে সবচেয়ে আগের যে তারিখের ডেটা পড়তে পারবে সেটি হল ১৫ এপ্রিল, ২০২৩।

ব্যতিক্রম ম্যানেজ করা

কোনও সমস্যা হলে Health Connect CRUD অপারেশনের জন্য স্ট্যান্ডার্ড ব্যতিক্রম ফেলে দেয়। আপনার অ্যাপকে এইসব ব্যতিক্রমের প্রতিটি যথাযথভাবে ধরতে ও হ্যান্ডেল করতে হবে।

HealthConnectClient-এর প্রতিটি পদ্ধতিতে ব্যতিক্রমের তালিকা দেওয়া আছে যা প্রয়োগ করা যেতে পারে। সাধারণত, আপনার অ্যাপকে নিম্নলিখিত ব্যতিক্রমগুলি হ্যান্ডেল করতে হবে:

সারণী ১: Health Connect ব্যতিক্রম ও সাজেস্ট করা পেশাদার পদ্ধতি
ব্যতিক্রম বিবরণ সাজেস্ট করা পেশাদার পদ্ধতি
IllegalStateException নিম্নলিখিত পরিস্থিতিগুলির মধ্যে কোনও একটি ঘটেছে:

  • Health Connect পরিষেবা উপলভ্য নেই।
  • অনুরোধটি সঠিক নয়। যেমন, পিরিয়ডিক বাকেটে এগ্রিগেট করা অনুরোধ যেখানে timeRangeFilter-এর জন্য Instant অবজেক্ট ব্যবহার করা হয়।

অনুরোধ করার আগে ইনপুট সংক্রান্ত সম্ভাব্য সমস্যার সমাধান করুন। ভাল হয়, আপনার অনুরোধে সরাসরি ব্যবহার না করে, কাস্টম ফাংশনের মধ্যে ভেরিয়েবলকে ভ্যালু অ্যাসাইন করুন বা প্যারামিটার হিসেবে ব্যবহার করুন, যাতে আপনি এরর হ্যান্ডেলিং স্ট্র্যাটেজি প্রয়োগ করতে পারেন।
IOException ডিস্ক থেকে ডেটা রিড ও রাইট করার সময় সমস্যা হয়েছে। এই সমস্যা এড়াতে, এখানে কিছু সাজেশন দেওয়া হল:

  • যেকোনও ব্যবহারকারীর ইনপুটের ব্যাক-আপ নেওয়া।
  • বাল্ক রাইট অপারেশন চলাকালীন হওয়া যেকোনও সমস্যা সমাধান করতে পারা। যেমন, প্রক্রিয়াটি যাতে সমস্যাটি পেরিয়ে যেতে পারে এবং বাকি অপারেশনগুলি সম্পূর্ণ করতে পারে তা নিশ্চিত করুন।
  • অনুরোধ সংক্রান্ত সমস্যা সামলাতে আবার চেষ্টা করা ও ব্যাকঅফ স্ট্র্যাটেজি প্রয়োগ করা।

RemoteException SDK যে অন্তর্নিহিত পরিষেবার সাথে কানেক্ট করে, তার মধ্যে বা তার সাথে যোগাযোগ করার সময় সমস্যা হয়েছে।

যেমন, আপনার অ্যাপ প্রদত্ত uid সহ একটি রেকর্ড মুছে ফেলার চেষ্টা করছে। তবে, অ্যাপটি অন্তর্নিহিত পরিষেবা চেক করার পরে যখন জানতে পারে যে রেকর্ডটি নেই, তখন ব্যতিক্রম ঘটে।
এই সমস্যা এড়াতে, এখানে কিছু সাজেশন দেওয়া হল:

  • আপনার অ্যাপের ডেটা স্টোর ও Health Connect-এর মধ্যে নিয়মিত সিঙ্ক করুন।
  • অনুরোধ সংক্রান্ত সমস্যা সামলাতে আবার চেষ্টা করা ও ব্যাকঅফ স্ট্র্যাটেজি প্রয়োগ করা।

SecurityException অনুরোধের জন্য মঞ্জুর করা হয়নি এমন অনুমতি প্রয়োজন হলে সমস্যা হয়। এটি এড়াতে, আপনার প্রকাশিত অ্যাপের জন্য আপনি যে Health Connect ডেটা ধরনের ব্যবহার ঘোষণা করেছেন তা নিশ্চিত করুন। এছাড়াও, আপনাকে Health Connect-এর অনুমতি ম্যানিফেস্ট ফাইলে এবং আপনার অ্যাক্টিভিটিতে ঘোষণা করতে হবে।