2016-05-03 68 views
2

我几个星期以来一直在构建一个相当简单的应用程序,它将我的Fitbit Flex跟踪器的活动推向Google Fit。这非常简单:它创建了数据源,并使用这些数据来推动最后一小时的卡路里计数,步数和Google Fit距离。它也推动我的体重,如果我使用Fitbit应用程序登录它。通过Google Fit REST API提交重量信息/距离

每小时,它会将这三个指标推送到三个不同的数据集中,每个数据集都有一个数据点。例如:从10:00到10:59,451步。这对所有这三个指标都很有效。

每天一次,范围为00:00至23:59的数据集将我的体重传达给Google健身。这个数据集也有一个数据点。

这个系统似乎适用于我的步数和卡路里数。这并不完美,因为我的步数没有任何相关的活动。但Google Fit成功接收数据并将其存储起来。

但是,Google Fit看起来并不符合我报告的体重。 Google Fit也没有记得我提交它的距离。

我使用的数据类型有:

  • com.google.calories.expended
  • com.google.distance.delta
  • com.google.step_count.delta
  • 融为一体。 google.weight

我的应用程序的源代码是在Github上:https://github.com/JC5/fitsync

任何提示或技巧?这是我可以使用REST API的吗?

+0

你可以看看这个[前面的SO问题](http://stackoverflow.com/questions/26929699/add-read-weight-and-height-in-googlefit-android)由Jose回答。他演示了如何为重量创建新的DataSet对象。他还指出,添加[正确的权限](http://stackoverflow.com/questions/26390192/googlefit-sample-not-working/26959071#26959071)。我希望这可以帮助 –

+1

我可能找到了解决方案。它与权限无关,但可能与我的数据集有关:我没有给它一个“即时”时间戳,而是“今天开始直到今天结束”。这可能会混淆Google Fit。我会回报。 –

+0

当然,只要更新任何进度,那么如果您遇到另一个问题,只要将它发布在这里,如果它仍然与您的原始帖子有关。 :) –

回答

1

是的。这question带领我在正确的方向。事实证明,我使用的字段类型是瞬时字段类型(见上文)。他们只在一个时刻测量。相反的是一个聚合的字段类型。

我的体重是在这里和现在测量的,并且价值不是在一天或一周内汇总,而是一次即时测量。在这个时刻,我体重82.1公斤。

因此,当您使用单个数据点创建数据集时(您需要向Google发送这种即时字段类型),则必须确保开始时间和结束时间相同。毕竟,如果不是即时的,它将不是一个正确的条目。

数据集我发送给谷歌飞度,这在谷歌配合正确注册,如下:

{ 
    "minStartTimeNs":1462358894000000000, 
    "maxEndTimeNs":1462358894000000000, 
    "dataSourceId":"your-data-id", 
    "point":[ 
     { 
     "dataTypeName":"com.google.weight", 
     "originDataSourceId":"", 
     "startTimeNanos":1462358894000000000, 
     "endTimeNanos":1462358894000000000, 
     "value":[ 
      { 
       "fpVal":81.2 
      } 
     ] 
     } 
    ] 
} 

的距离度量还没有注册,但可能还有其他未公布的特性存在。