Summary: Constants | Fields | Methods | Inherited Methods | [Expand All]
public class

# Fitness

extends Object

java.lang.Object
↳ | com.google.android.gms.fitness.Fitness

## Class Overview

The main entry point to Google Fit APIs.

The Google Fit APIs help app developers collect and use fitness-related sensor data in their applications. There are several different APIs, each solving a different problem:

- `SensorsApi` exposes a unified view of sensor streams on the local device and connected devices, and delivers live events to listeners.
- `RecordingApi` enables low-battery, always-on background collection of sensor data into the Google Fit store.
- `SessionsApi` lets apps create and manage sessions of user activity.
- `HistoryApi` allows querying and insertion of data in Google Fit.
- `BleApi` can be used to work with Bluetooth Low Energy devices.
- `ConfigApi` can be used to access custom data types and settings.

Most API methods require a `data type`. Each data type operation requires the user to have granted the app permission to access and store fitness data for the given data type.

## Authorization

When connecting to the Google Fit API, apps should specify the necessary scopes and the user account. Apps can use `addScope(Scope)` to add the necessary scopes, which should be selected from the `SCOPE_XXX` constants in this class. To use a specific user account, apps can use `setAccountName(String)`, or use `useDefaultAccount()` to use the default account. The specified account and scopes will be used to acquire the necessary OAuth tokens on behalf of the app.

In case the app does not have the needed OAuth permissions for the requested scopes, Google Fit will send back a result with status code set to `NEEDS_OAUTH_PERMISSIONS`. In this case, the app should use `startResolutionForResult(Activity, int)` to get the necessary OAuth permissions.

The first connection to Fit API may require a network connection to verify the account and scopes associated with it. In case no network connection is available, Google Fit will send back a result with status code set to `NETWORK_ERROR`.

Sample usage of Google Fit Client:

         public class MyActivity extends FragmentActivity
                 implements ConnectionCallbacks, OnConnectionFailedListener, OnDataPointListener {
            private static final int REQUEST_OAUTH = 1001;
            private GoogleApiClient mGoogleApiClient;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                // Create a Google Fit Client instance with default user account.
                mGoogleApiClient = new GoogleApiClient.Builder(this)
                        .addApi(Fitness.SENSORS_API)  // Required for SensorsApi calls
                        // Optional: specify more APIs used with additional calls to addApi
                        .useDefaultAccount()
                        .addScope(new Scope(Scopes.FITNESS))
                        .addOnConnectionsCallbacks(this)
                        .addOnConnectionFailedListener(this)
                        .build();

                mGoogleApiClient.connect();
            }

            @Override
            public void onConnected(Bundle connectionHint) {
                // Connected to Google Fit Client.
                Fitness.SensorsApi.add(
                        mGoogleApiClient,
                        new SensorRequest.Builder()
                                .setDataType(DataType.STEP_COUNT_DELTA)
                                .build(),
                        this);
            }

            @Override
            public void onDataPoint(DataPoint dataPoint) {
                // Do cool stuff that matters.
            }

            @Override
            public void onConnectionSuspended(int cause) {
                // The connection has been interrupted. Wait until onConnected() is called.
            }

            @Override
            public void onConnectionFailed(ConnectionResult result) {
                // Error while connecting. Try to resolve using the pending intent returned.
                if (result.getErrorCode() == FitnessStatusCodes.NEEDS_OAUTH_PERMISSIONS) {
                    try {
                        result.startResolutionForResult(this, REQUEST_OAUTH);
                    } catch (SendIntentException e) {
                    }
                }
            }

            @Override
            public void onActivityResult(int requestCode, int resultCode, Intent data) {
                if (requestCode == REQUEST_OAUTH && resultCode == RESULT_OK) {
                    mGoogleApiClient.connect();
                }
            }

## Intents

Google Fit supports different intents in order to help fitness apps collaborate. To that effect, different intent actions are defined in this class:

`ACTION_VIEW` defines an intent to view fitness data or a session
`ACTION_TRACK` defines an intent to track an activity
`ACTION_VIEW_GOAL` defines an intent to view a fitness goal

