This works for me, if someone is stuck, use this ----
Initialize the FitnessClient object as follows:
private void buildFitnessClient() { if (mClient == null && checkPermissions()) { mClient = new GoogleApiClient.Builder(this) .addApi(Fitness.SENSORS_API) .addScope(new Scope(Scopes.FITNESS_LOCATION_READ)) .addConnectionCallbacks( new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle bundle) { Log.i(TAG, "Connected!!!");
Now define the type of data you want to receive as a callback, which we must set as DataType.TYPE_STEP_COUNT_DELTA as follows:
private void findFitnessDataSources() { // [START find_data_sources] // Note: Fitness.SensorsApi.findDataSources() requires the ACCESS_FINE_LOCATION permission. Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder() // At least one datatype must be specified. .setDataTypes(DataType.TYPE_STEP_COUNT_DELTA) // Can specify whether data type is raw or derived. .build()) .setResultCallback(new ResultCallback<DataSourcesResult>() { @Override public void onResult(DataSourcesResult dataSourcesResult) { Log.i(TAG, "Result: " + dataSourcesResult.getStatus().toString()); for (DataSource dataSource : dataSourcesResult.getDataSources()) { Log.i(TAG, "Data source found: " + dataSource.toString()); Log.i(TAG, "Data Source type: " + dataSource.getDataType().getName()); //Let register a listener to receive Activity data! if (dataSource.getDataType().equals(DataType.TYPE_STEP_COUNT_DELTA) && mListener == null) { Log.i(TAG, "Data source for LOCATION_SAMPLE found! Registering."); registerFitnessDataListener(dataSource, DataType.TYPE_STEP_COUNT_DELTA); } } } }); // [END find_data_sources] }
Now register a listener with the sensors API for the provided DataSource and DataType as follows:
private void registerFitnessDataListener(DataSource dataSource, DataType dataType) { // [START register_data_listener] mListener = new OnDataPointListener() { @Override public void onDataPoint(DataPoint dataPoint) { for (Field field : dataPoint.getDataType().getFields()) { Value val = dataPoint.getValue(field); // Value(TotalSteps); // TotalSteps=val+TotalSteps; Log.i(TAG, "Detected DataPoint field: " + field.getName()); Log.i(TAG, "Detected DataPoint value: " + val); } } }; Fitness.SensorsApi.add( mClient, new SensorRequest.Builder() .setDataSource(dataSource) // Optional but recommended for custom data sets. .setDataType(dataType) // Can't be omitted. .setSamplingRate(1, TimeUnit.SECONDS) .build(), mListener) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status status) { if (status.isSuccess()) { Log.i(TAG, "Listener registered!"); } else { Log.i(TAG, "Listener not registered."); } } }); // [END register_data_listener] }
Also, do not forget to unregister your listener:
private void unregisterFitnessDataListener() { if (mListener == null) { // This code only activates one listener at a time. If there no listener, there's // nothing to unregister. return; } // [START unregister_data_listener] // Waiting isn't actually necessary as the unregister call will complete regardless, // even if called from within onStop, but a callback can still be added in order to // inspect the results. Fitness.SensorsApi.remove( mClient, mListener) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status status) { if (status.isSuccess()) { Log.i(TAG, "Listener was removed!"); } else { Log.i(TAG, "Listener was not removed."); } } }); // [END unregister_data_listener] }