HistoryClient

public class HistoryClient extends GoogleApi<FitnessOptions>

Client for inserting, deleting, and reading data in Google Fit.

The readData(DataReadRequest) method should be used whenever historical data is needed. It can be combined with a subscription in the Recording Client to collect data in the background and query it later for displaying.

The insertData(DataSet) method can be used for batch insertion of data that was collected outside of Google Fit. It can be useful when data is entered directly by the user or imported from a device that isn't supported by the platform.

The History Client should be accessed via the Fitness entry point. Example:


    GoogleSignInOptionsExtension fitnessOptions =
      FitnessOptions.builder()
          .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
          .build();

    GoogleSignInAccount gsa = GoogleSignIn.getAccountForExtension(this, fitnessOptions);

    Task<DataReadResponse> response = Fitness.getHistoryClient(this, gsa)
        .readData(new DataReadRequest.Builder()
            .read(DataType.TYPE_STEP_COUNT_DELTA)
            .setTimeRange(startTime.getMillis(), endTime.getMillis(), TimeUnit.MILLISECONDS)
            .build());

    DataReadResult readDataResult = Tasks.await(response);
    DataSet dataSet = readDataResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);
 

Public Method Summary

Task<Void>
deleteData(DataDeleteRequest request)
Deletes data from the user’s Google Fit history.
Task<Void>
insertData(DataSet dataSet)
Inserts data collected from a data source directly into the user’s Google Fit history, on behalf of the current application.
Task<DataSet>
readDailyTotal(DataType dataType)
Reads the current daily total for the given dataType.
Task<DataSet>
readDailyTotalFromLocalDevice(DataType dataType)
Reads the current daily total for the given dataType from the local device only.
Task<DataReadResponse>
readData(DataReadRequest request)
Reads data from the user’s Google Fit history.
Task<Void>
registerDataUpdateListener(DataUpdateListenerRegistrationRequest request)
Adds a PendingIntent listener to Google fitness store.
Task<Void>
unregisterDataUpdateListener(PendingIntent pendingIntent)
Removes PendingIntent, previously registered for receiving data update notifications, from Google Fitness Store.
Task<Void>
updateData(DataUpdateRequest request)
Updates data collected from a data source directly into the user’s Google Fit history, on behalf of the current application.

Inherited Method Summary

Public Methods

public Task<Void> deleteData (DataDeleteRequest request)

Deletes data from the user’s Google Fit history. This request will fail if the requesting app tries to delete data that it hasn't inserted. The user can delete data from any application (or hardware sensors) by visiting the Google Fit dashboard.

Parameters
request specifying the data source/type and time range to delete
Returns
  • a task containing status of the request

public Task<Void> insertData (DataSet dataSet)

Inserts data collected from a data source directly into the user’s Google Fit history, on behalf of the current application. Useful when the data source isn't compatible with Google Fit or for importing historical data.

If the data source can be exposed via a BLE GATT profile, an application-exposed sensor, or some other method compatible with Google Fit, it's preferable to create a subscription via the Recording Client instead of inserting data directly.

Parameters
dataSet the data we’re adding
Returns
  • a task containing the status of the request

public Task<DataSet> readDailyTotal (DataType dataType)

Reads the current daily total for the given dataType. The daily total will be computed from midnight of the current day on the device's current timezone. The method can be used as follows:

   Task<DataSet> response =
       Fitness.getHistoryClient(this, googleSigninAccount)
              .readDailyTotalFromLocalDevice(TYPE_STEP_COUNT_DELTA);
   DataSet totalSet = Tasks.await(response, 30, SECONDS);
   if (totalResult.getStatus().isSuccess()) {
     long total = totalSet.isEmpty()
         ? 0
         : totalSet.getDataPoints().get(0).getValue(FIELD_STEPS).asInt();
   } else {
     // handle failure
   }
 

This is a simplified version of readData(). When the requested data type is TYPE_STEP_COUNT_DELTA, authentication is not required to call this method, making it specially suited for use by Watchface and Widget activities that don't have the ability to show an authentication panel to the user.

This method is equivalent to:

   Fitness.getHistoryClient(this, googleSigninAccount).readData(
        new DataReadRequest.Builder()
          .setTimeRange(midnight.getMillis(), now.getMillis(), TimeUnit.MILLISECONDS)
          .bucketByTime(1, TimeUnit.DAYS)
          .aggregate(DataType.STEP_COUNT_DELTA, AggregateDataTypes.STEP_COUNT_DELTA)
          .build());
 

This method aggregates data across different user devices, for instance a watch and a phone. To aggregate data from the local device only, see readDailyTotalFromLocalDevice(DataType)

Returns
  • a task containing the requested data. The task will contain a single DataSet. If no data has been collected for the requested data type today, the DataSet will be empty.

public Task<DataSet> readDailyTotalFromLocalDevice (DataType dataType)

Reads the current daily total for the given dataType from the local device only. The daily total will be computed from midnight of the current day on the device's current timezone.

This method aggregates local data only. To aggregate data across different devices, see readDailyTotal(DataType)

Returns
  • a task containing the requested data. The task will contain a single DataSet. If no data has been collected for the requested data type today, the DataSet will be empty.

public Task<DataReadResponse> readData (DataReadRequest request)

Reads data from the user’s Google Fit history. Values can be read in detailed or in aggregate formats. Aggregate data is presented in buckets, while detailed data is returned as a single data set.

Parameters
request a built request specifying the data sources we’re interested in reading and the time range of the returned data.
Returns
  • a task containing the requested data. Includes a data set for each requested data source.

public Task<Void> registerDataUpdateListener (DataUpdateListenerRegistrationRequest request)

Adds a PendingIntent listener to Google fitness store. This method can be called to listen on updates in Google Fitness Store based on the request parameters. For instance, a listener may be registered to the com.google.weight data type to receive updates whenever new weight entries are added.

Once the register request succeeds, notification for updates in the Fitness Store are delivered to the pendingIntent in the request. Historic data is not delivered, but can be queried via the History Client. When the application is closing, or once data update notifications are no longer needed, the listener should be removed.

The application specifies a PendingIntent callback (typically an IntentService), wrapped in DataUpdateListenerRegistrationRequest, which will be called when updates happen in the Fitness Store. When the PendingIntent is called, the application can use getDataUpdateNotification(android.content.Intent) to extract the DataUpdateNotification from the intent. See the documentation of PendingIntent for more details.

Any previously registered requests that have the same PendingIntent (as defined by equals(Object)) will be replaced by this request.

Currently the Client allows registering listeners using dataType and dataSource for following data types:

Parameters
request request containing the parameters to identify the data updates which should trigger notification to the pendingIntent
Throws
SecurityException if a required permission is missing for the requested DataType or DataSource.

public Task<Void> unregisterDataUpdateListener (PendingIntent pendingIntent)

Removes PendingIntent, previously registered for receiving data update notifications, from Google Fitness Store. Should be called whenever data update notifications are no longer needed.

Parameters
pendingIntent the PendingIntent that was used in the registerDataUpdateListener(DataUpdateListenerRegistrationRequest) request or is equal as defined by equals(Object).
Throws
IllegalStateException if client is not connected

public Task<Void> updateData (DataUpdateRequest request)

Updates data collected from a data source directly into the user’s Google Fit history, on behalf of the current application. For the provided time range, data is deleted for the given data source and new data is added to the system.

Useful when the data source isn't compatible with Google Fit or for importing historical data.

Parameters
request specifying the time range to update and data
Returns
  • a task containing the status of the request