Different objects in the Fitness data model can be used in intents, including `sessions`, `data sources`, `data types`, and `activities`. The documentation for each intent action specifies the different attributes of the intent, including actions, MIME types, and extras. It also specifies how the intents can be built and parsed using methods in the API.

## Summary

Constants
String | ACTION_TRACK | Broadcast action: the user has requested that an application start or stop tracking their activity.
String | ACTION_VIEW | Broadcast action: the user has requested that an application show the value of a particular fitness data type.
String | ACTION_VIEW_GOAL | Broadcast action: the user has requested to view their current fitness goal.
String | EXTRA_END_TIME | Name for the long intent extra containing the end time.
String | EXTRA_START_TIME | Name for the long intent extra containing the start time.

Fields
public static final Void | API | This field is deprecated. in favor of granular API tokens.
public static final Api<Api.ApiOptions.NoOptions> | BLE_API | Token to pass to `addApi(Api)` to enable `BleApi`.
public static final BleApi | BleApi | Entry point to the `Google Fit BLE API`.
public static final Api<Api.ApiOptions.NoOptions> | CONFIG_API | Token to pass to `addApi(Api)` to enable `ConfigApi`.
public static final ConfigApi | ConfigApi | Entry point to the `Google Fit Config API`.
public static final Api<Api.ApiOptions.NoOptions> | HISTORY_API | Token to pass to `addApi(Api)` to enable `HistoryApi`.
public static final HistoryApi | HistoryApi | Entry point to the `Google Fit History API`.
public static final Api<Api.ApiOptions.NoOptions> | RECORDING_API | Token to pass to `addApi(Api)` to enable `RecordingApi`.
public static final RecordingApi | RecordingApi | Entry point to the `Google Fit Recording API`.
public static final Scope | SCOPE_ACTIVITY_READ | Scope for read access to activity-related data types in Google Fit, which include: `activity_sample` `activity_segment` `calories.consumed` `calories.expended` `cycling.pedaling.cadence` `cycling.pedaling.cumulative` `cycling.wheel_revolution.cumulative` `cycling.wheel_revolution.rpm` `power.sample` `step_count.cadence` `step_count.delta`
public static final Scope | SCOPE_ACTIVITY_READ_WRITE | Scope for read/write access to activity-related data types in Google Fit, which include: `activity_sample` `activity_segment` `calories.consumed` `calories.expended` `cycling.pedaling.cadence` `cycling.pedaling.cumulative` `cycling.wheel_revolution.cumulative` `cycling.wheel_revolution.rpm` `power.sample` `step_count.cadence` `step_count.delta`
public static final Scope | SCOPE_BODY_READ | Scope for read access to the biometric data types in Google Fit, which include: `body.fat.percentage` `heart_rate.bpm` `height` `weight`
public static final Scope | SCOPE_BODY_READ_WRITE | Scope for read/write access to biometric data types in Google Fit, which include: `body.fat.percentage` `heart_rate.bpm` `height` `weight`
public static final Scope | SCOPE_LOCATION_READ | Scope for read access to location-related data types in Google Fit, which include: `distance.delta` `location.sample` `speed`
public static final Scope | SCOPE_LOCATION_READ_WRITE | Scope for read/write access to location-related data types in Google Fit, which include: `distance.delta` `location.sample` `speed`
public static final Scope | SCOPE_NUTRITION_READ | Scope for read access to the nutrition and hydration data types in Google Fit, which include: `TYPE_NUTRITION` `TYPE_HYDRATION`
public static final Scope | SCOPE_NUTRITION_READ_WRITE | Scope for read/write access to nutrition and hydration data types in Google Fit, which include: `TYPE_NUTRITION` `TYPE_HYDRATION`
public static final Api<Api.ApiOptions.NoOptions> | SENSORS_API | Token to pass to `addApi(Api)` to enable `SensorsApi`.
public static final Api<Api.ApiOptions.NoOptions> | SESSIONS_API | Token to pass to `addApi(Api)` to enable `SessionsApi`.
public static final SensorsApi | SensorsApi | Entry point to the `Google Fit Sensors API`.
public static final SessionsApi | SessionsApi | Entry point to the `Google Fit Sessions API`.

