ডেটা লিখুন

এই নির্দেশিকাটি Health Connect সংস্করণ 1.1.0-alpha12 এর সাথে সামঞ্জস্যপূর্ণ।

এই নির্দেশিকাটি Health Connect-এ ডেটা লেখা বা আপডেট করার প্রক্রিয়া কভার করে।

ডেটা স্ট্রাকচার সেট আপ করুন

ডেটা লেখার আগে, আমাদের প্রথমে রেকর্ডগুলি সেট আপ করতে হবে। 50 টিরও বেশি ডেটা প্রকারের জন্য, প্রতিটির নিজস্ব কাঠামো রয়েছে। উপলভ্য ডেটা টাইপ সম্পর্কে আরো বিস্তারিত জানার জন্য Jetpack রেফারেন্স দেখুন।

মৌলিক রেকর্ড

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

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 120,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    )
)

পরিমাপের একক সহ রেকর্ড

Health Connect নির্ভুলতা প্রদানের জন্য তাদের পরিমাপের একক সহ মান সংরক্ষণ করতে পারে। একটি উদাহরণ হল পুষ্টি ডেটা টাইপ যা বিশাল এবং ব্যাপক। এতে মোট কার্বোহাইড্রেট থেকে ভিটামিন পর্যন্ত বিভিন্ন ধরনের ঐচ্ছিক পুষ্টির ক্ষেত্র রয়েছে। প্রতিটি ডেটা পয়েন্ট সেই পুষ্টির প্রতিনিধিত্ব করে যা সম্ভাব্যভাবে খাবার বা খাদ্য আইটেমের অংশ হিসাবে গ্রহণ করা হয়েছিল।

এই ডেটা টাইপে, সমস্ত পুষ্টি উপাদান Mass এককে উপস্থাপিত হয়, যখন energy Energy এককে উপস্থাপন করা হয়।

নীচের উদাহরণটি দেখায় যে কীভাবে একজন ব্যবহারকারী কলা খেয়েছেন তাদের জন্য পুষ্টির ডেটা সেট করবেন:

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(1))

val banana = NutritionRecord(
    name = "banana",
    energy = 105.0.kilocalories,
    dietaryFiber = 3.1.grams,
    potassium = 0.422.grams,
    totalCarbohydrate = 27.0.grams,
    totalFat = 0.4.grams,
    saturatedFat = 0.1.grams,
    sodium = 0.001.grams,
    sugar = 14.0.grams,
    vitaminB6 = 0.0005.grams,
    vitaminC = 0.0103.grams,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        device = Device(type = Device.TYPE_PHONE)
    )
)

সিরিজ ডেটা সহ রেকর্ড

Health Connect সিরিজ ডেটার একটি তালিকা সংরক্ষণ করতে পারে। একটি উদাহরণ হ'ল হার্ট রেট ডেটা টাইপ যা রিডিংয়ের মধ্যে সনাক্ত করা হার্টবিটের নমুনার একটি সিরিজ ক্যাপচার করে।

এই ডেটা টাইপে, প্যারামিটার samples হার্ট রেট নমুনার একটি তালিকা দ্বারা উপস্থাপিত হয়। প্রতিটি নমুনায় একটি beatsPerMinute মান এবং একটি time মান রয়েছে।

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(5))

val heartRateRecord = HeartRateRecord(
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    // records 10 arbitrary data, to replace with actual data
    samples = List(10) { index ->
        HeartRateRecord.Sample(
            time = startTime + Duration.ofSeconds(index.toLong()),
            beatsPerMinute = 100 + index.toLong(),
        )
    },
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    ))

ডেটা লিখুন

হেলথ কানেক্টের একটি সাধারণ কর্মপ্রবাহ হল ডেটা লেখা। রেকর্ড যোগ করতে, insertRecords ব্যবহার করুন।

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

suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
    val endTime = Instant.now()
    val startTime = endTime.minus(Duration.ofMinutes(5))
    try {
        val stepsRecord = StepsRecord(
            count = 120,
            startTime = startTime,
            endTime = endTime,
            startZoneOffset = ZoneOffset.UTC,
            endZoneOffset = ZoneOffset.UTC,
            metadata = Metadata.autoRecorded(
                device = Device(type = Device.TYPE_WATCH)
            )
        )
        healthConnectClient.insertRecords(listOf(stepsRecord))
    } catch (e: Exception) {
        // Run error handling here
    }
}

ডেটা আপডেট করুন

আপনার যদি এক বা একাধিক রেকর্ড পরিবর্তন করতে হয়, বিশেষ করে যখন আপনাকে Health Connect থেকে ডেটার সাথে আপনার অ্যাপ ডেটাস্টোর সিঙ্ক করতে হয়, আপনি আপনার ডেটা আপডেট করতে পারেন৷ বিদ্যমান ডেটা আপডেট করার দুটি উপায় রয়েছে যা রেকর্ডগুলি সন্ধান করতে ব্যবহৃত শনাক্তকারীর উপর নির্ভর করে।

মেটাডেটা

এটি প্রথমে Metadata ক্লাস পরীক্ষা করা মূল্যবান কারণ ডেটা আপডেট করার সময় এটি প্রয়োজনীয়। তৈরি করার সময়, Health Connect-এর প্রতিটি Record একটি metadata ক্ষেত্র থাকে। নিম্নলিখিত বৈশিষ্ট্যগুলি সিঙ্ক্রোনাইজেশনের জন্য প্রাসঙ্গিক:

বৈশিষ্ট্য বর্ণনা
id হেলথ কানেক্টের প্রতিটি Record একটি অনন্য id মান রয়েছে।
একটি নতুন রেকর্ড সন্নিবেশ করার সময় Health Connect স্বয়ংক্রিয়ভাবে এটি পূরণ করে
lastModifiedTime প্রতিটি Record শেষবার রেকর্ডটি পরিবর্তন করা হয়েছে তাও ট্র্যাক রাখে।
Health Connect স্বয়ংক্রিয়ভাবে এটি পূরণ করে।
clientRecordId আপনার অ্যাপ ডেটাস্টোরে রেফারেন্স হিসাবে পরিবেশন করার জন্য প্রতিটি Record সাথে যুক্ত একটি অনন্য আইডি থাকতে পারে।
আপনার অ্যাপ এই মান সরবরাহ করে।
clientRecordVersion যেখানে একটি রেকর্ডে clientRecordId আছে, clientRecordVersion ব্যবহার করা যেতে পারে আপনার অ্যাপ ডেটাস্টোরের সংস্করণের সাথে ডেটা সিঙ্কে থাকার জন্য।
আপনার অ্যাপ এই মান সরবরাহ করে।

রেকর্ড আইডির মাধ্যমে আপডেট করুন

ডেটা আপডেট করতে, প্রথমে প্রয়োজনীয় রেকর্ড প্রস্তুত করুন। প্রয়োজনে রেকর্ডে কোনো পরিবর্তন করুন। তারপরে, পরিবর্তন করতে updateRecords কল করুন।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে ডেটা আপডেট করতে হয়। এই উদ্দেশ্যে, প্রতিটি রেকর্ডের তার জোন অফসেট মানগুলি PST-তে সমন্বয় করা হয়েছে।

