#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.