Public Methods
static long | getEndTime(Intent intent, TimeUnit timeUnit) Retrieves the end time extra from the given intent.
static long | getStartTime(Intent intent, TimeUnit timeUnit) Retrieves the start time extra from the given intent.

[Expand] Inherited Methods
From class java.lang.Object
Object | clone()
boolean | equals(Object arg0)
void | finalize()
final Class<?> | getClass()
int | hashCode()
final void | notify()
final void | notifyAll()
String | toString()
final void | wait(long arg0, int arg1)
final void | wait(long arg0)
final void | wait()

## Constants

#### public static final String ACTION_TRACK

Broadcast action: the user has requested that an application start or stop tracking their activity. The intent will include the following attributes:

mimeType: this will be `MIME_TYPE_PREFIX` followed by the name of the activity. Apps can use a MIME type filter to listen only on activities they can track. `getMimeType(String)` can be used to generate a MIME type from an activity.
Extra `EXTRA_STATUS`: an extra indicating the current status of the activity (active or completed).

Constant Value: "vnd.google.fitness.TRACK"

#### public static final String ACTION_VIEW

Broadcast action: the user has requested that an application show the value of a particular fitness data type. This could be an intent to visualize the current value of a data type (such as the current heart rate), or the value of a data type over a period of time. The extras will determine what the particular intent is.

The intent will include the following attributes:

mimeType: this will be `MIME_TYPE_PREFIX` followed by the name of the data type the user would like to visualize. Apps can use a MIME type filter to listen only on data types they can visualize. The MIME type can be generated by `getMimeType(String)`.
Extra `EXTRA_START_TIME`: an extra indicating the start time in milliseconds since epoch, present if the user desires to visualize data over a period of time. The start time can be extracted by `getStartTime(Intent, TimeUnit)`.
Extra `EXTRA_END_TIME`: an extra indicating the end time in milliseconds since epoch, present if the user desires to visualize data over a period of time. If end time isn't specified, but start time is, then the end time used should be "now". The end time can be extracted by `getEndTime(Intent, TimeUnit)`.
Extra `EXTRA_DATA_SOURCE`: an optional extra indicating the specific data source the user would like to visualize, if any. It can be extracted using `extract(Intent)`.

Constant Value: "vnd.google.fitness.VIEW"

#### public static final String ACTION_VIEW_GOAL

Broadcast action: the user has requested to view their current fitness goal.

Constant Value: "vnd.google.fitness.VIEW_GOAL"

#### public static final String EXTRA_END_TIME

Name for the long intent extra containing the end time. It can be extracted using `getEndTime(Intent, TimeUnit)`

Constant Value: "vnd.google.fitness.end_time"

#### public static final String EXTRA_START_TIME

Name for the long intent extra containing the start time. It can be extracted using `getStartTime(Intent, TimeUnit)`.

Constant Value: "vnd.google.fitness.start_time"

## Fields

#### public static final Void API

This field is deprecated.
in favor of granular API tokens.

Instead of API, you now need to use the specific API for the calls you're making, .e.g.

     // Create a Google Fit Client instance with default user account.
     mGoogleApiClient = new GoogleApiClient.Builder(this)
             .addApi(Fitness.SENSORS_API)    // Required only if you're making SensorsApi calls
             .addApi(Fitness.RECORDING_API)  // Required only if you're making RecordingApi calls
             .addApi(Fitness.API)    // Required only if you're making HistoryApi calls
             .addApi(Fitness.SESSIONS_API)   // Required only if you're making SessionsApi calls
             // Optional: request more APIs with additional calls to addApi
             .useDefaultAccount()
             .addScope(new Scope(Scopes.FITNESS))
             .addOnConnectionsCallbacks(this)
             .addOnConnectionFailedListener(this)
             .build();

##### See Also

- `SENSORS_API`
- `RECORDING_API`
- `SESSIONS_API`
- `HISTORY_API`
- `BLE_API`
- `CONFIG_API`

#### public static final Api<Api.ApiOptions.NoOptions> BLE_API

Token to pass to `addApi(Api)` to enable `BleApi`.