suspend fun updateSteps(
    healthConnectClient: HealthConnectClient,
    prevRecordStartTime: Instant,
    prevRecordEndTime: Instant
) {
    try {
        val request = healthConnectClient.readRecords(
            ReadRecordsRequest(
                recordType = StepsRecord::class, timeRangeFilter = TimeRangeFilter.between(
                    prevRecordStartTime, prevRecordEndTime
                )
            )
        )

        val newStepsRecords = arrayListOf<StepsRecord>()
        for (record in request.records) {
            // Adjusted both offset values to reflect changes
            val sr = StepsRecord(
                count = record.count,
                startTime = record.startTime,
                startZoneOffset = record.startTime.atZone(ZoneId.of("PST")).offset,
                endTime = record.endTime,
                endZoneOffset = record.endTime.atZone(ZoneId.of("PST")).offset,
                metadata = record.metadata
            )
            newStepsRecords.add(sr)
        }

        healthConnectClient.updateRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

ক্লায়েন্ট রেকর্ড আইডি মাধ্যমে আপসার্ট

আপনি যদি ঐচ্ছিক ক্লায়েন্ট রেকর্ড আইডি এবং ক্লায়েন্ট রেকর্ড সংস্করণ মান ব্যবহার করেন, আমরা updateRecords এর পরিবর্তে insertRecords ব্যবহার করার পরামর্শ দিই।

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

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে অ্যাপ ডেটাস্টোর থেকে টেনে আনা ডেটার উপর একটি আপসার্ট সম্পাদন করতে হয়:

suspend fun pullStepsFromDatastore() : ArrayList<StepsRecord> {
    val appStepsRecords = arrayListOf<StepsRecord>()
    // Pull data from app datastore
    // ...
    // Make changes to data if necessary
    // ...
    // Store data in appStepsRecords
    // ...
    var sr = StepsRecord(
        metadata = Metadata.autoRecorded(
            clientRecordId = "Your client record ID",
            device = Device(type = Device.TYPE_WATCH)
        ),
        // Assign more parameters for this record
    )
    appStepsRecords.add(sr)
    // ...
    return appStepsRecords
}

suspend fun upsertSteps(
    healthConnectClient: HealthConnectClient,
    newStepsRecords: ArrayList<StepsRecord>
) {
    try {
        healthConnectClient.insertRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

এর পরে, আপনি এই ফাংশনগুলিকে আপনার প্রধান থ্রেডে কল করতে পারেন।

upsertSteps(healthConnectClient, pullStepsFromDatastore())

ক্লায়েন্ট রেকর্ড সংস্করণে মান পরীক্ষা করুন

যদি আপনার ডেটা আপসার্ট করার প্রক্রিয়াতে ক্লায়েন্ট রেকর্ড সংস্করণ অন্তর্ভুক্ত থাকে, তাহলে Health Connect clientRecordVersion মানগুলির তুলনা পরীক্ষা করে। যদি সন্নিবেশিত ডেটা থেকে সংস্করণটি বিদ্যমান ডেটা থেকে সংস্করণের চেয়ে বেশি হয়, তাহলে উল্টোটা ঘটে। অন্যথায়, প্রক্রিয়াটি পরিবর্তন উপেক্ষা করে এবং মান একই থাকে।

আপনার ডেটাতে সংস্করণ অন্তর্ভুক্ত করতে, আপনাকে আপনার সংস্করণের যুক্তির উপর ভিত্তি করে একটি Long মান সহ Metadata.clientRecordVersion সরবরাহ করতে হবে।

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 100L,
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        clientRecordId = "Your supplied record ID",
        clientRecordVersion = 0L, // Your supplied record version
        device = Device(type = Device.TYPE_WATCH)
    )
)

যখনই পরিবর্তন হয় তখন আপসার্ট স্বয়ংক্রিয়ভাবে version বৃদ্ধি করে না, ডেটা ওভাররাইট করার কোনো অপ্রত্যাশিত ঘটনা প্রতিরোধ করে। এর সাথে, আপনাকে ম্যানুয়ালি এটি একটি উচ্চ মূল্যের সাথে সরবরাহ করতে হবে।

ডেটা লেখার জন্য সর্বোত্তম অনুশীলন

অ্যাপ্লিকেশানগুলিকে শুধুমাত্র স্বাস্থ্য সংযোগে নিজস্ব-উৎসিত ডেটা লিখতে হবে৷

যদি আপনার অ্যাপের ডেটা অন্য অ্যাপ থেকে ইম্পোর্ট করা হয়, তাহলে দায়িত্ব অন্য অ্যাপের উপর পড়ে স্বাস্থ্য কানেক্টে নিজের ডেটা লেখার।

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

ডেটা ট্র্যাক করার সময়, আপনার অ্যাপ যেভাবে ডেটা লিখে তার উপর নির্ভর করে আপনি অনুসরণ করতে পারেন এমন কয়েকটি পরামর্শ রয়েছে।

প্যাসিভ ট্র্যাকিং

এর মধ্যে এমন অ্যাপ রয়েছে যা প্যাসিভ ফিটনেস বা স্বাস্থ্য ট্র্যাকিং করে, যেমন ব্যাকগ্রাউন্ডে ক্রমাগত স্টেপ বা হার্ট রেট রেকর্ড করা।

আপনার অ্যাপকে পর্যায়ক্রমে স্বাস্থ্য সংযোগে নিম্নলিখিত উপায়ে ডেটা লিখতে হবে:

  • প্রতিটি সিঙ্কে, শুধুমাত্র নতুন ডেটা এবং আপডেট করা ডেটা লিখুন যা শেষ সিঙ্কের পর থেকে পরিবর্তিত হয়েছে৷
  • খণ্ড অনুরোধ প্রতি লেখার অনুরোধে সর্বাধিক 1000টি রেকর্ডের জন্য।
  • কমপক্ষে 15 মিনিটের সময়কাল সহ পর্যায়ক্রমিক ব্যাকগ্রাউন্ড কাজগুলি নির্ধারণ করতে WorkManager ব্যবহার করুন।
  • ডিভাইসটি নিষ্ক্রিয় থাকলে এবং ব্যাটারি কম না থাকলে শুধুমাত্র কাজগুলি চালানোর জন্য সীমাবদ্ধ করুন৷

    val constraints = Constraints.Builder()
        .requiresBatteryNotLow()
        .requiresDeviceIdle(true)
        .build()
    
    val writeDataWork = PeriodicWorkRequestBuilder<WriteDataToHealthConnectWorker>(
            15,
            TimeUnit.MINUTES,
            5,
            TimeUnit.MINUTES
        )
        .setConstraints(constraints)
        .build()
    

সক্রিয় ট্র্যাকিং

এর মধ্যে এমন অ্যাপ রয়েছে যা ইভেন্ট-ভিত্তিক ট্র্যাকিং যেমন ব্যায়াম এবং ঘুম, অথবা ম্যানুয়াল ব্যবহারকারীর ইনপুট যেমন পুষ্টি। এই রেকর্ডগুলি তৈরি করা হয় যখন অ্যাপটি ফোরগ্রাউন্ডে থাকে বা বিরল ইভেন্টে যেখানে এটি দিনে কয়েকবার ব্যবহার করা হয়।

নিশ্চিত করুন যে আপনার অ্যাপটি ইভেন্টের পুরো সময়কালের জন্য Health Connect চালু রাখে না।

হেলথ কানেক্টে ডেটা দুটির একটিতে লিখতে হবে:

  • ইভেন্ট সম্পূর্ণ হওয়ার পরে স্বাস্থ্য সংযোগে ডেটা সিঙ্ক করুন। উদাহরণস্বরূপ, যখন ব্যবহারকারী একটি ট্র্যাক করা ব্যায়াম সেশন শেষ করে তখন ডেটা সিঙ্ক করুন।
  • পরে ডেটা সিঙ্ক করতে WorkManager ব্যবহার করে একটি ওয়ান-অফ টাস্ক শিডিউল করুন।

গ্রানুলারিটি এবং লেখার ফ্রিকোয়েন্সির জন্য সর্বোত্তম অনুশীলন

Health Connect-এ ডেটা লেখার সময় উপযুক্ত রেজোলিউশন ব্যবহার করুন। উপযুক্ত রেজোলিউশন ব্যবহার করা স্টোরেজ লোড কমাতে সাহায্য করে, যদিও এখনও সামঞ্জস্যপূর্ণ এবং সঠিক ডেটা বজায় রাখে। ডেটা রেজোলিউশনে 2টি জিনিস রয়েছে:

  1. লেখার ফ্রিকোয়েন্সি : কত ঘন ঘন আপনার অ্যাপ্লিকেশন স্বাস্থ্য সংযোগে কোনো নতুন ডেটা পুশ করে। উদাহরণস্বরূপ, প্রতি 15 মিনিটে নতুন ডেটা লিখুন।
  2. লিখিত ডেটার গ্রানুলারিটি : কতবার যে ডেটা পুশ করা হয়েছে তা নমুনা করা হয়েছে। উদাহরণস্বরূপ, প্রতি 5 সেকেন্ডে হৃদস্পন্দনের নমুনা লিখুন। প্রতিটি ডেটা টাইপের জন্য একই নমুনা হারের প্রয়োজন হয় না। প্রতি সেকেন্ডে ধাপ গণনার ডেটা আপডেট করার সামান্য সুবিধা আছে, প্রতি 60 সেকেন্ডের মতো কম ঘন ঘন ক্যাডেন্সের বিপরীতে। যাইহোক, উচ্চ নমুনা হার ব্যবহারকারীদের তাদের স্বাস্থ্য এবং ফিটনেস ডেটার উপর আরও বিস্তারিত এবং দানাদার চেহারা দিতে পারে। নমুনা হার ফ্রিকোয়েন্সি বিস্তারিত এবং কর্মক্ষমতা মধ্যে ভারসাম্য আঘাত করা উচিত.

সারা দিন পর্যবেক্ষণ করা ডেটা লিখুন

একটি চলমান ভিত্তিতে সংগৃহীত ডেটার জন্য, ধাপগুলির মতো, আপনার আবেদনটি দিনে অন্তত প্রতি 15 মিনিটে Health Connect-এ লিখতে হবে।

ডেটা টাইপ

ইউনিট

প্রত্যাশিত

উদাহরণ

ধাপ

পদক্ষেপ

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 ধাপ

23:16 - 23:17 - 22 ধাপ

23:17 - 23:18 - 8 ধাপ

স্টেপস ক্যাডেন্স

পদক্ষেপ/মিনিট

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 spm

23:16 - 23:17 - 22 spm

23:17 - 23:18 - 8 spm

হুইলচেয়ার ঠেলে দেয়

ধাক্কা

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 ধাক্কা

23:16 - 23:17 - 22 ধাক্কা

23:17 - 23:18 - 8 ধাক্কা

সক্রিয় ক্যালোরি পোড়া

ক্যালোরি

প্রতি 15 মিনিটে

23:15 - 23:30 - 2 ক্যালোরি

23:30 - 23:45 - 25 ক্যালোরি

23:45 - 00:00 - 5 ক্যালোরি

মোট ক্যালোরি পোড়া

ক্যালোরি

প্রতি 15 মিনিটে

23:15 - 23:30 - 16 ক্যালোরি

23:30 - 23:45 - 16 ক্যালোরি

23:45 - 00:00 - 16 ক্যালোরি

দূরত্ব

কিমি/মিনিট

প্রতি ১ মিনিটে

23:14-23:15 - 0.008 কিমি

23:16 - 23:16 - 0.021 কিমি

23:17 - 23:18 - 0.012 কিমি

উচ্চতা লাভ করেছে

মি

প্রতি ১ মিনিটে

20:36 - 20:37 - 3.048 মি

20:39 - 20:40 - 3.048 মি

23:23 - 23:24 - 9.144 মি

ফ্লোরসক্লাইম্বড

মেঝে

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 তলা

23:16 - 23:16 - 22 তলা

23:17 - 23:18 - 8 তলা

হার্টরেট

bpm

প্রতি ১ মিনিটে

6:11am - 55 bpm

হার্ট রেট ভ্যারিয়েবিলিটিআরএমএসডি

ms

প্রতি ১ মিনিটে

6:11am - 23 ms

শ্বাসযন্ত্রের হার

শ্বাস/মিনিট

প্রতি ১ মিনিটে

23:14 - 23:15 - 60 শ্বাস/মিনিট

23:16 - 23:16 - 62 শ্বাস/মিনিট

23:17 - 23:18 - 64 শ্বাস/মিনিট

অক্সিজেন স্যাচুরেশন

%

প্রতি 1 ঘন্টা

6:11 - 95.208%

সেশন লিখুন

ওয়ার্কআউট বা ঘুমের সেশনের শেষে স্বাস্থ্য সংযোগে ডেটা লিখতে হবে।

একটি সর্বোত্তম অনুশীলন হিসাবে, যে কোনো ঘুমের অধিবেশন বা ব্যায়াম সেশন রেকর্ডিং ডিভাইস এবং উপযুক্ত মেটাডেটা সহ RecordingMethod সহ লিখতে হবে।

ন্যূনতম, আপনার আবেদন নীচের "প্রত্যাশিত" কলামে নির্দেশিকা অনুসরণ করা উচিত। যেখানে সম্ভব, "সেরা" নির্দেশিকা অনুসরণ করুন।

একটি অনুশীলনের সময় ট্র্যাক করা ডেটা

ডেটা টাইপ

ইউনিট

প্রত্যাশিত

সেরা

উদাহরণ

ধাপ

পদক্ষেপ

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 5টি ধাপ

23:16 - 23:17 - 22 ধাপ

23:17 - 23:18 - 8 ধাপ

স্টেপস ক্যাডেন্স

পদক্ষেপ/মিনিট

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 35 spm

23:16 - 23:17 - 37 spm

23:17 - 23:18 - 40 spm

হুইলচেয়ার ঠেলে দেয়

ধাক্কা

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 5টি ধাক্কা

23:16 - 23:17 - 22 ধাক্কা

23:17 - 23:18 - 8 ধাক্কা

সাইক্লিং পেডালিং ক্যাডেন্স

আরপিএম

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 65 rpm

23:16 - 23:17 - 70 rpm

23:17 - 23:18 - 68 rpm

শক্তি

ওয়াট

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 250 ওয়াট

23:16 - 23:17 - 255 ওয়াট

23:17 - 23:18 - 245 ওয়াট

গতি

কিমি/মিনিট

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 0.3 কিমি/মিনিট

23:16 - 23:17 - 0.4 কিমি/মিনিট

23:17 - 23:18 -0.4 কিমি/মিনিট

দূরত্ব

কিমি/মি

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 0.008 কিমি

23:16 - 23:16 - 0.021 কিমি

23:17 - 23:18 - 0.012 কিমি

সক্রিয় ক্যালোরি পোড়া

ক্যালোরি

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 20 ক্যালোরি

23:16 - 23:17 - 20 ক্যালোরি

23:17 - 23:18 - 25 ক্যালোরি

মোট ক্যালোরি পোড়া

ক্যালোরি

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 36 ক্যালোরি

23:16 - 23:17 - 36 ক্যালোরি

23:17 - 23:18 - 41 ক্যালোরি

উচ্চতা লাভ করেছে

মি

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

20:36 - 20:37 - 3.048 মি

20:39 - 20:40 - 3.048 মি

23:23 - 23:24 - 9.144 মি

ব্যায়াম রুট

lat/lng/alt

প্রতি 3-5 সেকেন্ডে

প্রতি 1 সেকেন্ডে

হার্টরেট

bpm

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 150 bpm

23:16 - 23:17 -152 bpm

23:17 - 23:18 - 155 bpm

ঘুমের সময় ট্র্যাক করা ডেটা

ডেটা টাইপ

ইউনিট

প্রত্যাশিত নমুনা

উদাহরণ

স্লিপ স্টেজিং

মঞ্চ

প্রতি ঘুমের পর্যায়ে দানাদার সময়কাল

23:46 - 23:50 - জাগ্রত

23:50 - 23:56 - হালকা ঘুম

23:56 - 00:16 - গভীর ঘুম

রেস্টিং হার্টরেট

bpm

একক দৈনিক মান (সকালে প্রথম জিনিস প্রত্যাশিত)

6:11am - 60 bpm

অক্সিজেন স্যাচুরেশন

%

একক দৈনিক মান (সকালে প্রথম জিনিস প্রত্যাশিত)

6:11 - 95.208%

,

এই নির্দেশিকাটি Health Connect সংস্করণ 1.1.0-alpha12 এর সাথে সামঞ্জস্যপূর্ণ।

এই নির্দেশিকাটি Health Connect-এ ডেটা লেখা বা আপডেট করার প্রক্রিয়া কভার করে।

ডেটা স্ট্রাকচার সেট আপ করুন

ডেটা লেখার আগে, আমাদের প্রথমে রেকর্ডগুলি সেট আপ করতে হবে। 50 টিরও বেশি ডেটা প্রকারের জন্য, প্রতিটির নিজস্ব কাঠামো রয়েছে। উপলভ্য ডেটা টাইপ সম্পর্কে আরো বিস্তারিত জানার জন্য Jetpack রেফারেন্স দেখুন।

মৌলিক রেকর্ড

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

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 120,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    )
)

