Page Summary
-
Creating a Fitness API client involves defining required data types and access levels using
FitnessOptions. -
The authorization flow is initiated if the user hasn't previously granted the necessary data access.
-
Handling the user's response after the authorization flow is crucial for proceeding with API access.
-
After authorization, a specific fitness client like
HistoryClientis created to read or write data based on app requirements.
This example shows how to create a Fitness API client.
Create the API client as follows:
-
Create a
FitnessOptionsinstance, declaring the data types and access type (read and/or write) your app needs:val fitnessOptions = FitnessOptions . builder () . addDataType ( DataType . TYPE_STEP_COUNT_DELTA , FitnessOptions . ACCESS_READ ) . addDataType ( DataType . AGGREGATE_STEP_COUNT_DELTA , FitnessOptions . ACCESS_READ ) . build () -
Get an instance of the
Accountobject to use with the API:val account = GoogleSignIn . getAccountForExtension ( this , fitnessOptions ) -
Check if the user has previously granted the necessary data access, and if not, initiate the authorization flow:
if ( ! GoogleSignIn . hasPermissions ( account , fitnessOptions )) { GoogleSignIn . requestPermissions ( this , // your activity GOOGLE_FIT_PERMISSIONS_REQUEST_CODE , // e.g. 1 account , fitnessOptions ) } else { accessGoogleFit () } -
If the authorization flow is required, handle the user's response:
override fun onActivityResult ( requestCode : Int , resultCode : Int , data : Intent?) { super . onActivityResult ( requestCode , resultCode , data ) when ( resultCode ) { Activity . RESULT_OK - > when ( requestCode ) { GOOGLE_FIT_PERMISSIONS_REQUEST_CODE - > accessGoogleFit () else - > { // Result wasn't from Google Fit } } else - > { // Permission not granted } } } -
After the user has authorized access to the data requested, create a fitness client (for example, a
HistoryClientto read and/or write historic fitness data) based on your app's purpose and needs:private fun accessGoogleFit () { val end = LocalDateTime . now () val start = end . minusYears ( 1 ) val endSeconds = end . atZone ( ZoneId . systemDefault ()). toEpochSecond () val startSeconds = start . atZone ( ZoneId . systemDefault ()). toEpochSecond () val readRequest = DataReadRequest . Builder () . aggregate ( DataType . AGGREGATE_STEP_COUNT_DELTA ) . setTimeRange ( startSeconds , endSeconds , TimeUnit . SECONDS ) . bucketByTime ( 1 , TimeUnit . DAYS ) . build () val account = GoogleSignIn . getAccountForExtension ( this , fitnessOptions ) Fitness . getHistoryClient ( this , account ) . readData ( readRequest ) . addOnSuccessListener ({ response - > // Use response data here Log . i ( TAG , "OnSuccess()" ) }) . addOnFailureListener ({ e - > Log . d ( TAG , "OnFailure()" , e ) }) }


