在datapointListener google Fit

时间:2016-06-12 07:03:41

标签: android google-fit google-fit-sdk

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

@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常量,但这不起作用。使用History API在DataPointListener中调用readData方法失败了。当你获得所需的输出时,它会滞后很多,而且不应该做这样的事情。

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

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

2 个答案:

答案 0 :(得分:1)

根据第2步:使用Google健身历史记录API显示今天的数据,Google Fit for Android: History API提及:

  

开发人员的一个常见用例是需要当天的数据。幸运的是,Google通过添加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帖子中提供的解决方案 - How to get step count from Google Fit REST API like Google Fit app?。我希望这对你有用。

答案 1 :(得分:0)

  1. 检测app是否第一次打开。如果为true,则将第一次显示的步长值存储在onDataPoint方法中。此步骤数据包含以前通过谷歌适合记录的步骤信息(通过其他应用程序或谷歌适合自己)。将值存储在共享首选项中。
  2. 然后从显示的当前步骤中减去存储的步骤。这等于当前天数步骤。 //供日常使用
  3. 检测自上次应用程序打开以来该日期是否已更改。
  4. 如果是这样的话,请使用googlefit的readData api,为期1天,然后获取步骤。
  5. 将这些步骤添加到存储的步骤中。因此,存储的步骤随前一天的步长值递增。
  6. 在onDataPoint中从显示的步骤值中减去存储的步数值。
  7. 注意:您必须考虑应用程序未开启几天。谷歌适合应该仍然记录步骤。存储的步骤应该添加应用程序未打开的所有日期的步骤。