পরিমাপের একক সহ রেকর্ড

Health Connect নির্ভুলতা প্রদানের জন্য তাদের পরিমাপের একক সহ মান সংরক্ষণ করতে পারে। একটি উদাহরণ হল পুষ্টি ডেটা টাইপ যা বিশাল এবং ব্যাপক। এতে মোট কার্বোহাইড্রেট থেকে ভিটামিন পর্যন্ত বিভিন্ন ধরনের ঐচ্ছিক পুষ্টির ক্ষেত্র রয়েছে। প্রতিটি ডেটা পয়েন্ট সেই পুষ্টির প্রতিনিধিত্ব করে যা সম্ভাব্যভাবে খাবার বা খাদ্য আইটেমের অংশ হিসাবে গ্রহণ করা হয়েছিল।

এই ডেটা টাইপে, সমস্ত পুষ্টি উপাদান Mass এককে উপস্থাপিত হয়, যখন energy Energy এককে উপস্থাপন করা হয়।

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(1))

val banana = NutritionRecord(
    name = "banana",
    energy = 105.0.kilocalories,
    dietaryFiber = 3.1.grams,
    potassium = 0.422.grams,
    totalCarbohydrate = 27.0.grams,
    totalFat = 0.4.grams,
    saturatedFat = 0.1.grams,
    sodium = 0.001.grams,
    sugar = 14.0.grams,
    vitaminB6 = 0.0005.grams,
    vitaminC = 0.0103.grams,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        device = Device(type = Device.TYPE_PHONE)
    )
)

সিরিজ ডেটা সহ রেকর্ড

Health Connect সিরিজ ডেটার একটি তালিকা সংরক্ষণ করতে পারে। একটি উদাহরণ হ'ল হার্ট রেট ডেটা টাইপ যা রিডিংয়ের মধ্যে সনাক্ত করা হার্টবিটের নমুনার একটি সিরিজ ক্যাপচার করে।

এই ডেটা টাইপে, প্যারামিটার samples হার্ট রেট নমুনার একটি তালিকা দ্বারা উপস্থাপিত হয়। প্রতিটি নমুনায় একটি beatsPerMinute মান এবং একটি time মান রয়েছে।

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(5))

val heartRateRecord = HeartRateRecord(
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    // records 10 arbitrary data, to replace with actual data
    samples = List(10) { index ->
        HeartRateRecord.Sample(
            time = startTime + Duration.ofSeconds(index.toLong()),
            beatsPerMinute = 100 + index.toLong(),
        )
    },
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    ))

ডেটা লিখুন

হেলথ কানেক্টের একটি সাধারণ কর্মপ্রবাহ হল ডেটা লেখা। রেকর্ড যোগ করতে, insertRecords ব্যবহার করুন।

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

suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
    val endTime = Instant.now()
    val startTime = endTime.minus(Duration.ofMinutes(5))
    try {
        val stepsRecord = StepsRecord(
            count = 120,
            startTime = startTime,
            endTime = endTime,
            startZoneOffset = ZoneOffset.UTC,
            endZoneOffset = ZoneOffset.UTC,
            metadata = Metadata.autoRecorded(
                device = Device(type = Device.TYPE_WATCH)
            )
        )
        healthConnectClient.insertRecords(listOf(stepsRecord))
    } catch (e: Exception) {
        // Run error handling here
    }
}

ডেটা আপডেট করুন

আপনার যদি এক বা একাধিক রেকর্ড পরিবর্তন করতে হয়, বিশেষ করে যখন আপনাকে Health Connect থেকে ডেটার সাথে আপনার অ্যাপ ডেটাস্টোর সিঙ্ক করতে হয়, আপনি আপনার ডেটা আপডেট করতে পারেন৷ বিদ্যমান ডেটা আপডেট করার দুটি উপায় রয়েছে যা রেকর্ডগুলি সন্ধান করতে ব্যবহৃত শনাক্তকারীর উপর নির্ভর করে।

মেটাডেটা

এটি প্রথমে Metadata ক্লাস পরীক্ষা করা মূল্যবান কারণ ডেটা আপডেট করার সময় এটি প্রয়োজনীয়। তৈরি করার সময়, Health Connect-এর প্রতিটি Record একটি metadata ক্ষেত্র থাকে। নিম্নলিখিত বৈশিষ্ট্যগুলি সিঙ্ক্রোনাইজেশনের জন্য প্রাসঙ্গিক:

বৈশিষ্ট্য বর্ণনা
id হেলথ কানেক্টের প্রতিটি Record একটি অনন্য id মান রয়েছে।
একটি নতুন রেকর্ড সন্নিবেশ করার সময় Health Connect স্বয়ংক্রিয়ভাবে এটি পূরণ করে
lastModifiedTime প্রতিটি Record শেষবার রেকর্ডটি পরিবর্তন করা হয়েছে তাও ট্র্যাক রাখে।
Health Connect স্বয়ংক্রিয়ভাবে এটি পূরণ করে।
clientRecordId আপনার অ্যাপ ডেটাস্টোরে রেফারেন্স হিসাবে পরিবেশন করার জন্য প্রতিটি Record সাথে যুক্ত একটি অনন্য আইডি থাকতে পারে।
আপনার অ্যাপ এই মান সরবরাহ করে।
clientRecordVersion যেখানে একটি রেকর্ডে clientRecordId আছে, clientRecordVersion ব্যবহার করা যেতে পারে আপনার অ্যাপ ডেটাস্টোরের সংস্করণের সাথে ডেটা সিঙ্কে থাকার জন্য।
আপনার অ্যাপ এই মান সরবরাহ করে।

রেকর্ড আইডির মাধ্যমে আপডেট করুন

ডেটা আপডেট করতে, প্রথমে প্রয়োজনীয় রেকর্ড প্রস্তুত করুন। প্রয়োজনে রেকর্ডে কোনো পরিবর্তন করুন। তারপরে, পরিবর্তন করতে updateRecords কল করুন।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে ডেটা আপডেট করতে হয়। এই উদ্দেশ্যে, প্রতিটি রেকর্ডের তার জোন অফসেট মানগুলি PST-তে সমন্বয় করা হয়েছে।

