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