মোবাইলে রেকর্ডিং API আপনার অ্যাপকে মোবাইল ডিভাইস থেকে ব্যাটারি সাশ্রয়ী উপায়ে ফিটনেস ডেটা রেকর্ড করতে দেয়। উদাহরণস্বরূপ, ধাপ রেকর্ড করতে এই API ব্যবহার করুন, যেমন একটি পেডোমিটার ধাপ গণনার ডেটা পুনরুদ্ধার করে। এই API অ্যাকাউন্টলেস, অর্থাৎ পরিষেবাটি ব্যবহার করার জন্য কোনও Google অ্যাকাউন্টের প্রয়োজন হয় না এবং ডেটা ডিভাইসে সংরক্ষণ করা হয়।
যদি আপনার অ্যাপটিকে ডিভাইসে থাকা ধাপগুলি ছাড়াও বিভিন্ন উৎস থেকে অন্যান্য স্বাস্থ্য এবং ফিটনেস ডেটা পড়ার প্রয়োজন হয়, তাহলে Health Connect-এর সাথে একীভূত করা একটি ভাল বিকল্প। Health Connect Android 14 (API লেভেল 34) এবং উচ্চতর সংস্করণে নেটিভভাবে অন-ডিভাইস ধাপগুলিতে অ্যাক্সেস প্রদান করে।
এই নির্দেশিকাটি আপনাকে দেখাবে কিভাবে আপনার স্বাস্থ্য ও ফিটনেস অভিজ্ঞতায় মোবাইলে রেকর্ডিং API ব্যবহার করবেন।
উদাহরণের জন্য GitHub-এ মোবাইল নমুনায় রেকর্ডিং API দেখুন।
উল্লেখযোগ্য বিবরণ
মোবাইলে রেকর্ডিং এপিআই-এর বেশ কিছু উল্লেখযোগ্য বৈশিষ্ট্য অনন্য:
- রেকর্ডিং সাবস্ক্রিপশন শুরু হলে বা নবায়ন করা হলে, সর্বশেষ সাবস্ক্রিপশনের পর থেকে - সর্বোচ্চ ১০ দিন পর্যন্ত - ডেটা অ্যাক্সেসযোগ্য হবে।
- সক্রিয় সাবস্ক্রিপশন থাকলেই কেবল ডেটা পাওয়া যায়। যদি
unsubscribeকল করে সাবস্ক্রিপশন সরিয়ে ফেলা হয়, তাহলে সংগৃহীত ডেটা অ্যাক্সেসযোগ্য হবে না।
ডেটা টাইপ
মোবাইলে রেকর্ডিং API নিম্নলিখিত ধরণের ডেটা রেকর্ড করতে পারে:
শুরু করুন
শুরু করতে, আপনার build.gradle ফাইলে নিম্নলিখিত নির্ভরতা যোগ করুন:
কোটলিন ডিএসএল
plugin {
id("com.android.application")
}
...
dependencies {
implementation("com.google.android.gms:play-services-fitness:21.2.0")
}
গ্রুভি ডিএসএল
apply plugin: 'com.android.application'
...
dependencies {
implementation 'com.google.android.gms:play-services-fitness:21.2.0'
}
অনুমতির জন্য অনুরোধ করুন
মোবাইলে রেকর্ডিং API ব্যবহার করে ডেটা রেকর্ড করতে, আপনার অ্যাপকে নিম্নলিখিত অনুমতির অনুরোধ করতে হবে:
-
android.permission.ACTIVITY_RECOGNITION
প্লে সার্ভিসেসের একটি সংস্করণ পরীক্ষা করুন
মোবাইলে রেকর্ডিং API ব্যবহার করার জন্য, ব্যবহারকারীর Google Play পরিষেবাগুলি LOCAL_RECORDING_CLIENT_MIN_VERSION_CODE এ আপডেট করা থাকতে হবে। আপনি isGooglePlayServicesAvailable পদ্ধতি ব্যবহার করে এটি পরীক্ষা করতে পারেন:
val hasMinPlayServices = isGooglePlayServicesAvailable(context, LocalRecordingClient.LOCAL_RECORDING_CLIENT_MIN_VERSION_CODE)
if(hasMinPlayServices != ConnectionResult.SUCCESS) {
// Prompt user to update their device's Google Play services app and return
}
// Continue with Recording API functions
অন্যথায়, যদি ব্যবহারকারীর Google Play পরিষেবা সংস্করণ খুব কম হয়, তাহলে সিস্টেমটি একটি ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED ব্যতিক্রম নিক্ষেপ করবে।
ফিটনেস ডেটা সাবস্ক্রাইব করুন
ধাপের ডেটার ব্যাকগ্রাউন্ড সংগ্রহের অনুরোধ করতে, নিম্নলিখিত কোড স্নিপেটে দেখানো subscribe পদ্ধতিটি ব্যবহার করুন:
val localRecordingClient = FitnessLocal.getLocalRecordingClient(this)
// Subscribe to steps data
localRecordingClient.subscribe(LocalDataType.TYPE_STEP_COUNT_DELTA)
.addOnSuccessListener {
Log.i(TAG, "Successfully subscribed!")
}
.addOnFailureListener { e ->
Log.w(TAG, "There was a problem subscribing.", e)
}
ফিটনেস ডেটা পড়ুন এবং প্রক্রিয়া করুন
সাবস্ক্রাইব করার পর, readData পদ্ধতি ব্যবহার করে ডেটা অনুরোধ করুন। তারপর, আপনি নিম্নলিখিত কোড স্নিপেটে দেখানো একটি LocalDataReadRequest তৈরি করে ফলাফল প্রাপ্ত LocalDataSet থেকে LocalDataPoints পেতে পারেন:
val endTime = LocalDateTime.now().atZone(ZoneId.systemDefault())
val startTime = endTime.minusWeeks(1)
val readRequest =
LocalDataReadRequest.Builder()
// The data request can specify multiple data types to return,
// effectively combining multiple data queries into one call.
// This example demonstrates aggregating only one data type.
.aggregate(LocalDataType.TYPE_STEP_COUNT_DELTA)
// Analogous to a "Group By" in SQL, defines how data should be
// aggregated. bucketByTime allows bucketing by time span.
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime.toEpochSecond(), endTime.toEpochSecond(), TimeUnit.SECONDS)
.build()
localRecordingClient.readData(readRequest).addOnSuccessListener { response ->
// The aggregate query puts datasets into buckets, so flatten into a
// single list of datasets.
for (dataSet in response.buckets.flatMap { it.dataSets }) {
dumpDataSet(dataSet)
}
}
.addOnFailureListener { e ->
Log.w(TAG,"There was an error reading data", e)
}
fun dumpDataSet(dataSet: LocalDataSet) {
Log.i(TAG, "Data returned for Data type: ${dataSet.dataType.name}")
for (dp in dataSet.dataPoints) {
Log.i(TAG,"Data point:")
Log.i(TAG,"\tType: ${dp.dataType.name}")
Log.i(TAG,"\tStart: ${dp.getStartTime(TimeUnit.HOURS)}")
Log.i(TAG,"\tEnd: ${dp.getEndTime(TimeUnit.HOURS)}")
for (field in dp.dataType.fields) {
Log.i(TAG,"\tLocalField: ${field.name.toString()} LocalValue: ${dp.getValue(field)}")
}
}
}
LocalRecordingClient ক্রমাগত তার তথ্য সংগ্রহ আপডেট করে। আপনি যেকোনো সময় সর্বশেষ সংখ্যাগুলি সংগ্রহ করতে readData ব্যবহার করতে পারেন।
মনে রাখবেন যে LocalRecordingClient ১০ দিন পর্যন্ত ডেটা সঞ্চয় করে। ডেটা হারানোর ঝুঁকি কমাতে, আপনি ব্যাকগ্রাউন্ডে পর্যায়ক্রমে ডেটা সংগ্রহ করতে WorkManager ব্যবহার করতে পারেন।
ফিটনেস ডেটা থেকে সদস্যতা ত্যাগ করুন
রিসোর্স খালি করার জন্য, যখন আপনার অ্যাপের আর প্রয়োজন হবে না, তখন সেন্সর ডেটা সংগ্রহ থেকে আনসাবস্ক্রাইব করতে ভুলবেন না। আনসাবস্ক্রাইব করতে, unsubscribe পদ্ধতিটি ব্যবহার করুন:
val localRecordingClient = FitnessLocal.getLocalRecordingClient(this)
// Unsubscribe from steps data
localRecordingClient.unsubscribe(LocalDataType.TYPE_STEP_COUNT_DELTA)
.addOnSuccessListener {
Log.i(TAG, "Successfully unsubscribed!")
}
.addOnFailureListener { e ->
Log.w(TAG, "There was a problem unsubscribing.", e)
}