suspend fun updateSteps(
    healthConnectClient: HealthConnectClient,
    prevRecordStartTime: Instant,
    prevRecordEndTime: Instant
) {
    try {
        val request = healthConnectClient.readRecords(
            ReadRecordsRequest(
                recordType = StepsRecord::class, timeRangeFilter = TimeRangeFilter.between(
                    prevRecordStartTime, prevRecordEndTime
                )
            )
        )

        val newStepsRecords = arrayListOf<StepsRecord>()
        for (record in request.records) {
            // Adjusted both offset values to reflect changes
            val sr = StepsRecord(
                count = record.count,
                startTime = record.startTime,
                startZoneOffset = record.startTime.atZone(ZoneId.of("PST")).offset,
                endTime = record.endTime,
                endZoneOffset = record.endTime.atZone(ZoneId.of("PST")).offset,
                metadata = record.metadata
            )
            newStepsRecords.add(sr)
        }

        healthConnectClient.updateRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

ক্লায়েন্ট রেকর্ড আইডি মাধ্যমে আপসার্ট

আপনি যদি ঐচ্ছিক ক্লায়েন্ট রেকর্ড আইডি এবং ক্লায়েন্ট রেকর্ড সংস্করণ মান ব্যবহার করেন, আমরা updateRecords এর পরিবর্তে insertRecords ব্যবহার করার পরামর্শ দিই।

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

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে অ্যাপ ডেটাস্টোর থেকে টেনে আনা ডেটার উপর একটি আপসার্ট সম্পাদন করতে হয়:

suspend fun pullStepsFromDatastore() : ArrayList<StepsRecord> {
    val appStepsRecords = arrayListOf<StepsRecord>()
    // Pull data from app datastore
    // ...
    // Make changes to data if necessary
    // ...
    // Store data in appStepsRecords
    // ...
    var sr = StepsRecord(
        metadata = Metadata.autoRecorded(
            clientRecordId = "Your client record ID",
            device = Device(type = Device.TYPE_WATCH)
        ),
        // Assign more parameters for this record
    )
    appStepsRecords.add(sr)
    // ...
    return appStepsRecords
}

suspend fun upsertSteps(
    healthConnectClient: HealthConnectClient,
    newStepsRecords: ArrayList<StepsRecord>
) {
    try {
        healthConnectClient.insertRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

এর পরে, আপনি এই ফাংশনগুলিকে আপনার প্রধান থ্রেডে কল করতে পারেন।

upsertSteps(healthConnectClient, pullStepsFromDatastore())

ক্লায়েন্ট রেকর্ড সংস্করণে মান পরীক্ষা করুন

যদি আপনার ডেটা আপসার্ট করার প্রক্রিয়াতে ক্লায়েন্ট রেকর্ড সংস্করণ অন্তর্ভুক্ত থাকে, তাহলে Health Connect clientRecordVersion মানগুলির তুলনা পরীক্ষা করে। যদি সন্নিবেশিত ডেটা থেকে সংস্করণটি বিদ্যমান ডেটা থেকে সংস্করণের চেয়ে বেশি হয়, তাহলে উল্টোটা ঘটে। অন্যথায়, প্রক্রিয়াটি পরিবর্তন উপেক্ষা করে এবং মান একই থাকে।

আপনার ডেটাতে সংস্করণ অন্তর্ভুক্ত করতে, আপনাকে আপনার সংস্করণের যুক্তির উপর ভিত্তি করে একটি Long মান সহ Metadata.clientRecordVersion সরবরাহ করতে হবে।

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 100L,
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        clientRecordId = "Your supplied record ID",
        clientRecordVersion = 0L, // Your supplied record version
        device = Device(type = Device.TYPE_WATCH)
    )
)

যখনই পরিবর্তন হয় তখন আপসার্ট স্বয়ংক্রিয়ভাবে version বৃদ্ধি করে না, ডেটা ওভাররাইট করার কোনো অপ্রত্যাশিত ঘটনা প্রতিরোধ করে। এর সাথে, আপনাকে ম্যানুয়ালি এটি একটি উচ্চ মূল্যের সাথে সরবরাহ করতে হবে।

ডেটা লেখার জন্য সর্বোত্তম অনুশীলন

অ্যাপ্লিকেশানগুলিকে শুধুমাত্র স্বাস্থ্য সংযোগে নিজস্ব-উৎসিত ডেটা লিখতে হবে৷

যদি আপনার অ্যাপের ডেটা অন্য অ্যাপ থেকে ইম্পোর্ট করা হয়, তাহলে দায়িত্ব অন্য অ্যাপের উপর পড়ে স্বাস্থ্য কানেক্টে নিজের ডেটা লেখার।

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

ডেটা ট্র্যাক করার সময়, আপনার অ্যাপ যেভাবে ডেটা লিখে তার উপর নির্ভর করে আপনি অনুসরণ করতে পারেন এমন কয়েকটি পরামর্শ রয়েছে।

প্যাসিভ ট্র্যাকিং

এর মধ্যে এমন অ্যাপ রয়েছে যা প্যাসিভ ফিটনেস বা স্বাস্থ্য ট্র্যাকিং করে, যেমন ব্যাকগ্রাউন্ডে ক্রমাগত স্টেপ বা হার্ট রেট রেকর্ড করা।

আপনার অ্যাপকে পর্যায়ক্রমে স্বাস্থ্য সংযোগে নিম্নলিখিত উপায়ে ডেটা লিখতে হবে:

  • প্রতিটি সিঙ্কে, শুধুমাত্র নতুন ডেটা এবং আপডেট করা ডেটা লিখুন যা শেষ সিঙ্কের পর থেকে পরিবর্তিত হয়েছে৷
  • খণ্ড অনুরোধ প্রতি লেখার অনুরোধে সর্বাধিক 1000টি রেকর্ডের জন্য।
  • কমপক্ষে 15 মিনিটের সময়কাল সহ পর্যায়ক্রমিক ব্যাকগ্রাউন্ড কাজগুলি নির্ধারণ করতে WorkManager ব্যবহার করুন।
  • ডিভাইসটি নিষ্ক্রিয় থাকলে এবং ব্যাটারি কম না থাকলে শুধুমাত্র কাজগুলি চালানোর জন্য সীমাবদ্ধ করুন৷

    val constraints = Constraints.Builder()
        .requiresBatteryNotLow()
        .requiresDeviceIdle(true)
        .build()
    
    val writeDataWork = PeriodicWorkRequestBuilder<WriteDataToHealthConnectWorker>(
            15,
            TimeUnit.MINUTES,
            5,
            TimeUnit.MINUTES
        )
        .setConstraints(constraints)
        .build()
    

সক্রিয় ট্র্যাকিং

এর মধ্যে এমন অ্যাপ রয়েছে যা ইভেন্ট-ভিত্তিক ট্র্যাকিং যেমন ব্যায়াম এবং ঘুম, অথবা ম্যানুয়াল ব্যবহারকারীর ইনপুট যেমন পুষ্টি। এই রেকর্ডগুলি তৈরি করা হয় যখন অ্যাপটি ফোরগ্রাউন্ডে থাকে বা বিরল ইভেন্টে যেখানে এটি দিনে কয়েকবার ব্যবহার করা হয়।

নিশ্চিত করুন যে আপনার অ্যাপটি ইভেন্টের পুরো সময়কালের জন্য Health Connect চালু রাখে না।

হেলথ কানেক্টে ডেটা দুটির একটিতে লিখতে হবে:

  • ইভেন্ট সম্পূর্ণ হওয়ার পরে স্বাস্থ্য সংযোগে ডেটা সিঙ্ক করুন। উদাহরণস্বরূপ, যখন ব্যবহারকারী একটি ট্র্যাক করা ব্যায়াম সেশন শেষ করে তখন ডেটা সিঙ্ক করুন।
  • পরে ডেটা সিঙ্ক করতে WorkManager ব্যবহার করে একটি ওয়ান-অফ টাস্ক শিডিউল করুন।

গ্রানুলারিটি এবং লেখার ফ্রিকোয়েন্সির জন্য সর্বোত্তম অনুশীলন

Health Connect-এ ডেটা লেখার সময় উপযুক্ত রেজোলিউশন ব্যবহার করুন। উপযুক্ত রেজোলিউশন ব্যবহার করা স্টোরেজ লোড কমাতে সাহায্য করে, যদিও এখনও সামঞ্জস্যপূর্ণ এবং সঠিক ডেটা বজায় রাখে। ডেটা রেজোলিউশনে 2টি জিনিস রয়েছে:

  1. লেখার ফ্রিকোয়েন্সি : কত ঘন ঘন আপনার অ্যাপ্লিকেশন স্বাস্থ্য সংযোগে কোনো নতুন ডেটা পুশ করে। উদাহরণস্বরূপ, প্রতি 15 মিনিটে নতুন ডেটা লিখুন।
  2. লিখিত ডেটার গ্রানুলারিটি : কতবার যে ডেটা পুশ করা হয়েছে তা নমুনা করা হয়েছে। উদাহরণস্বরূপ, প্রতি 5 সেকেন্ডে হৃদস্পন্দনের নমুনা লিখুন। প্রতিটি ডেটা টাইপের জন্য একই নমুনা হারের প্রয়োজন হয় না। প্রতি সেকেন্ডে ধাপ গণনার ডেটা আপডেট করার সামান্য সুবিধা আছে, প্রতি 60 সেকেন্ডের মতো কম ঘন ঘন ক্যাডেন্সের বিপরীতে। যাইহোক, উচ্চ নমুনা হার ব্যবহারকারীদের তাদের স্বাস্থ্য এবং ফিটনেস ডেটার উপর আরও বিস্তারিত এবং দানাদার চেহারা দিতে পারে। নমুনা হার ফ্রিকোয়েন্সি বিস্তারিত এবং কর্মক্ষমতা মধ্যে ভারসাম্য আঘাত করা উচিত.

সারা দিন পর্যবেক্ষণ করা ডেটা লিখুন

একটি চলমান ভিত্তিতে সংগৃহীত ডেটার জন্য, ধাপগুলির মতো, আপনার আবেদনটি দিনে অন্তত প্রতি 15 মিনিটে Health Connect-এ লিখতে হবে।

ডেটা টাইপ

ইউনিট

প্রত্যাশিত

উদাহরণ

ধাপ

পদক্ষেপ

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 ধাপ

23:16 - 23:17 - 22 ধাপ

23:17 - 23:18 - 8 ধাপ

স্টেপস ক্যাডেন্স

পদক্ষেপ/মিনিট

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 spm

23:16 - 23:17 - 22 spm

23:17 - 23:18 - 8 spm

হুইলচেয়ার ঠেলে দেয়

ধাক্কা

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 ধাক্কা

23:16 - 23:17 - 22 ধাক্কা

23:17 - 23:18 - 8 ধাক্কা

সক্রিয় ক্যালোরি পোড়া

ক্যালোরি

প্রতি 15 মিনিটে

23:15 - 23:30 - 2 ক্যালোরি

23:30 - 23:45 - 25 ক্যালোরি

23:45 - 00:00 - 5 ক্যালোরি

মোট ক্যালোরি পোড়া

ক্যালোরি

প্রতি 15 মিনিটে

23:15 - 23:30 - 16 ক্যালোরি

23:30 - 23:45 - 16 ক্যালোরি

23:45 - 00:00 - 16 ক্যালোরি

দূরত্ব

কিমি/মিনিট

প্রতি ১ মিনিটে

23:14-23:15 - 0.008 কিমি

23:16 - 23:16 - 0.021 কিমি

23:17 - 23:18 - 0.012 কিমি

উচ্চতা লাভ করেছে

মি

প্রতি ১ মিনিটে

20:36 - 20:37 - 3.048 মি

20:39 - 20:40 - 3.048 মি

23:23 - 23:24 - 9.144 মি

ফ্লোরসক্লাইম্বড

মেঝে

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 তলা

23:16 - 23:16 - 22 তলা

23:17 - 23:18 - 8 তলা

হার্টরেট

bpm

প্রতি ১ মিনিটে

6:11am - 55 bpm

হার্ট রেট ভ্যারিয়েবিলিটিআরএমএসডি

ms

প্রতি ১ মিনিটে

6:11am - 23 ms

শ্বাসযন্ত্রের হার

শ্বাস/মিনিট

প্রতি ১ মিনিটে

23:14 - 23:15 - 60 শ্বাস/মিনিট

23:16 - 23:16 - 62 শ্বাস/মিনিট

23:17 - 23:18 - 64 শ্বাস/মিনিট

অক্সিজেন স্যাচুরেশন

%

প্রতি 1 ঘন্টা

6:11 - 95.208%

সেশন লিখুন

ওয়ার্কআউট বা ঘুমের সেশনের শেষে স্বাস্থ্য সংযোগে ডেটা লিখতে হবে।

একটি সর্বোত্তম অনুশীলন হিসাবে, যে কোনো ঘুমের অধিবেশন বা ব্যায়াম সেশন রেকর্ডিং ডিভাইস এবং উপযুক্ত মেটাডেটা সহ RecordingMethod সহ লিখতে হবে।

ন্যূনতম, আপনার আবেদন নীচের "প্রত্যাশিত" কলামে নির্দেশিকা অনুসরণ করা উচিত। যেখানে সম্ভব, "সেরা" নির্দেশিকা অনুসরণ করুন।

একটি অনুশীলনের সময় ট্র্যাক করা ডেটা

ডেটা টাইপ

ইউনিট

প্রত্যাশিত

সেরা

উদাহরণ

ধাপ

পদক্ষেপ

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 5টি ধাপ

23:16 - 23:17 - 22 ধাপ

23:17 - 23:18 - 8 ধাপ

স্টেপস ক্যাডেন্স

পদক্ষেপ/মিনিট

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 35 spm

23:16 - 23:17 - 37 spm

23:17 - 23:18 - 40 spm

হুইলচেয়ার ঠেলে দেয়

ধাক্কা

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 5টি ধাক্কা

23:16 - 23:17 - 22 ধাক্কা

23:17 - 23:18 - 8 ধাক্কা

সাইক্লিং পেডালিং ক্যাডেন্স

আরপিএম

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 65 rpm

23:16 - 23:17 - 70 rpm

23:17 - 23:18 - 68 rpm

শক্তি

ওয়াট

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 250 ওয়াট

23:16 - 23:17 - 255 ওয়াট

23:17 - 23:18 - 245 ওয়াট

গতি

কিমি/মিনিট

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 0.3 কিমি/মিনিট

23:16 - 23:17 - 0.4 কিমি/মিনিট

23:17 - 23:18 -0.4 কিমি/মিনিট

দূরত্ব

কিমি/মি

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 0.008 কিমি

23:16 - 23:16 - 0.021 কিমি

23:17 - 23:18 - 0.012 কিমি

সক্রিয় ক্যালোরি পোড়া

ক্যালোরি

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 20 ক্যালোরি

23:16 - 23:17 - 20 ক্যালোরি

23:17 - 23:18 - 25 ক্যালোরি

মোট ক্যালোরি পোড়া

ক্যালোরি

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 36 ক্যালোরি

23:16 - 23:17 - 36 ক্যালোরি

23:17 - 23:18 - 41 ক্যালোরি

উচ্চতা লাভ করেছে

মি

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

20:36 - 20:37 - 3.048 মি

20:39 - 20:40 - 3.048 মি

23:23 - 23:24 - 9.144 মি

ব্যায়াম রুট

lat/lng/alt

প্রতি 3-5 সেকেন্ডে

প্রতি 1 সেকেন্ডে

হার্টরেট

bpm

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 150 bpm

23:16 - 23:17 -152 bpm

23:17 - 23:18 - 155 bpm

ঘুমের সময় ট্র্যাক করা ডেটা

ডেটা টাইপ

ইউনিট

প্রত্যাশিত নমুনা

উদাহরণ

স্লিপ স্টেজিং

মঞ্চ

প্রতি ঘুমের পর্যায়ে দানাদার সময়কাল

23:46 - 23:50 - জাগ্রত

23:50 - 23:56 - হালকা ঘুম

23:56 - 00:16 - গভীর ঘুম

রেস্টিং হার্টরেট

bpm

একক দৈনিক মান (সকালে প্রথম জিনিস প্রত্যাশিত)

6:11am - 60 bpm

অক্সিজেন স্যাচুরেশন

%

একক দৈনিক মান (সকালে প্রথম জিনিস প্রত্যাশিত)

6:11 - 95.208%

,

এই নির্দেশিকাটি Health Connect সংস্করণ 1.1.0-alpha12 এর সাথে সামঞ্জস্যপূর্ণ।

এই নির্দেশিকাটি Health Connect-এ ডেটা লেখা বা আপডেট করার প্রক্রিয়া কভার করে।

ডেটা স্ট্রাকচার সেট আপ করুন

ডেটা লেখার আগে, আমাদের প্রথমে রেকর্ডগুলি সেট আপ করতে হবে। 50 টিরও বেশি ডেটা প্রকারের জন্য, প্রতিটির নিজস্ব কাঠামো রয়েছে। উপলভ্য ডেটা টাইপ সম্পর্কে আরো বিস্তারিত জানার জন্য Jetpack রেফারেন্স দেখুন।

মৌলিক রেকর্ড

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

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 120,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    )
)

পরিমাপের একক সহ রেকর্ড

Health Connect নির্ভুলতা প্রদানের জন্য তাদের পরিমাপের একক সহ মান সংরক্ষণ করতে পারে। একটি উদাহরণ হল পুষ্টি ডেটা টাইপ যা বিশাল এবং ব্যাপক। এতে মোট কার্বোহাইড্রেট থেকে ভিটামিন পর্যন্ত বিভিন্ন ধরনের ঐচ্ছিক পুষ্টির ক্ষেত্র রয়েছে। প্রতিটি ডেটা পয়েন্ট সেই পুষ্টির প্রতিনিধিত্ব করে যা সম্ভাব্যভাবে খাবার বা খাদ্য আইটেমের অংশ হিসাবে গ্রহণ করা হয়েছিল।

এই ডেটা টাইপে, সমস্ত পুষ্টি উপাদান Mass এককে উপস্থাপিত হয়, যখন energy Energy এককে উপস্থাপন করা হয়।

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(1))

val banana = NutritionRecord(
    name = "banana",
    energy = 105.0.kilocalories,
    dietaryFiber = 3.1.grams,
    potassium = 0.422.grams,
    totalCarbohydrate = 27.0.grams,
    totalFat = 0.4.grams,
    saturatedFat = 0.1.grams,
    sodium = 0.001.grams,
    sugar = 14.0.grams,
    vitaminB6 = 0.0005.grams,
    vitaminC = 0.0103.grams,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        device = Device(type = Device.TYPE_PHONE)
    )
)

সিরিজ ডেটা সহ রেকর্ড

Health Connect সিরিজ ডেটার একটি তালিকা সংরক্ষণ করতে পারে। একটি উদাহরণ হ'ল হার্ট রেট ডেটা টাইপ যা রিডিংয়ের মধ্যে সনাক্ত করা হার্টবিটের নমুনার একটি সিরিজ ক্যাপচার করে।

এই ডেটা টাইপে, প্যারামিটার samples হার্ট রেট নমুনার একটি তালিকা দ্বারা উপস্থাপিত হয়। প্রতিটি নমুনায় একটি beatsPerMinute মান এবং একটি time মান রয়েছে।

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(5))

val heartRateRecord = HeartRateRecord(
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    // records 10 arbitrary data, to replace with actual data
    samples = List(10) { index ->
        HeartRateRecord.Sample(
            time = startTime + Duration.ofSeconds(index.toLong()),
            beatsPerMinute = 100 + index.toLong(),
        )
    },
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    ))

ডেটা লিখুন

হেলথ কানেক্টের একটি সাধারণ কর্মপ্রবাহ হল ডেটা লেখা। রেকর্ড যোগ করতে, insertRecords ব্যবহার করুন।

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

suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
    val endTime = Instant.now()
    val startTime = endTime.minus(Duration.ofMinutes(5))
    try {
        val stepsRecord = StepsRecord(
            count = 120,
            startTime = startTime,
            endTime = endTime,
            startZoneOffset = ZoneOffset.UTC,
            endZoneOffset = ZoneOffset.UTC,
            metadata = Metadata.autoRecorded(
                device = Device(type = Device.TYPE_WATCH)
            )
        )
        healthConnectClient.insertRecords(listOf(stepsRecord))
    } catch (e: Exception) {
        // Run error handling here
    }
}

ডেটা আপডেট করুন

আপনার যদি এক বা একাধিক রেকর্ড পরিবর্তন করতে হয়, বিশেষ করে যখন আপনাকে Health Connect থেকে ডেটার সাথে আপনার অ্যাপ ডেটাস্টোর সিঙ্ক করতে হয়, আপনি আপনার ডেটা আপডেট করতে পারেন৷ বিদ্যমান ডেটা আপডেট করার দুটি উপায় রয়েছে যা রেকর্ডগুলি সন্ধান করতে ব্যবহৃত শনাক্তকারীর উপর নির্ভর করে।

মেটাডেটা

এটি প্রথমে Metadata ক্লাস পরীক্ষা করা মূল্যবান কারণ ডেটা আপডেট করার সময় এটি প্রয়োজনীয়। তৈরি করার সময়, Health Connect-এর প্রতিটি Record একটি metadata ক্ষেত্র থাকে। নিম্নলিখিত বৈশিষ্ট্যগুলি সিঙ্ক্রোনাইজেশনের জন্য প্রাসঙ্গিক:

বৈশিষ্ট্য বর্ণনা
id হেলথ কানেক্টের প্রতিটি Record একটি অনন্য id মান রয়েছে।
একটি নতুন রেকর্ড সন্নিবেশ করার সময় Health Connect স্বয়ংক্রিয়ভাবে এটি পূরণ করে
lastModifiedTime প্রতিটি Record শেষবার রেকর্ডটি পরিবর্তন করা হয়েছে তাও ট্র্যাক রাখে।
Health Connect স্বয়ংক্রিয়ভাবে এটি পূরণ করে।
clientRecordId আপনার অ্যাপ ডেটাস্টোরে রেফারেন্স হিসাবে পরিবেশন করার জন্য প্রতিটি Record সাথে যুক্ত একটি অনন্য আইডি থাকতে পারে।
আপনার অ্যাপ এই মান সরবরাহ করে।
clientRecordVersion যেখানে একটি রেকর্ডে clientRecordId আছে, clientRecordVersion ব্যবহার করা যেতে পারে আপনার অ্যাপ ডেটাস্টোরের সংস্করণের সাথে ডেটা সিঙ্কে থাকার জন্য।
আপনার অ্যাপ এই মান সরবরাহ করে।

রেকর্ড আইডির মাধ্যমে আপডেট করুন

ডেটা আপডেট করতে, প্রথমে প্রয়োজনীয় রেকর্ড প্রস্তুত করুন। প্রয়োজনে রেকর্ডে কোনো পরিবর্তন করুন। তারপরে, পরিবর্তন করতে updateRecords কল করুন।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে ডেটা আপডেট করতে হয়। এই উদ্দেশ্যে, প্রতিটি রেকর্ডের তার জোন অফসেট মানগুলি PST-তে সমন্বয় করা হয়েছে।

