从谷歌健身

时间:2015-05-08 17:43:59

标签: android

我正在使用谷歌适合我的应用程序并试图获得步数。注册和身份验证的事情都可以。您出现了谷歌帐户,然后选择它,然后出现谷歌权限对话框并选择是。在此之后,调用以下方法,该方法使用侦听器从步计数器,DataResource选择等注册实时更新。然而,步数有点滑稽。有时它会像上下一样。也许我没有使用任何正确的录音事物。有什么建议吗?

    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);
 }

 }

2 个答案:

答案 0 :(得分:1)

您正在为数据源和传感器请求使用不同的数据类型

答案 1 :(得分:0)

Google Play Services 7。7(2015年4月28日发布)为HistoryApi.readDailyTotal添加了一种新方法,该方法与Google Fit官方应用上的步数相匹配,更易于使用。

PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(fitnessApiClient, DataType.AGGREGATE_STEP_COUNT_DELTA);
DailyTotalResult totalResult = result.await(30, TimeUnit.SECONDS);
if (totalResult.getStatus().isSuccess()) {
    DataSet totalSet = totalResult.getTotal();
    steps = totalSet.isEmpty() ? -1 : totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
}