Проблема с api Google fit history, возвращающим пустые наборы данных
Привет, ребята, у меня есть проблема с использованием Google Fit Api. Я получаю данные о деятельности только в определенных ситуациях. Я использую библиотеку RxFit (но у меня было такое же поведение, используя реализацию по умолчанию).
Моя реализация:
fun requestActivities(): Single<DataReadResult> { val fit = RxFit(context, arrayOf(Fitness.HISTORY_API), arrayOf(Scope(Scopes.FITNESS_ACTIVITY_READ))) val dataReadRequest = buildRequest(getStartEndTime()) return fit.history().read(dataReadRequest).doOnSuccess { storeDatapoints(it) } } private fun storeDatapoints(data: DataReadResult) { val idlist = activityRepository.all().map { it.activityId } val activities = data.buckets .flatMap { it.dataSets } .flatMap { it.dataPoints } .filter { point -> //https://developers.google.com/fit/rest/v1/reference/activity-types val activity = point.getValue(Field.FIELD_ACTIVITY).asInt() return@filter activity != 0 && activity != 3 //&& !(109..112).contains(activity) } .map { point -> PersistentExerciseActivity( activityId = point.timestampNanos.toString(), date = Instant(point.getTimestamp(TimeUnit.MILLISECONDS)).toDateTime().toLocalDateTime(), duration = point.getValue(Field.FIELD_DURATION).asInt() / 1000 / 60, activity = point.getValue(Field.FIELD_ACTIVITY).asActivity(), apiId = null ) } .filter { !idlist.contains(it.activityId) } activityRepository.store(activities) } private fun getStartEndTime(): Pair<Long, Long> { val cal = Calendar.getInstance() val now = Date() cal.time = now cal.set(Calendar.HOUR_OF_DAY, 0) cal.set(Calendar.MINUTE, 0) cal.set(Calendar.MILLISECOND, 0) cal.set(Calendar.SECOND, 0) val endTime = cal.timeInMillis cal.add(Calendar.WEEK_OF_YEAR, -1) val startTime = cal.timeInMillis return Pair(startTime, endTime) } private fun buildRequest(startEndTime: Pair<Long, Long>): DataReadRequest { return DataReadRequest.Builder() .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY) .bucketByTime(1, TimeUnit.DAYS) .setTimeRange(startEndTime.first, startEndTime.second, TimeUnit.MILLISECONDS) .enableServerQueries() .build() }
Что я уже пробовал:
Когда я пытаюсь сделать это на своем собственном телефоне (Nexus 5X) с моей собственной учетной записью, он работает совершенно нормально. Если я попробую использовать другую учетную запись на своем телефоне, я получу успешный ответ, но никаких фактических данных об активности. То же самое относится и к другому устройству и другой учетной записи. И с моим собственным аккаунтом на другом устройстве это тоже не работает. То же самое происходит и при использовании эмулятора.
Есть ли у кого-нибудь какие-нибудь идеи, что может быть причиной этого?
С уважением,
Ролоф