suspend fun updateSteps(
    healthConnectClient: HealthConnectClient,
    prevRecordStartTime: Instant,
    prevRecordEndTime: Instant
) {
    try {
        val request = healthConnectClient.readRecords(
            ReadRecordsRequest(
                recordType = StepsRecord::class, timeRangeFilter = TimeRangeFilter.between(
                    prevRecordStartTime, prevRecordEndTime
                )
            )
        )

        val newStepsRecords = arrayListOf<StepsRecord>()
        for (record in request.records) {
            // Adjusted both offset values to reflect changes
            val sr = StepsRecord(
                count = record.count,
                startTime = record.startTime,
                startZoneOffset = record.startTime.atZone(ZoneId.of("PST")).offset,
                endTime = record.endTime,
                endZoneOffset = record.endTime.atZone(ZoneId.of("PST")).offset,
                metadata = record.metadata
            )
            newStepsRecords.add(sr)
        }

        healthConnectClient.updateRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

ক্লায়েন্ট রেকর্ড আইডি মাধ্যমে আপসার্ট

আপনি যদি ঐচ্ছিক ক্লায়েন্ট রেকর্ড আইডি এবং ক্লায়েন্ট রেকর্ড সংস্করণ মান ব্যবহার করেন, আমরা updateRecords এর পরিবর্তে insertRecords ব্যবহার করার পরামর্শ দিই।

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

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে অ্যাপ ডেটাস্টোর থেকে টেনে আনা ডেটার উপর একটি আপসার্ট সম্পাদন করতে হয়:

suspend fun pullStepsFromDatastore() : ArrayList<StepsRecord> {
    val appStepsRecords = arrayListOf<StepsRecord>()
    // Pull data from app datastore
    // ...
    // Make changes to data if necessary
    // ...
    // Store data in appStepsRecords
    // ...
    var sr = StepsRecord(
        metadata = Metadata.autoRecorded(
            clientRecordId = "Your client record ID",
            device = Device(type = Device.TYPE_WATCH)
        ),
        // Assign more parameters for this record
    )
    appStepsRecords.add(sr)
    // ...
    return appStepsRecords
}

suspend fun upsertSteps(
    healthConnectClient: HealthConnectClient,
    newStepsRecords: ArrayList<StepsRecord>
) {
    try {
        healthConnectClient.insertRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

এর পরে, আপনি এই ফাংশনগুলিকে আপনার প্রধান থ্রেডে কল করতে পারেন।

upsertSteps(healthConnectClient, pullStepsFromDatastore())

ক্লায়েন্ট রেকর্ড সংস্করণে মান পরীক্ষা করুন

যদি আপনার ডেটা আপসার্ট করার প্রক্রিয়াতে ক্লায়েন্ট রেকর্ড সংস্করণ অন্তর্ভুক্ত থাকে, তাহলে Health Connect clientRecordVersion মানগুলির তুলনা পরীক্ষা করে। যদি সন্নিবেশিত ডেটা থেকে সংস্করণটি বিদ্যমান ডেটা থেকে সংস্করণের চেয়ে বেশি হয়, তাহলে উল্টোটা ঘটে। অন্যথায়, প্রক্রিয়াটি পরিবর্তন উপেক্ষা করে এবং মান একই থাকে।

আপনার ডেটাতে সংস্করণ অন্তর্ভুক্ত করতে, আপনাকে আপনার সংস্করণের যুক্তির উপর ভিত্তি করে একটি Long মান সহ Metadata.clientRecordVersion সরবরাহ করতে হবে।

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 100L,
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        clientRecordId = "Your supplied record ID",
        clientRecordVersion = 0L, // Your supplied record version
        device = Device(type = Device.TYPE_WATCH)
    )
)

যখনই পরিবর্তন হয় তখন আপসার্ট স্বয়ংক্রিয়ভাবে version বৃদ্ধি করে না, ডেটা ওভাররাইট করার কোনো অপ্রত্যাশিত ঘটনা প্রতিরোধ করে। এর সাথে, আপনাকে ম্যানুয়ালি এটি একটি উচ্চ মূল্যের সাথে সরবরাহ করতে হবে।

ডেটা লেখার জন্য সর্বোত্তম অনুশীলন

অ্যাপ্লিকেশানগুলিকে শুধুমাত্র স্বাস্থ্য সংযোগে নিজস্ব-উৎসিত ডেটা লিখতে হবে৷

যদি আপনার অ্যাপের ডেটা অন্য অ্যাপ থেকে ইম্পোর্ট করা হয়, তাহলে দায়িত্ব অন্য অ্যাপের উপর পড়ে স্বাস্থ্য কানেক্টে নিজের ডেটা লেখার।

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

ডেটা ট্র্যাক করার সময়, আপনার অ্যাপ যেভাবে ডেটা লিখে তার উপর নির্ভর করে আপনি অনুসরণ করতে পারেন এমন কয়েকটি পরামর্শ রয়েছে।

প্যাসিভ ট্র্যাকিং

এর মধ্যে এমন অ্যাপ রয়েছে যা প্যাসিভ ফিটনেস বা স্বাস্থ্য ট্র্যাকিং করে, যেমন ব্যাকগ্রাউন্ডে ক্রমাগত স্টেপ বা হার্ট রেট রেকর্ড করা।

আপনার অ্যাপকে পর্যায়ক্রমে স্বাস্থ্য সংযোগে নিম্নলিখিত উপায়ে ডেটা লিখতে হবে:

  • প্রতিটি সিঙ্কে, শুধুমাত্র নতুন ডেটা এবং আপডেট করা ডেটা লিখুন যা শেষ সিঙ্কের পর থেকে পরিবর্তিত হয়েছে৷
  • খণ্ড অনুরোধ প্রতি লেখার অনুরোধে সর্বাধিক 1000টি রেকর্ডের জন্য।
  • কমপক্ষে 15 মিনিটের সময়কাল সহ পর্যায়ক্রমিক ব্যাকগ্রাউন্ড কাজগুলি নির্ধারণ করতে WorkManager ব্যবহার করুন।
  • ডিভাইসটি নিষ্ক্রিয় থাকলে এবং ব্যাটারি কম না থাকলে শুধুমাত্র কাজগুলি চালানোর জন্য সীমাবদ্ধ করুন৷

    val constraints = Constraints.Builder()
        .requiresBatteryNotLow()
        .requiresDeviceIdle(true)
        .build()
    
    val writeDataWork = PeriodicWorkRequestBuilder<WriteDataToHealthConnectWorker>(
            15,
            TimeUnit.MINUTES,
            5,
            TimeUnit.MINUTES
        )
        .setConstraints(constraints)
        .build()
    

সক্রিয় ট্র্যাকিং

এর মধ্যে এমন অ্যাপ রয়েছে যা ইভেন্ট-ভিত্তিক ট্র্যাকিং যেমন ব্যায়াম এবং ঘুম, অথবা ম্যানুয়াল ব্যবহারকারীর ইনপুট যেমন পুষ্টি। এই রেকর্ডগুলি তৈরি করা হয় যখন অ্যাপটি ফোরগ্রাউন্ডে থাকে বা বিরল ইভেন্টে যেখানে এটি দিনে কয়েকবার ব্যবহার করা হয়।

নিশ্চিত করুন যে আপনার অ্যাপটি ইভেন্টের পুরো সময়কালের জন্য Health Connect চালু রাখে না।

হেলথ কানেক্টে ডেটা দুটির একটিতে লিখতে হবে:

  • ইভেন্ট সম্পূর্ণ হওয়ার পরে স্বাস্থ্য সংযোগে ডেটা সিঙ্ক করুন। উদাহরণস্বরূপ, যখন ব্যবহারকারী একটি ট্র্যাক করা ব্যায়াম সেশন শেষ করে তখন ডেটা সিঙ্ক করুন।
  • পরে ডেটা সিঙ্ক করতে WorkManager ব্যবহার করে একটি ওয়ান-অফ টাস্ক শিডিউল করুন।

গ্রানুলারিটি এবং লেখার ফ্রিকোয়েন্সির জন্য সর্বোত্তম অনুশীলন

Health Connect-এ ডেটা লেখার সময় উপযুক্ত রেজোলিউশন ব্যবহার করুন। উপযুক্ত রেজোলিউশন ব্যবহার করা স্টোরেজ লোড কমাতে সাহায্য করে, যদিও এখনও সামঞ্জস্যপূর্ণ এবং সঠিক ডেটা বজায় রাখে। ডেটা রেজোলিউশনে 2টি জিনিস রয়েছে:

  1. লেখার ফ্রিকোয়েন্সি : কত ঘন ঘন আপনার অ্যাপ্লিকেশন স্বাস্থ্য সংযোগে কোনো নতুন ডেটা পুশ করে। উদাহরণস্বরূপ, প্রতি 15 মিনিটে নতুন ডেটা লিখুন।
  2. লিখিত ডেটার গ্রানুলারিটি : কতবার যে ডেটা পুশ করা হয়েছে তা নমুনা করা হয়েছে। উদাহরণস্বরূপ, প্রতি 5 সেকেন্ডে হৃদস্পন্দনের নমুনা লিখুন। প্রতিটি ডেটা টাইপের জন্য একই নমুনা হারের প্রয়োজন হয় না। প্রতি সেকেন্ডে ধাপ গণনার ডেটা আপডেট করার সামান্য সুবিধা আছে, প্রতি 60 সেকেন্ডের মতো কম ঘন ঘন ক্যাডেন্সের বিপরীতে। যাইহোক, উচ্চ নমুনা হার ব্যবহারকারীদের তাদের স্বাস্থ্য এবং ফিটনেস ডেটার উপর আরও বিস্তারিত এবং দানাদার চেহারা দিতে পারে। নমুনা হার ফ্রিকোয়েন্সি বিস্তারিত এবং কর্মক্ষমতা মধ্যে ভারসাম্য আঘাত করা উচিত.

সারা দিন পর্যবেক্ষণ করা ডেটা লিখুন

একটি চলমান ভিত্তিতে সংগৃহীত ডেটার জন্য, ধাপগুলির মতো, আপনার আবেদনটি দিনে অন্তত প্রতি 15 মিনিটে Health Connect-এ লিখতে হবে।

ডেটা টাইপ

ইউনিট

প্রত্যাশিত

উদাহরণ

ধাপ

পদক্ষেপ

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 ধাপ

23:16 - 23:17 - 22 ধাপ

23:17 - 23:18 - 8 ধাপ

স্টেপস ক্যাডেন্স

পদক্ষেপ/মিনিট

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 spm

23:16 - 23:17 - 22 spm

23:17 - 23:18 - 8 spm

হুইলচেয়ার ঠেলে দেয়

ধাক্কা

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 ধাক্কা

23:16 - 23:17 - 22 ধাক্কা

23:17 - 23:18 - 8 ধাক্কা

সক্রিয় ক্যালোরি পোড়া

ক্যালোরি

প্রতি 15 মিনিটে

23:15 - 23:30 - 2 ক্যালোরি

23:30 - 23:45 - 25 ক্যালোরি

23:45 - 00:00 - 5 ক্যালোরি

মোট ক্যালোরি পোড়া

ক্যালোরি

প্রতি 15 মিনিটে

23:15 - 23:30 - 16 ক্যালোরি

23:30 - 23:45 - 16 ক্যালোরি

23:45 - 00:00 - 16 ক্যালোরি

দূরত্ব

কিমি/মিনিট

প্রতি ১ মিনিটে

23:14-23:15 - 0.008 কিমি

23:16 - 23:16 - 0.021 কিমি

23:17 - 23:18 - 0.012 কিমি

উচ্চতা লাভ করেছে

মি

প্রতি ১ মিনিটে

20:36 - 20:37 - 3.048 মি

20:39 - 20:40 - 3.048 মি

23:23 - 23:24 - 9.144 মি

ফ্লোরসক্লাইম্বড

মেঝে

প্রতি ১ মিনিটে

23:14 - 23:15 - 5 তলা

23:16 - 23:16 - 22 তলা

23:17 - 23:18 - 8 তলা

হার্টরেট

bpm

প্রতি ১ মিনিটে

6:11am - 55 bpm

হার্ট রেট ভ্যারিয়েবিলিটিআরএমএসডি

ms

প্রতি ১ মিনিটে

6:11am - 23 ms

শ্বাসযন্ত্রের হার

শ্বাস/মিনিট

প্রতি ১ মিনিটে

23:14 - 23:15 - 60 শ্বাস/মিনিট

23:16 - 23:16 - 62 শ্বাস/মিনিট

23:17 - 23:18 - 64 শ্বাস/মিনিট

অক্সিজেন স্যাচুরেশন

%

প্রতি 1 ঘন্টা

6:11 - 95.208%

সেশন লিখুন

ওয়ার্কআউট বা ঘুমের সেশনের শেষে স্বাস্থ্য সংযোগে ডেটা লিখতে হবে।

একটি সর্বোত্তম অনুশীলন হিসাবে, যে কোনো ঘুমের অধিবেশন বা ব্যায়াম সেশন রেকর্ডিং ডিভাইস এবং উপযুক্ত মেটাডেটা সহ RecordingMethod সহ লিখতে হবে।

ন্যূনতম, আপনার আবেদন নীচের "প্রত্যাশিত" কলামে নির্দেশিকা অনুসরণ করা উচিত। যেখানে সম্ভব, "সেরা" নির্দেশিকা অনুসরণ করুন।

একটি অনুশীলনের সময় ট্র্যাক করা ডেটা

ডেটা টাইপ

ইউনিট

প্রত্যাশিত

সেরা

উদাহরণ

ধাপ

পদক্ষেপ

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 5টি ধাপ

23:16 - 23:17 - 22 ধাপ

23:17 - 23:18 - 8 ধাপ

স্টেপস ক্যাডেন্স

পদক্ষেপ/মিনিট

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 35 spm

23:16 - 23:17 - 37 spm

23:17 - 23:18 - 40 spm

হুইলচেয়ার ঠেলে দেয়

ধাক্কা

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 5টি ধাক্কা

23:16 - 23:17 - 22 ধাক্কা

23:17 - 23:18 - 8 ধাক্কা

সাইক্লিং পেডালিং ক্যাডেন্স

আরপিএম

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 65 rpm

23:16 - 23:17 - 70 rpm

23:17 - 23:18 - 68 rpm

শক্তি

ওয়াট

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ডে

23:14-23:15 - 250 ওয়াট

23:16 - 23:17 - 255 ওয়াট

23:17 - 23:18 - 245 ওয়াট

গতি

কিমি/মিনিট

প্রতি ১ মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 0.3 কিমি/মিনিট

23:16 - 23:17 - 0.4 কিমি/মিনিট

23:17 - 23:18 -0.4 কিমি/মিনিট

দূরত্ব

কিমি/মি

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 0.008 কিমি

23:16 - 23:16 - 0.021 কিমি

23:17 - 23:18 - 0.012 কিমি

অ্যাক্টিভ্যালরিজবার্ন

ক্যালোরি

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 20 ক্যালোরি

23:16 - 23:17 - 20 ক্যালোরি

23:17 - 23:18 - 25 ক্যালোরি

টোটালকালরিজবার্ন

ক্যালোরি

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 36 ক্যালোরি

23:16 - 23:17 - 36 ক্যালোরি

23:17 - 23:18 - 41 ক্যালোরি

এলিভেশনগেনড

মি

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

20:36 - 20:37 - 3.048 মি

20:39 - 20:40 - 3.048 মি

23:23 - 23:24 - 9.144 মি

অনুশীলন

ল্যাট/এলএনজি/অল্ট

প্রতি 3-5 সেকেন্ডে

প্রতি 1 সেকেন্ড

হার্টরেট

bpm

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 150 বিপিএম

23:16 - 23:17 -152 বিপিএম

23:17 - 23:18 - 155 বিপিএম

ঘুমের সময় ডেটা ট্র্যাক করা

ডেটা টাইপ

ইউনিট

প্রত্যাশিত নমুনা

উদাহরণ

স্লিপ স্টেজিং

মঞ্চ

ঘুমের পর্যায়ে সময়কালের সময়কাল

23:46 - 23:50 - জাগ্রত

23:50 - 23:56 - হালকা ঘুম

23:56 - 00:16 - গভীর ঘুম

বিশ্রাম

bpm

একক দৈনিক মান (সকালে প্রত্যাশিত প্রথম জিনিস)

6:11 এএম - 60 বিপিএম

অক্সিজেনসেটরেশন

%

একক দৈনিক মান (সকালে প্রত্যাশিত প্রথম জিনিস)

6:11 - 95.208%

,

এই গাইডটি স্বাস্থ্য সংযোগ সংস্করণ 1.1.0-আলফা 12 এর সাথে সামঞ্জস্যপূর্ণ।

এই গাইডটি স্বাস্থ্য সংযোগে ডেটা লেখার বা আপডেট করার প্রক্রিয়াটি কভার করে।

ডেটা কাঠামো সেট আপ করুন

ডেটা লেখার আগে আমাদের প্রথমে রেকর্ডগুলি সেট আপ করতে হবে। 50 টিরও বেশি ডেটা ধরণের জন্য, প্রত্যেকের তাদের নিজ নিজ কাঠামো রয়েছে। উপলভ্য ডেটা প্রকার সম্পর্কে আরও তথ্যের জন্য জেটপ্যাক রেফারেন্স দেখুন।

বেসিক রেকর্ডস

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

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 120,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    )
)

