вставка distance AGGREGATE_DISTANCE_DELTA в Google Fit

#android #google-fit

#Android #google-fit

Вопрос:

Из моего приложения я пытаюсь вставить данные о расстоянии в Google-Fit:

 insert(DataType.AGGREGATE_DISTANCE_DELTA, distanceMeters, fromMillis, toMillis);

public void insert(DataType type, float value, long fromMillis, long toMillis) {

  DataSource dataSource = new DataSource.Builder()
    .setType(DataSource.TYPE_RAW)
    .setDataType(type)
    .setAppPackageName(BuildConfig.APPLICATION_ID)
    .build();
  DataSet dataSet = DataSet.create(dataSource);

  DataPoint point = dataSet.createDataPoint();
  point.setTimeInterval(fromMillis, toMillis, TimeUnit.MILLISECONDS);
  point.setFloatValues(value);
  dataSet.add(point);

  Fitness.HistoryApi.insertData(client, dataSet).await(1, TimeUnit.MINUTES);
}
 

Все работает гладко — авторизация предоставлена, возвращает status.isSuccess() true — но расстояние никогда не отображается в приложении Google-Fit.

Если я вставляю израсходованные калории за тот же интервал, они отображаются как ожидалось:

 insert(DataType.AGGREGATE_CALORIES_EXPENDED, kiloCalories, fromMillis, toMillis);
 

Есть идеи, почему AGGREGATE_DISTANCE_DELTA не работает?

Ответ №1:

Попробуйте явно объявить setDataType внутри вашей функции вставки:

 setDataType(DataSource.TYPE_DISTANCE_DELTA)
 

Я думаю, что это похоже на пример, упомянутый в руководстве по вставке данных:

 // Create a data source
DataSource dataSource = new DataSource.Builder()
.setAppPackageName(this)
.setDataType(DataType.TYPE_STEP_COUNT_DELTA)
.setStreamName(TAG   " - step count")
.setType(DataSource.TYPE_RAW)
.build();

// Create a data set
int stepCountDelta = 950;
DataSet dataSet = DataSet.create(dataSource);
// For each data point, specify a start time, end time, and the data value -- in this case,
// the number of new steps.
DataPoint dataPoint = dataSet.createDataPoint()
.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
dataPoint.getValue(Field.FIELD_STEPS).setInt(stepCountDelta);
dataSet.add(dataPoint);
 

Комментарии:

1. На самом деле я уже устанавливал тип данных, но ваш пример заставил меня осознать разницу: я устанавливал значение с помощью #setFloatValues(), но использование #GetValue(поле).SetFloat() является правильным. Спасибо.

2. можете ли вы решить эту проблему? Пожалуйста, вставьте код

3. @svenmeier вы решили эту проблему?? даже меня смущает задержка вставки данных в приложение Google fit. Я вставил значение частоты сердечных сокращений, и оно было успешно вставлено, но оно никогда не отображалось в приложении Google-fit.

4. @groot Мои пользователи регулярно сообщают об огромных задержках, пока не появятся данные. Я действительно не понимаю, что происходит не так с Google Fit.