2

使用以下代码,我得到了自开始记录值以来的累积步骤。但我只想显示当天的步数而不是累积的。

@Override
public void onConnected(@Nullable Bundle bundle) {
    DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder()
            .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE)
            .setDataSourceTypes(DataSource.TYPE_RAW)
            .build();

    ResultCallback<DataSourcesResult> dataSourcesResultCallback = new ResultCallback<DataSourcesResult>() {
        @Override
        public void onResult(DataSourcesResult dataSourcesResult) {
            for( DataSource dataSource : dataSourcesResult.getDataSources() ) {
                if(DataType.TYPE_STEP_COUNT_CUMULATIVE.equals(dataSource.getDataType())) {
                    registerStepsDataListener(dataSource, DataType.TYPE_STEP_COUNT_CUMULATIVE);
                }
            }
        }
    };

    Fitness.SensorsApi.findDataSources(googleApiClient, dataSourceRequest)
            .setResultCallback(dataSourcesResultCallback);

    Fitness.RecordingApi.subscribe(googleApiClient, DataType.TYPE_STEP_COUNT_DELTA)
            .setResultCallback(subscribeResultCallback);
}

//onDataPointListener
@Override
public void onDataPoint(DataPoint dataPoint) {
    for( final Field field : dataPoint.getDataType().getFields() ) {
        final Value value = dataPoint.getValue( field );
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tvSteps.setText("Field: " + field.getName() + " Value: " + value.toString());
            }
        });
    }
}

我尝试替换 dataType 常量,但这不起作用。在 DataPointListener 中使用 History API 调用 readData 方法惨遭失败。当您获得所需的输出时,它会滞后很多,不应该做这样的事情。

另一种方法是换天,我在午夜获取累积步数的数据,然后将其存储在 SharedPreferences 中。然后从显示的累积值中减去 onDatapoint 期间的这个数字。

但是还有比这更好的方法吗?

4

2 回答 2

1

基于第 2 步:使用 Google Fit History API 显示今天的数据,Google Fit for Android:History API提到:

开发人员的一个常见用例是需要当天的数据。幸运的是,谷歌通过添加Fitness.HistoryApi.readDailyTotal调用简化了这一过程,该调用创建了一个DailyTotalResult包含当天收集的数据的对象。

注销用户当天的步骤的示例代码:

private void displayStepDataForToday() {
    DailyTotalResult result = Fitness.HistoryApi.readDailyTotal( mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA ).await(1, TimeUnit.MINUTES);
    showDataSet(result.getTotal());
}

您还可以尝试此 SO 帖子中给出的解决方案 -如何从 Google Fit REST API 中获取步数,例如 Google Fit 应用程序?. 我希望这对你有用。

于 2016-06-14T18:13:14.063 回答
0
  1. 检测应用程序是否第一次打开。如果为 true,则将首次显示的步长值存储在 onDataPoint 方法中。此步数数据包含 google fit 之前记录的步数信息(通过其他应用程序或 google fit 本身)。将值存储在共享首选项中。
  2. 然后从显示的当前步骤中减去存储的步骤。这等于当前的步数。//日常使用
  3. 检测自上次打开应用程序以来日期是否发生了变化。
  4. 如果是这样,请使用 googlefit 的 readData api 1 天并获取步骤。
  5. 将这些步骤添加到存储的步骤中。因此,存储的步数会随着前一天的步数值递增。
  6. 在 onDataPoint 中,从显示的步骤值中减去存储的步骤值。

注意:您必须考虑几天未打开的应用程序。Google fit 应该仍会记录这些步骤。存储的步骤应将未打开应用程序的所有日期的步骤加起来。

于 2016-06-19T02:34:22.263 回答