পরিমাপের ইউনিট সহ রেকর্ডস

স্বাস্থ্য সংযোগ নির্ভুলতা সরবরাহ করতে তাদের পরিমাপের ইউনিটগুলির সাথে মানগুলি সঞ্চয় করতে পারে। একটি উদাহরণ হ'ল পুষ্টি ডেটা টাইপ যা বিস্তৃত এবং বিস্তৃত। এটিতে মোট কার্বোহাইড্রেট থেকে শুরু করে ভিটামিন পর্যন্ত বিভিন্ন ধরণের al চ্ছিক পুষ্টির ক্ষেত্র রয়েছে। প্রতিটি ডেটা পয়েন্ট পুষ্টির প্রতিনিধিত্ব করে যা কোনও খাবার বা খাবার আইটেমের অংশ হিসাবে সম্ভাব্যভাবে গ্রাস করা হয়েছিল।

এই ডেটা টাইপে, সমস্ত পুষ্টির Mass ইউনিটগুলিতে প্রতিনিধিত্ব করা হয়, যখন energy Energy এক ইউনিটে প্রতিনিধিত্ব করা হয়।

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(1))

val banana = NutritionRecord(
    name = "banana",
    energy = 105.0.kilocalories,
    dietaryFiber = 3.1.grams,
    potassium = 0.422.grams,
    totalCarbohydrate = 27.0.grams,
    totalFat = 0.4.grams,
    saturatedFat = 0.1.grams,
    sodium = 0.001.grams,
    sugar = 14.0.grams,
    vitaminB6 = 0.0005.grams,
    vitaminC = 0.0103.grams,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        device = Device(type = Device.TYPE_PHONE)
    )
)

সিরিজের ডেটা সহ রেকর্ডস

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

এই ডেটা টাইপে, প্যারামিটার samples হার্ট রেট নমুনাগুলির একটি তালিকা দ্বারা প্রতিনিধিত্ব করা হয়। প্রতিটি নমুনায় একটি beatsPerMinute মান এবং একটি time মান থাকে।

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

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(5))

val heartRateRecord = HeartRateRecord(
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    // records 10 arbitrary data, to replace with actual data
    samples = List(10) { index ->
        HeartRateRecord.Sample(
            time = startTime + Duration.ofSeconds(index.toLong()),
            beatsPerMinute = 100 + index.toLong(),
        )
    },
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    ))

ডেটা লিখুন

স্বাস্থ্য সংযোগের সাধারণ কর্মপ্রবাহগুলির মধ্যে একটি হ'ল ডেটা। রেকর্ড যুক্ত করতে, insertRecords ব্যবহার করুন।

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

suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
    val endTime = Instant.now()
    val startTime = endTime.minus(Duration.ofMinutes(5))
    try {
        val stepsRecord = StepsRecord(
            count = 120,
            startTime = startTime,
            endTime = endTime,
            startZoneOffset = ZoneOffset.UTC,
            endZoneOffset = ZoneOffset.UTC,
            metadata = Metadata.autoRecorded(
                device = Device(type = Device.TYPE_WATCH)
            )
        )
        healthConnectClient.insertRecords(listOf(stepsRecord))
    } catch (e: Exception) {
        // Run error handling here
    }
}

ডেটা আপডেট করুন

আপনার যদি এক বা একাধিক রেকর্ড পরিবর্তন করতে হয়, বিশেষত যখন আপনাকে স্বাস্থ্য সংযোগের ডেটাগুলির সাথে আপনার অ্যাপ্লিকেশন ডেটাস্টোর সিঙ্ক করতে হবে, আপনি আপনার ডেটা আপডেট করতে পারেন। বিদ্যমান ডেটা আপডেট করার দুটি উপায় রয়েছে যা রেকর্ডগুলি সন্ধানের জন্য ব্যবহৃত শনাক্তকারীর উপর নির্ভর করে।

মেটাডেটা

ডেটা আপডেট করার সময় এটি প্রয়োজনীয় কারণ এটি প্রথমে Metadata ক্লাসটি পরীক্ষা করা মূল্যবান। সৃষ্টিতে, স্বাস্থ্য সংযোগের প্রতিটি Record একটি metadata ক্ষেত্র রয়েছে। নিম্নলিখিত বৈশিষ্ট্যগুলি সিঙ্ক্রোনাইজেশনের সাথে প্রাসঙ্গিক:

বৈশিষ্ট্য বর্ণনা
id স্বাস্থ্য সংযোগের প্রতিটি Record একটি অনন্য id মান রয়েছে।
স্বাস্থ্য সংযোগ একটি নতুন রেকর্ড সন্নিবেশ করার সময় এটি স্বয়ংক্রিয়ভাবে এটি পপুলেট করে।
lastModifiedTime প্রতিটি Record রেকর্ডটি পরিবর্তন করার পরে শেষবারের ট্র্যাক রাখে।
স্বাস্থ্য সংযোগ এটি স্বয়ংক্রিয়ভাবে এটি পপুলেট করে।
clientRecordId আপনার অ্যাপ্লিকেশন ডেটাস্টোরে রেফারেন্স হিসাবে পরিবেশন করতে প্রতিটি Record সাথে এটির সাথে যুক্ত একটি অনন্য আইডি থাকতে পারে।
আপনার অ্যাপ্লিকেশন এই মান সরবরাহ করে।
clientRecordVersion যেখানে কোনও রেকর্ডে clientRecordId রয়েছে, আপনার অ্যাপ্লিকেশন ডেটাস্টোরের সংস্করণটির সাথে ডেটা সিঙ্কে থাকার অনুমতি দেওয়ার জন্য clientRecordVersion ভার্সনটি ব্যবহার করা যেতে পারে।
আপনার অ্যাপ্লিকেশন এই মান সরবরাহ করে।

রেকর্ড আইডির মাধ্যমে আপডেট করুন

ডেটা আপডেট করতে, প্রথমে প্রয়োজনীয় রেকর্ডগুলি প্রস্তুত করুন। প্রয়োজনে রেকর্ডগুলিতে কোনও পরিবর্তন সম্পাদন করুন। তারপরে, পরিবর্তনগুলি করতে updateRecords কল করুন।

নিম্নলিখিত উদাহরণটি কীভাবে ডেটা আপডেট করবেন তা দেখায়। এই উদ্দেশ্যে, প্রতিটি রেকর্ডের জোন অফসেট মানগুলি পিএসটি -তে সামঞ্জস্য করা হয়।

