Recording API בנייד מאפשר לאפליקציה לתעד שלבים ממכשיר נייד בצורה חסכונית בסוללה. ה-API הזה חסר חשבון, כלומר הוא לא מחייב לחשבון Google שבו ניתן להשתמש בשירות והנתונים מאוחסנים במכשיר.
במדריך הזה תלמדו איך להשתמש ב-Record API בנייד במצב בריאותי חוויות כושר גופני.
פרטים חשובים
יש כמה תכונות ייחודיות ל-Record API בנייד:
- לאחר שהמינוי להקלטה יתחיל או יתחדש, הנתונים מאז המינוי - לתקופה של עד 10 ימים - הוא נגיש.
- הנתונים זמינים רק כשיש מינוי פעיל. אם מדובר במינוי
מוסרת על ידי קריאה אל
unsubscribe
, נתוני השלבים שנאספו לא יהיו נגישים.
סוגי הנתונים
Recording API בנייד יכול לתעד את סוגי הנתונים הבאים:
שנתחיל?
כדי להתחיל, צריך להוסיף את התלות הבאה לקובץ build.gradle
:
Kotlin DSL
plugin {
id("com.android.application")
}
...
dependencies {
implementation("com.google.android.gms:play-services-fitness:21.2.0")
}
DSL מדליק
apply plugin: 'com.android.application'
...
dependencies {
implementation 'com.google.android.gms:play-services-fitness:21.2.0'
}
בקשת הרשאות
כדי להקליט נתונים באמצעות Recording API בנייד, האפליקציה שלך תצטרך לבקש את ההרשאה הבאה:
android.permission.ACTIVITY_RECOGNITION
בדיקת הגרסה של Play Services
כדי להשתמש ב-Record API בנייד, למשתמש צריכים להיות שירותי Google Play Services
עודכן לתאריך 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 Services של המשתמש נמוכה מדי, המערכת
מחזירה 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
. לאחר מכן תוכלו:
לקבל LocalDataPoints מהפונקציה LocalDataSet
שמתקבלת
יוצר LocalDataReadRequest
, כמו שמוצג בקוד הבא
snippet:
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
נשמרים נתונים של עד 10 ימים. כדי להפחית את
של אובדן נתונים, ניתן להשתמש ב-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)
}