简体   繁体   中英

Google Fit step counter history returns nothing

I want to write an app which displays all steps done this week by asking the Google Fit API. Unfortunately my History API call always returns empty DataSets.

For debugging I am using a Nexus 9 Tablet with Google Fit installed. I added steps manually in the Google Fit app.

This is my code to get the steps

OnCreate:

...
mApiClient = new GoogleApiClient.Builder(this)
            .addApi(Fitness.SENSORS_API)
            .addApi(Fitness.RECORDING_API)
            .addApi(Fitness.HISTORY_API)
            .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
...

Function to get steps

private void showSteps() {
    Calendar cal = Calendar.getInstance();
    Date now = new Date();
    cal.setTime(now);
    long endTime = cal.getTimeInMillis();
    cal.add(Calendar.WEEK_OF_YEAR, -1);
    long startTime = cal.getTimeInMillis();

    DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
            .bucketByTime(1, TimeUnit.DAYS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

    DataReadResult dataReadResult = Fitness.HistoryApi.readData(mApiClient, readRequest).await(1, TimeUnit.MINUTES);


    if (dataReadResult.getBuckets().size() > 0) {
        Log.i(TAG, "Number of returned buckets of DataSets is: "
                + dataReadResult.getBuckets().size());
        for (Bucket bucket : dataReadResult.getBuckets()) {
            List<DataSet> dataSets = bucket.getDataSets();
            for (DataSet dataSet : dataSets) {
                Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName());
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

                for (DataPoint dp : dataSet.getDataPoints()) {
                    Log.i(TAG, "Data point:");
                    Log.i(TAG, "\tType: " + dp.getDataType().getName());
                    Log.i(TAG, "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
                    Log.i(TAG, "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)));
                    for(Field field : dp.getDataType().getFields()) {
                        Log.i(TAG, "\tField: " + field.getName() +
                                " Value: " + dp.getValue(field));
                    }
                }
            }
        }
    } else if (dataReadResult.getDataSets().size() > 0) {
        Log.i(TAG, "Number of returned DataSets is: "
                + dataReadResult.getDataSets().size());
        for (DataSet dataSet : dataReadResult.getDataSets()) {
            Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName());
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

            for (DataPoint dp : dataSet.getDataPoints()) {
                Log.i(TAG, "Data point:");
                Log.i(TAG, "\tType: " + dp.getDataType().getName());
                Log.i(TAG, "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
                Log.i(TAG, "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)));
                for (Field field : dp.getDataType().getFields()) {
                    Log.i(TAG, "\tField: " + field.getName() +
                            " Value: " + dp.getValue(field));
                }
            }
        }
    }

I receive buckets and they have dataSets but they never have any DataPoints. The code just finishes without errors. The ApiClient returns that it is indeed connected to Google Fit.

Why does the History API not return my steps I added to the Google Fit app?

Thanks in advance!

As it turns out the code was fine. I noticed that I was logged into a different google account on my tablet when I added the steps. Obviously the account has to be the same.

Try adding .enableServerQueries() to your Data read request. It fetches data from Google fit server when not available locally.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM