Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting step count from google fit

Tags:

android

I am using google fit for my application and trying to get the step count. The registration and authantication things are ok. Your google account comes up you select it and after that the google permission dialog appears and select yes. After that point the following method is called which uses the listener to register the live updates from the step counter,the DataResource selection and so on. However the step count is a bit funny. Sometimes it goes like up and down. Maybe I don't use any of the recording things correct. Any advice please?

    private void invokeFitnessAPIs() {

    // Create a listener object to be called when new data is available
    OnDataPointListener listener = new OnDataPointListener() {
        @Override
        public void onDataPoint(DataPoint dataPoint) {

            for (Field field : dataPoint.getDataType().getFields()) {
                Value val = dataPoint.getValue(field);
                updateTextViewWithStepCounter(val.asInt());
            }
        }
    };

    //Specify what data sources to return
    DataSourcesRequest req = new DataSourcesRequest.Builder()
            .setDataSourceTypes(DataSource.TYPE_DERIVED)
            .setDataTypes(DataType.TYPE_STEP_COUNT_DELTA)
            .build();

    //  Invoke the Sensors API with:
    // - The Google API client object
    // - The data sources request object
    PendingResult<DataSourcesResult> pendingResult =
            Fitness.SensorsApi.findDataSources(mClient, req);

    //  Build a sensor registration request object
    SensorRequest sensorRequest = new SensorRequest.Builder()
            .setDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE)
            .setSamplingRate(1, TimeUnit.SECONDS)
            .build();

    //  Invoke the Sensors API with:
    // - The Google API client object
    // - The sensor registration request object
    // - The listener object
    PendingResult<Status> regResult =
            Fitness.SensorsApi.add(mClient,
                    new SensorRequest.Builder()
                            .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
                            .setSamplingRate(1,TimeUnit.SECONDS)
                            .build(),
                    listener);


    // 4. Check the result asynchronously
    regResult.setResultCallback(new ResultCallback<Status>()
    {
        @Override
        public void onResult(Status status) {
            if (status.isSuccess()) {
                Log.d(TAG, "listener registered");
                // listener registered
            } else {
                Log.d(TAG, "listener not registered");
                // listener not registered
            }
        }
    });
  }

  // Update the Text Viewer with Counter of Steps..
  private void updateTextViewWithStepCounter(final int numberOfSteps) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getBaseContext(), "On Datapoint!", 
 Toast.LENGTH_SHORT);

            if(mFirstCount && (numberOfSteps != 0)) {
                mInitialNumberOfSteps = numberOfSteps;
                mFirstCount = false;
            }
            if(textView != null){
                textView.setText(String.valueOf(numberOfSteps));
            }
        }
    });
 }
 @Override
 protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBoolean(AUTH_PENDING, authInProgress);
 }

 }
like image 678
Theo Avatar asked Oct 15 '25 09:10

Theo


1 Answers

You are using different data types for data source and sensor request

like image 69
user3290180 Avatar answered Oct 16 '25 23:10

user3290180



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!