Android 谷歌拟合数据

Android 谷歌拟合数据,android,google-fit,google-fit-sdk,Android,Google Fit,Google Fit Sdk,大家好,我在使用Google Fit Api时遇到了一个问题。我只在特定情况下接收活动数据 我使用的是RxFit库,但使用默认实现时也有相同的行为。当我用自己的账户在自己的手机Nexus 5X上试用时,效果非常好。如果我在手机上尝试其他帐户,我会收到成功响应,但没有实际的活动数据。其他设备和其他帐户也是如此。而在另一台设备上使用我自己的帐户也无法工作。使用仿真器时也会发生相同的行为 我的实施: fun requestActivities(): Single<DataReadResult&g

大家好,我在使用Google Fit Api时遇到了一个问题。我只在特定情况下接收活动数据

我使用的是RxFit库,但使用默认实现时也有相同的行为。当我用自己的账户在自己的手机Nexus 5X上试用时,效果非常好。如果我在手机上尝试其他帐户,我会收到成功响应,但没有实际的活动数据。其他设备和其他帐户也是如此。而在另一台设备上使用我自己的帐户也无法工作。使用仿真器时也会发生相同的行为

我的实施:

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()
}
有人知道这是什么原因吗

亲切问候,


Bryan

当您使用自己的电子邮件时,您收到的是数据,因为您的电子邮件已被使用。现在,当您使用其他帐户时,它无法识别它们。要测试这一点,请使用不同的电子邮件,并从其GDC使用OAUTH客户端ID,并使用该emai来记录inl和获取Fit数据。查看此以了解更多信息。嘿,noogui,谢谢你的回答。我用不同的电子邮件和设备试过了。当我为这个地址创建一个OAUTH id时,它工作并成功地检索到了Fit数据。然而,它仍然不会在所有帐户上工作。我不确定我该怎么做,因为为每个潜在用户创建OAUTH ID不是一个选项。嘿,Bryan-好奇你是否找到了解决方案?不,我还没有找到解决方案,