Health Connect StepsRecord ব্যবহার করে ধাপ গণনা রেকর্ড করার জন্য একটি ধাপ ডেটা টাইপ প্রদান করে। স্বাস্থ্য এবং ফিটনেস ট্র্যাকিংয়ের ক্ষেত্রে ধাপগুলি একটি মৌলিক পরিমাপ।
মোবাইলের ধাপগুলি পড়ুন
অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) এবং এসডিকে এক্সটেনশন ভার্সন ২০ বা তার বেশি হলে, হেলথ কানেক্ট ডিভাইসে ধাপ গণনা প্রদান করে। যদি কোনও অ্যাপকে READ_STEPS অনুমতি দেওয়া হয়, তাহলে হেলথ কানেক্ট অ্যান্ড্রয়েড-চালিত ডিভাইস থেকে ধাপগুলি ক্যাপচার করা শুরু করে এবং ব্যবহারকারীরা হেলথ কানেক্ট স্টেপস এন্ট্রিতে স্বয়ংক্রিয়ভাবে ধাপের ডেটা যুক্ত হতে দেখে।
ডিভাইসে ধাপ গণনা উপলব্ধ কিনা তা পরীক্ষা করার জন্য, আপনাকে যাচাই করতে হবে যে ডিভাইসটি 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
Health Connect দ্বারা ধারণ করা মোবাইল ধাপগুলির DataOrigin প্যাকেজ নাম android এ সেট করা আছে। যদি আপনার অ্যাপটি aggregate ব্যবহার করে কেবল সমষ্টিগত ধাপ গণনা পড়ে এবং DataOrigin দ্বারা ফিল্টার না করে, তাহলে ডিভাইসের ধাপগুলি স্বয়ংক্রিয়ভাবে মোটের মধ্যে অন্তর্ভুক্ত হয়ে যায়।
যদি আপনার অ্যাপের ডিভাইসের ধাপগুলি পড়ার প্রয়োজন হয়, অথবা যদি এটি সোর্স অ্যাপ্লিকেশন বা ডিভাইস অনুসারে বিভক্ত ধাপের ডেটা প্রদর্শন করে, তাহলে আপনি DataOrigin কোথায় android তা রেকর্ডের জন্য অনুসন্ধান করতে পারেন। যদি আপনার অ্যাপটি ধাপের ডেটার জন্য অ্যাট্রিবিউশন দেখায়, তাহলে আপনার android প্যাকেজ থেকে বর্তমান ডিভাইসে ডেটা অ্যাট্রিবিউট করা উচিত। আপনি "Your phone" এর মতো একটি লেবেল ব্যবহার করে, Settings.Global.getString(resolver, Settings.Global.DEVICE_NAME) দিয়ে ডিভাইসের নাম পুনরুদ্ধার করে, অথবা রেকর্ডের মেটাডেটাতে Device ক্ষেত্রটি পরিদর্শন করে এটি করতে পারেন।
নিম্নলিখিত উদাহরণে android ডেটা অরিজিনের জন্য ফিল্টার করে একত্রিত মোবাইল স্টেপ কাউন্ট ডেটা কীভাবে পড়তে হয় তা দেখানো হয়েছে:
suspend fun readStepsByTimeRange(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response = healthConnectClient.aggregate(
AggregateRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
dataOriginFilter = setOf(DataOrigin("android"))
)
)
// The result may be null if no data is available in the time range
val stepCount = response[StepsRecord.COUNT_TOTAL]
} catch (e: Exception) {
// Run error handling here
}
}
ডিভাইসে ধাপ গণনা
ডিভাইসে ধাপ গণনা বৈশিষ্ট্যটির আরও গভীরে প্রবেশ করা:
- সেন্সর ব্যবহার : Health Connect
SensorManagerএরTYPE_STEP_COUNTERসেন্সর ব্যবহার করে। এই সেন্সরটি কম বিদ্যুৎ খরচের জন্য অপ্টিমাইজ করা হয়েছে, যা এটিকে ক্রমাগত ব্যাকগ্রাউন্ড স্টেপ ট্র্যাকিংয়ের জন্য আদর্শ করে তোলে। - ডেটা গ্রানুলারিটি : ব্যাটারির আয়ু বাঁচাতে, স্টেপ ডেটা সাধারণত ব্যাচ করা হয় এবং হেলথ কানেক্ট ডাটাবেসে প্রতি মিনিটে একবারের বেশি লেখা হয় না।
- অ্যাট্রিবিউশন : যেমনটি আগেই উল্লেখ করা হয়েছে, এই অন-ডিভাইস বৈশিষ্ট্য দ্বারা রেকর্ড করা সমস্ত পদক্ষেপ
DataOriginএ থাকাandroidপ্যাকেজের নামের সাথে সম্পর্কিত। - সক্রিয়করণ : ডিভাইসে ধাপ গণনা প্রক্রিয়াটি কেবল তখনই সক্রিয় থাকে যখন ডিভাইসে কমপক্ষে একটি অ্যাপ্লিকেশনকে Health Connect-এর মধ্যে
READ_STEPSঅনুমতি দেওয়া হয়।
হেলথ কানেক্টের প্রাপ্যতা পরীক্ষা করুন
Health Connect ব্যবহার করার চেষ্টা করার আগে, আপনার অ্যাপটি যাচাই করে নেবে যে ব্যবহারকারীর ডিভাইসে Health Connect উপলব্ধ আছে কিনা। Health Connect সমস্ত ডিভাইসে আগে থেকে ইনস্টল নাও থাকতে পারে অথবা অক্ষম করা যেতে পারে। আপনি HealthConnectClient.getSdkStatus() পদ্ধতি ব্যবহার করে উপলব্ধতা পরীক্ষা করতে পারেন।
হেলথ কানেক্টের প্রাপ্যতা কীভাবে পরীক্ষা করবেন
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() দ্বারা ফেরত দেওয়া স্ট্যাটাসের উপর নির্ভর করে, আপনি প্রয়োজনে ব্যবহারকারীকে গুগল প্লে স্টোর থেকে Health Connect ইনস্টল বা আপডেট করার জন্য নির্দেশ দিতে পারেন।
প্রয়োজনীয় অনুমতি
ধাপগুলিতে অ্যাক্সেস নিম্নলিখিত অনুমতি দ্বারা সুরক্ষিত:
-
android.permission.health.READ_STEPS -
android.permission.health.WRITE_STEPS
আপনার অ্যাপে ধাপের ক্ষমতা যোগ করতে, Steps ডেটা টাইপের জন্য লেখার অনুমতি অনুরোধ করে শুরু করুন।
ধাপগুলি লিখতে সক্ষম হওয়ার জন্য আপনাকে যে অনুমতিটি ঘোষণা করতে হবে তা এখানে:
<application>
<uses-permission
android:name="android.permission.health.WRITE_STEPS" />
...
</application>
ধাপগুলি পড়ার জন্য, আপনাকে নিম্নলিখিত অনুমতিগুলির জন্য অনুরোধ করতে হবে:
<application>
<uses-permission
android:name="android.permission.health.READ_STEPS" />
...
</application>
ব্যবহারকারীর কাছ থেকে অনুমতির অনুরোধ করুন
একটি ক্লায়েন্ট ইনস্ট্যান্স তৈরি করার পরে, আপনার অ্যাপটিকে ব্যবহারকারীর কাছ থেকে অনুমতি চাইতে হবে। ব্যবহারকারীদের যেকোনো সময় অনুমতি প্রদান বা অস্বীকার করার অনুমতি দিতে হবে।
এটি করার জন্য, প্রয়োজনীয় ডেটা টাইপের জন্য অনুমতিগুলির একটি সেট তৈরি করুন। নিশ্চিত করুন যে সেটের অনুমতিগুলি প্রথমে আপনার অ্যান্ড্রয়েড ম্যানিফেস্টে ঘোষণা করা হয়েছে।
// Create a set of permissions for required data types
val PERMISSIONS =
setOf(
HealthPermission.getReadPermission(StepsRecord::class),
HealthPermission.getWritePermission(StepsRecord::class)
)
আপনার অ্যাপটি ইতিমধ্যেই প্রয়োজনীয় অনুমতি পেয়েছে কিনা তা দেখতে getGrantedPermissions ব্যবহার করুন। যদি না থাকে, তাহলে সেই অনুমতিগুলির জন্য অনুরোধ করতে createRequestPermissionResultContract ব্যবহার করুন। এটি Health Connect অনুমতিগুলির স্ক্রিন প্রদর্শন করে।
// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()
val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
if (granted.containsAll(PERMISSIONS)) {
// Permissions successfully granted
} else {
// Lack of required permissions
}
}
suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
val granted = healthConnectClient.permissionController.getGrantedPermissions()
if (granted.containsAll(PERMISSIONS)) {
// Permissions already granted; proceed with inserting or reading data
} else {
requestPermissions.launch(PERMISSIONS)
}
}
যেহেতু ব্যবহারকারীরা যেকোনো সময় অনুমতি দিতে বা প্রত্যাহার করতে পারেন, তাই আপনার অ্যাপকে পর্যায়ক্রমে মঞ্জুরকৃত অনুমতিগুলি পরীক্ষা করতে হবে এবং অনুমতি হারিয়ে গেলে পরিস্থিতি মোকাবেলা করতে হবে।
ধাপ রেকর্ডে অন্তর্ভুক্ত তথ্য
প্রতিটি StepsRecord নিম্নলিখিত তথ্য থাকে:
-
count: সময়ের ব্যবধানে গৃহীত পদক্ষেপের সংখ্যা, একটিLongহিসাবে। -
startTime: পরিমাপ ব্যবধানের শুরুর সময়। -
endTime: পরিমাপ ব্যবধানের সমাপ্তি সময়। -
startZoneOffset: শুরুর সময়ের জন্য জোন অফসেট। -
endZoneOffset: শেষ সময়ের জন্য জোন অফসেট।
সমর্থিত সমষ্টি
StepsRecord এর জন্য নিম্নলিখিত সমষ্টিগত মানগুলি উপলব্ধ:
StepsCadenceRecord এর জন্য নিম্নলিখিত সমষ্টিগত মানগুলি উপলব্ধ:
ব্যবহারের উদাহরণ
নিম্নলিখিত বিভাগগুলিতে StepsRecord ডেটা কীভাবে পড়তে এবং লিখতে হয় তা দেখানো হয়েছে।
ধাপের তথ্য লিখুন
আপনার অ্যাপ StepsRecord ইনস্ট্যান্স সন্নিবেশ করে ধাপ গণনার তথ্য লিখতে পারে। নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একজন ব্যবহারকারীর নেওয়া ১০০০টি পদক্ষেপ রেকর্ড করতে হয়:
suspend fun writeStepsData(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant,
startZoneOffset: ZoneOffset,
endZoneOffset: ZoneOffset
) {
try {
val stepsRecord = StepsRecord(
startTime = startTime,
startZoneOffset = startZoneOffset,
endTime = endTime,
endZoneOffset = endZoneOffset,
count = 1000
)
healthConnectClient.insertRecords(listOf(stepsRecord))
} catch (e: Exception) {
// Run error handling
}
}
সমষ্টিগত তথ্য পড়ুন
ধাপের তথ্য পড়ার সবচেয়ে সাধারণ উপায় হল একটি নির্দিষ্ট সময়কালের মধ্যে মোট ধাপের সংখ্যা একত্রিত করা। নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি নির্দিষ্ট সময়সীমার মধ্যে একজন ব্যবহারকারীর জন্য মোট ধাপের সংখ্যা পড়তে হয়:
suspend fun readStepsAggregate(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response = healthConnectClient.aggregate(
AggregateRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
// The result may be null if no data is available in the time range
val stepCount = response[StepsRecord.COUNT_TOTAL]
} catch (e: Exception) {
// Run error handling here
}
}
কাঁচা তথ্য পড়ুন
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে শুরু এবং শেষ সময়ের মধ্যে কাঁচা StepsRecord ডেটা পড়তে হয়:
suspend fun readStepsRaw(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response = healthConnectClient.readRecords(
ReadRecordsRequest(
recordType = StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
for (record in response.records) {
// Process each record
}
} catch (e: Exception) {
// Run error handling here
}
}