#### public static final BleApi BleApi

Entry point to the `Google Fit BLE API`.

#### public static final Api<Api.ApiOptions.NoOptions> CONFIG_API

Token to pass to `addApi(Api)` to enable `ConfigApi`.

#### public static final ConfigApi ConfigApi

Entry point to the `Google Fit Config API`.

#### public static final Api<Api.ApiOptions.NoOptions> HISTORY_API

Token to pass to `addApi(Api)` to enable `HistoryApi`.

#### public static final HistoryApi HistoryApi

Entry point to the `Google Fit History API`.

#### public static final Api<Api.ApiOptions.NoOptions> RECORDING_API

Token to pass to `addApi(Api)` to enable `RecordingApi`.

#### public static final RecordingApi RecordingApi

Entry point to the `Google Fit Recording API`.

#### public static final Scope SCOPE_ACTIVITY_READ

Scope for read access to activity-related data types in Google Fit, which include:

- `activity_sample`
- `activity_segment`
- `calories.consumed`
- `calories.expended`
- `cycling.pedaling.cadence`
- `cycling.pedaling.cumulative`
- `cycling.wheel_revolution.cumulative`
- `cycling.wheel_revolution.rpm`
- `power.sample`
- `step_count.cadence`
- `step_count.delta`

#### public static final Scope SCOPE_ACTIVITY_READ_WRITE

Scope for read/write access to activity-related data types in Google Fit, which include:

- `activity_sample`
- `activity_segment`
- `calories.consumed`
- `calories.expended`
- `cycling.pedaling.cadence`
- `cycling.pedaling.cumulative`
- `cycling.wheel_revolution.cumulative`
- `cycling.wheel_revolution.rpm`
- `power.sample`
- `step_count.cadence`
- `step_count.delta`

#### public static final Scope SCOPE_BODY_READ

Scope for read access to the biometric data types in Google Fit, which include:

- `body.fat.percentage`
- `heart_rate.bpm`
- `height`
- `weight`

#### public static final Scope SCOPE_BODY_READ_WRITE

Scope for read/write access to biometric data types in Google Fit, which include:

- `body.fat.percentage`
- `heart_rate.bpm`
- `height`
- `weight`

#### public static final Scope SCOPE_LOCATION_READ

Scope for read access to location-related data types in Google Fit, which include:

- `distance.delta`
- `location.sample`
- `speed`

#### public static final Scope SCOPE_LOCATION_READ_WRITE

Scope for read/write access to location-related data types in Google Fit, which include:

- `distance.delta`
- `location.sample`
- `speed`

#### public static final Scope SCOPE_NUTRITION_READ

Scope for read access to the nutrition and hydration data types in Google Fit, which include:

- `TYPE_NUTRITION`
- `TYPE_HYDRATION`

#### public static final Scope SCOPE_NUTRITION_READ_WRITE

Scope for read/write access to nutrition and hydration data types in Google Fit, which include:

- `TYPE_NUTRITION`
- `TYPE_HYDRATION`

#### public static final Api<Api.ApiOptions.NoOptions> SENSORS_API

Token to pass to `addApi(Api)` to enable `SensorsApi`.

#### public static final Api<Api.ApiOptions.NoOptions> SESSIONS_API

Token to pass to `addApi(Api)` to enable `SessionsApi`.

#### public static final SensorsApi SensorsApi

Entry point to the `Google Fit Sensors API`.

#### public static final SessionsApi SessionsApi

Entry point to the `Google Fit Sessions API`.

## Public Methods

#### public static long getEndTime (Intent intent, TimeUnit timeUnit)

Retrieves the end time extra from the given intent.

##### Parameters

intent | the intent to extract the end time from
timeUnit | the desired time unit for the returned end time

##### Returns

- the end time, in time unit since epoch, or `-1` if not found

#### public static long getStartTime (Intent intent, TimeUnit timeUnit)

Retrieves the start time extra from the given intent.

##### Parameters

intent | the intent to extract the start time from
timeUnit | the desired time unit for the returned start time

##### Returns

- the start time, in time unit since epoch, or `-1` if not found