কাঁচা তথ্য পড়ুন

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

ডেটা পড়ুন

Health Connect অ্যাপগুলিকে ডেটাস্টোর থেকে ডেটা পড়ার অনুমতি দেয় যখন অ্যাপটি অগ্রভাগে এবং পটভূমিতে থাকে:

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

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

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

রেকর্ড পড়তে, একটি ReadRecordsRequest তৈরি করুন এবং আপনি যখন readRecords কল করবেন তখন এটি সরবরাহ করুন।

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

suspend fun readStepsByTimeRange(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.readRecords(
            ReadRecordsRequest(
                StepsRecord::class,
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        for (stepRecord in response.records) {
            // Process each step record
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

পটভূমি পড়ার উদাহরণ

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

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

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

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

    override suspend fun doWork(): Result {
        // Read data and process it.
        ...

        // Return success indicating successful data retrieval
        return Result.success()
    }
}

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

    // Check if necessary permission is granted
    val grantedPermissions = healthConnectClient.permissionController.getGrantedPermissions()

    if (PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND !in grantedPermissions) {
        // Perform read in foreground
        ...
    } else {
        // Schedule the periodic work request in background
        val periodicWorkRequest = PeriodicWorkRequestBuilder<ScheduleWorker>(1, TimeUnit.HOURS)
            .build()

        WorkManager.getInstance(context).enqueueUniquePeriodicWork(
            "read_health_connect",
            ExistingPeriodicWorkPolicy.KEEP,
            periodicWorkRequest
        )
    }
} else {
  // Background reading is not available, perform read in foreground
  ...
}

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

pageToken পড়ার উদাহরণ

অনুরোধ করা সময়কাল থেকে সমস্ত উপলব্ধ ডেটা পুনরুদ্ধার করতে রেকর্ড পড়ার জন্য 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 এর সাথে পুনরায় সিঙ্ক করতে হবে।

কিছু পড়ার সীমাবদ্ধতা প্রযোজ্য:

  • Android 14 এবং উচ্চতর সংস্করণের জন্য

    • একটি অ্যাপের নিজস্ব ডেটা পড়ার কোনো ঐতিহাসিক সীমা নেই।
    • অন্যান্য ডেটা পড়ার একটি অ্যাপে 30-দিনের সীমা।
  • Android 13 এবং তার নিচের সংস্করণের জন্য

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

পড়ার অনুমতির অনুরোধ করে সীমাবদ্ধতাগুলি সরানো যেতে পারে।

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

নিম্নলিখিত উদাহরণ দেখায় কিভাবে একটি প্যাকেজ নাম নির্দেশ করতে হয় যখন ধাপ রেকর্ড পড়ার সময়:

try {
    val response =  healthConnectClient.readRecords(
        ReadRecordsRequest(
            recordType = StepsRecord::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
}

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

ডিফল্টরূপে, সমস্ত অ্যাপ্লিকেশন স্বাস্থ্য সংযোগ থেকে 30 দিন পর্যন্ত ডেটা পড়তে পারে যখন কোনও অনুমতি প্রথম দেওয়া হয়েছিল।

আপনি যদি ডিফল্ট বিধিনিষেধের বাইরে পড়ার অনুমতিগুলি প্রসারিত করতে চান তবে PERMISSION_READ_HEALTH_DATA_HISTORY এর অনুরোধ করুন৷ অন্যথায়, এই অনুমতি ব্যতীত, 30 দিনের বেশি পুরানো রেকর্ড পড়ার চেষ্টা করলে একটি ত্রুটি দেখা দেয়।

মুছে ফেলা অ্যাপের অনুমতির ইতিহাস

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

উদাহরণস্বরূপ, ধরুন ব্যবহারকারী আপনার অ্যাপটি 10 ​​মে, 2023-এ মুছে ফেলে এবং তারপর 15 মে, 2023-এ অ্যাপটি পুনরায় ইনস্টল করে এবং পড়ার অনুমতি দেয়। আপনার অ্যাপটি এখন থেকে ডিফল্টভাবে ডেটা পড়তে পারে তা হল 15 এপ্রিল, 2023।