suspend fun updateSteps(
    healthConnectClient: HealthConnectClient,
    prevRecordStartTime: Instant,
    prevRecordEndTime: Instant
) {
    try {
        val request = healthConnectClient.readRecords(
            ReadRecordsRequest(
                recordType = StepsRecord::class, timeRangeFilter = TimeRangeFilter.between(
                    prevRecordStartTime, prevRecordEndTime
                )
            )
        )

        val newStepsRecords = arrayListOf<StepsRecord>()
        for (record in request.records) {
            // Adjusted both offset values to reflect changes
            val sr = StepsRecord(
                count = record.count,
                startTime = record.startTime,
                startZoneOffset = record.startTime.atZone(ZoneId.of("PST")).offset,
                endTime = record.endTime,
                endZoneOffset = record.endTime.atZone(ZoneId.of("PST")).offset,
                metadata = record.metadata
            )
            newStepsRecords.add(sr)
        }

        healthConnectClient.updateRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

ক্লায়েন্ট রেকর্ড আইডি মাধ্যমে আপসার্ট

আপনি যদি al চ্ছিক ক্লায়েন্ট রেকর্ড আইডি এবং ক্লায়েন্ট রেকর্ড সংস্করণ মানগুলি ব্যবহার করে থাকেন তবে আমরা updateRecords পরিবর্তে insertRecords ব্যবহার করার পরামর্শ দিই।

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

নিম্নলিখিত উদাহরণটি দেখায় যে অ্যাপ্লিকেশন ডেটাস্টোর থেকে টানা ডেটাগুলিতে কীভাবে একটি উত্সাহ সম্পাদন করবেন:

suspend fun pullStepsFromDatastore() : ArrayList<StepsRecord> {
    val appStepsRecords = arrayListOf<StepsRecord>()
    // Pull data from app datastore
    // ...
    // Make changes to data if necessary
    // ...
    // Store data in appStepsRecords
    // ...
    var sr = StepsRecord(
        metadata = Metadata.autoRecorded(
            clientRecordId = "Your client record ID",
            device = Device(type = Device.TYPE_WATCH)
        ),
        // Assign more parameters for this record
    )
    appStepsRecords.add(sr)
    // ...
    return appStepsRecords
}

suspend fun upsertSteps(
    healthConnectClient: HealthConnectClient,
    newStepsRecords: ArrayList<StepsRecord>
) {
    try {
        healthConnectClient.insertRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

এর পরে, আপনি এই ফাংশনগুলিকে আপনার মূল থ্রেডে কল করতে পারেন।

upsertSteps(healthConnectClient, pullStepsFromDatastore())

ক্লায়েন্ট রেকর্ড সংস্করণে মান চেক করুন

যদি আপনার আপসার্ট করার ডেটা প্রক্রিয়াটি ক্লায়েন্ট রেকর্ড সংস্করণ অন্তর্ভুক্ত করে তবে স্বাস্থ্য সংযোগটি clientRecordVersion মানগুলিতে তুলনা চেকগুলি সম্পাদন করে। যদি সন্নিবেশিত ডেটা থেকে সংস্করণটি বিদ্যমান ডেটা থেকে সংস্করণটির চেয়ে বেশি হয় তবে আপসার্টটি ঘটে। অন্যথায়, প্রক্রিয়াটি পরিবর্তনকে উপেক্ষা করে এবং মান একই থাকে।

আপনার ডেটাতে সংস্করণ অন্তর্ভুক্ত করার জন্য, আপনাকে আপনার সংস্করণ যুক্তির উপর ভিত্তি করে একটি Long মান সহ Metadata.clientRecordVersion সরবরাহ করতে হবে।

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 100L,
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        clientRecordId = "Your supplied record ID",
        clientRecordVersion = 0L, // Your supplied record version
        device = Device(type = Device.TYPE_WATCH)
    )
)

ওভাররাইটিং ডেটার কোনও অপ্রত্যাশিত উদাহরণগুলি প্রতিরোধ করে যখনই পরিবর্তন হয় তখন আপসারেটগুলি স্বয়ংক্রিয়ভাবে version বৃদ্ধি করে না। এটির সাথে, আপনাকে ম্যানুয়ালি এটি একটি উচ্চতর মান সরবরাহ করতে হবে।

ডেটা লেখার জন্য সর্বোত্তম অনুশীলন

অ্যাপ্লিকেশনগুলিকে অবশ্যই স্বাস্থ্য সংযোগে নিজস্ব-উত্সাহী ডেটা লিখতে হবে।

যদি আপনার অ্যাপ্লিকেশনটির ডেটা অন্য অ্যাপ্লিকেশন থেকে আমদানি করা হয়, তবে দায়বদ্ধতাটি স্বাস্থ্য সংযোগে নিজস্ব ডেটা লেখার জন্য অন্য অ্যাপ্লিকেশনটিতে পড়ে।

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

ডেটা ট্র্যাক করার সময়, আপনার অ্যাপ্লিকেশনটি যেভাবে ডেটা লেখেন তার উপর নির্ভর করে আপনি কয়েকটি পরামর্শ অনুসরণ করতে পারেন।

প্যাসিভ ট্র্যাকিং

এর মধ্যে এমন অ্যাপ্লিকেশন অন্তর্ভুক্ত রয়েছে যা প্যাসিভ ফিটনেস বা স্বাস্থ্য ট্র্যাকিং সম্পাদন করে, যেমন ব্যাকগ্রাউন্ডে ধারাবাহিকভাবে রেকর্ডিং পদক্ষেপ বা হার্ট রেট।

আপনার অ্যাপ্লিকেশনটিকে পর্যায়ক্রমে নিম্নলিখিত উপায়ে স্বাস্থ্য সংযোগে ডেটা লিখতে হবে:

  • প্রতিটি সিঙ্কে, কেবলমাত্র নতুন ডেটা এবং আপডেট হওয়া ডেটা লিখুন যা শেষ সিঙ্কের পরে পরিবর্তিত হয়েছিল।
  • লেখার অনুরোধ অনুসারে সর্বাধিক 1000 রেকর্ডে অনুরোধ অনুরোধ।
  • কমপক্ষে 15 মিনিটের সময়কালের সাথে পর্যায়ক্রমিক পটভূমির কার্যগুলি সময়সূচী করতে WorkManager ব্যবহার করুন।
  • যখন ডিভাইসটি অলস থাকে এবং ব্যাটারিতে কম থাকে না কেবল তখনই চালানোর জন্য কার্যগুলি সীমাবদ্ধ করুন।

    val constraints = Constraints.Builder()
        .requiresBatteryNotLow()
        .requiresDeviceIdle(true)
        .build()
    
    val writeDataWork = PeriodicWorkRequestBuilder<WriteDataToHealthConnectWorker>(
            15,
            TimeUnit.MINUTES,
            5,
            TimeUnit.MINUTES
        )
        .setConstraints(constraints)
        .build()
    

সক্রিয় ট্র্যাকিং

এর মধ্যে এমন অ্যাপ্লিকেশন অন্তর্ভুক্ত রয়েছে যা ইভেন্ট-ভিত্তিক ট্র্যাকিং যেমন অনুশীলন এবং ঘুম, বা পুষ্টির মতো ম্যানুয়াল ব্যবহারকারী ইনপুট সম্পাদন করে। এই রেকর্ডগুলি তৈরি করা হয় যখন অ্যাপটি অগ্রভাগে থাকে বা বিরল ইভেন্টগুলিতে যেখানে এটি দিনে কয়েকবার ব্যবহৃত হয়।

নিশ্চিত করুন যে আপনার অ্যাপ্লিকেশনটি ইভেন্টের পুরো সময়কালের জন্য স্বাস্থ্য সংযোগ চালিয়ে না রাখে।

ডেটা অবশ্যই দুটি উপায়ে স্বাস্থ্য সংযোগে লিখতে হবে:

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

গ্রানুলারিটি এবং লেখার ফ্রিকোয়েন্সি জন্য সেরা অনুশীলন

স্বাস্থ্য সংযোগে ডেটা লেখার সময়, উপযুক্ত রেজোলিউশন ব্যবহার করুন। উপযুক্ত রেজোলিউশন ব্যবহার করা স্টোরেজ লোড হ্রাস করতে সহায়তা করে, এখনও সামঞ্জস্যপূর্ণ এবং সঠিক ডেটা বজায় রেখে। ডেটা রেজোলিউশন 2 টি জিনিসকে অন্তর্ভুক্ত করে:

  1. লেখার ফ্রিকোয়েন্সি : আপনার অ্যাপ্লিকেশনটি কতবার স্বাস্থ্য সংযোগে কোনও নতুন ডেটা ঠেলে দেয়। উদাহরণস্বরূপ, প্রতি 15 মিনিটে নতুন ডেটা লিখুন।
  2. লিখিত ডেটার গ্রানুলারিটি : কতবার যে ডেটা ধাক্কা দেওয়া হয় তা নমুনা দেওয়া হয়েছিল। উদাহরণস্বরূপ, প্রতি 5s প্রতি হার্ট রেট নমুনা লিখুন। প্রতিটি ডেটা ধরণের একই নমুনা হার প্রয়োজন হয় না। প্রতি সেকেন্ডে প্রতি সেকেন্ডে স্টেপ কাউন্ট ডেটা আপডেট করার খুব কম সুবিধা নেই, যেমন প্রতি 60 সেকেন্ডের মতো কম ঘন ঘন ক্যাডেন্সের বিপরীতে। তবে উচ্চতর নমুনার হার ব্যবহারকারীদের তাদের স্বাস্থ্য এবং ফিটনেস ডেটাগুলিতে আরও বিশদ এবং দানাদার চেহারা দিতে পারে। নমুনা হারের ফ্রিকোয়েন্সিগুলি বিশদ এবং পারফরম্যান্সের মধ্যে একটি ভারসাম্য বজায় রাখতে হবে।

দিন জুড়ে পর্যবেক্ষণ করা ডেটা লিখুন

চলমান ভিত্তিতে সংগৃহীত ডেটার জন্য, পদক্ষেপের মতো, আপনার অ্যাপ্লিকেশনটি দিনে কমপক্ষে প্রতি 15 মিনিটে স্বাস্থ্য সংযোগে লিখতে হবে।

ডেটা টাইপ

ইউনিট

প্রত্যাশিত

উদাহরণ

ধাপ

পদক্ষেপ

প্রতি 1 মিনিটে

23:14 - 23:15 - 5 পদক্ষেপ

23:16 - 23:17 - 22 পদক্ষেপ

23:17 - 23:18 - 8 পদক্ষেপ

স্টেপস্ক্যাডেন্স

পদক্ষেপ/মিনিট

প্রতি 1 মিনিটে

23:14 - 23:15 - 5 এসপিএম

23:16 - 23:17 - 22 এসপিএম

23:17 - 23:18 - 8 এসপিএম

হুইলচেয়ার ধাক্কা দেয়

ধাক্কা

প্রতি 1 মিনিটে

23:14 - 23:15 - 5 ধাক্কা

23:16 - 23:17 - 22 ধাক্কা

23:17 - 23:18 - 8 ধাক্কা

অ্যাক্টিভ্যালরিজবার্ন

ক্যালোরি

প্রতি 15 মিনিটে

23:15 - 23:30 - 2 ক্যালোরি

23:30 - 23:45 - 25 ক্যালোরি

23:45 - 00:00 - 5 ক্যালোরি

টোটালকালরিজবার্ন

ক্যালোরি

প্রতি 15 মিনিটে

23:15 - 23:30 - 16 ক্যালোরি

23:30 - 23:45 - 16 ক্যালোরি

23:45 - 00:00 - 16 ক্যালোরি

দূরত্ব

কিমি/মিনিট

প্রতি 1 মিনিটে

23: 14-23: 15 - 0.008 কিমি

23:16 - 23:16 - 0.021 কিমি

23:17 - 23:18 - 0.012 কিমি

এলিভেশনগেনড

মি

প্রতি 1 মিনিটে

20:36 - 20:37 - 3.048 মি

20:39 - 20:40 - 3.048 মি

23:23 - 23:24 - 9.144 মি

ফ্লোরস্লিম্বেড

মেঝে

প্রতি 1 মিনিটে

23:14 - 23:15 - 5 তল

23:16 - 23:16 - 22 তল

23:17 - 23:18 - 8 তল

হার্টরেট

bpm

প্রতি 1 মিনিটে

6:11 এএম - 55 বিপিএম

Hertratevaribilityrsmsd

ms

প্রতি 1 মিনিটে

6:11 এএম - 23 এমএস

শ্বাস প্রশ্বাসের

শ্বাস/মিনিট

প্রতি 1 মিনিটে

23:14 - 23:15 - 60 শ্বাস/মিনিট

23:16 - 23:16 - 62 শ্বাস/মিনিট

23:17 - 23:18 - 64 শ্বাস/মিনিট

অক্সিজেনসেটরেশন

%

প্রতি 1 ঘন্টা

6:11 - 95.208%

সেশন লিখুন

ওয়ার্কআউট বা স্লিপ সেশনের শেষে স্বাস্থ্য সংযোগে ডেটা লেখা উচিত।

সেরা অনুশীলন হিসাবে, যে কোনও স্লিপ সেশন বা অনুশীলন সেশন রেকর্ডিং ডিভাইস এবং RecordingMethod সহ উপযুক্ত মেটাডেটা সহ লেখা উচিত।

সর্বনিম্ন, আপনার অ্যাপ্লিকেশনটি নীচের "প্রত্যাশিত" কলামে গাইডেন্স অনুসরণ করা উচিত। যেখানে সম্ভব, "সেরা" গাইডেন্স অনুসরণ করুন।

একটি অনুশীলনের সময় ডেটা ট্র্যাক করা

ডেটা টাইপ

ইউনিট

প্রত্যাশিত

সেরা

উদাহরণ

ধাপ

পদক্ষেপ

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 5 পদক্ষেপ

23:16 - 23:17 - 22 পদক্ষেপ

23:17 - 23:18 - 8 পদক্ষেপ

স্টেপস্ক্যাডেন্স

পদক্ষেপ/মিনিট

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 35 এসপিএম

23:16 - 23:17 - 37 এসপিএম

23:17 - 23:18 - 40 এসপিএম

হুইলচেয়ার ধাক্কা দেয়

ধাক্কা

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 5 ধাক্কা

23:16 - 23:17 - 22 ধাক্কা

23:17 - 23:18 - 8 ধাক্কা

সাইক্লিংপেলিংক্যাডেন্স

আরপিএম

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 65 আরপিএম

23:16 - 23:17 - 70 আরপিএম

23:17 - 23:18 - 68 আরপিএম

শক্তি

ওয়াট

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 250 ওয়াট

23:16 - 23:17 - 255 ওয়াট

23:17 - 23:18 - 245 ওয়াট

গতি

কিমি/মিনিট

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 0.3 কিমি/মিনিট

23:16 - 23:17 - 0.4 কিমি/মিনিট

23:17 - 23:18 -0.4 কিমি/মিনিট

দূরত্ব

কিমি/মি

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 0.008 কিমি

23:16 - 23:16 - 0.021 কিমি

23:17 - 23:18 - 0.012 কিমি

অ্যাক্টিভ্যালরিজবার্ন

ক্যালোরি

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 20 ক্যালোরি

23:16 - 23:17 - 20 ক্যালোরি

23:17 - 23:18 - 25 ক্যালোরি

টোটালকালরিজবার্ন

ক্যালোরি

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 36 ক্যালোরি

23:16 - 23:17 - 36 ক্যালোরি

23:17 - 23:18 - 41 ক্যালোরি

এলিভেশনগেনড

মি

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

20:36 - 20:37 - 3.048 মি

20:39 - 20:40 - 3.048 মি

23:23 - 23:24 - 9.144 মি

অনুশীলন

ল্যাট/এলএনজি/অল্ট

প্রতি 3-5 সেকেন্ডে

প্রতি 1 সেকেন্ড

হার্টরেট

bpm

প্রতি 1 মিনিটে

প্রতি 1 সেকেন্ড

23: 14-23: 15 - 150 বিপিএম

23:16 - 23:17 -152 বিপিএম

23:17 - 23:18 - 155 বিপিএম

ঘুমের সময় ডেটা ট্র্যাক করা

ডেটা টাইপ

ইউনিট

প্রত্যাশিত নমুনা

উদাহরণ

স্লিপ স্টেজিং

মঞ্চ

ঘুমের পর্যায়ে সময়কালের সময়কাল

23:46 - 23:50 - জাগ্রত

23:50 - 23:56 - হালকা ঘুম

23:56 - 00:16 - গভীর ঘুম

বিশ্রাম

bpm

একক দৈনিক মান (সকালে প্রত্যাশিত প্রথম জিনিস)

6:11 এএম - 60 বিপিএম

অক্সিজেনসেটরেশন

%

একক দৈনিক মান (সকালে প্রত্যাশিত প্রথম জিনিস)

6:11 - 95.208%