步行/跑步/骑自行车是安装了google fit的Android手机上自动录制的活动示例。我一直在尝试使用以下查询从Fit API for Android获取这些活动......
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
.bucketBySession(1, TimeUnit.MINUTES)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
DataReadResult dataReadResult = Fitness.HistoryApi
.readData(googleApiClient, readRequest)
.await(1, TimeUnit.MINUTES);
此查询的结果提供了包含该活动的开始时间和持续时间的活动列表。这正是我所期待的,但由于某种原因,它不会返回由google fit应用程序自动记录的数据。它似乎只返回属于以下条件之一的项目:
问题
是否有人知道我可能需要修改我的查询以获取由我的设备上的google fit应用程序自动记录的数据?可能是这种特定数据无法使用的情况(这很奇怪,因为我可以获得自动记录的步骤)。
答案 0 :(得分:1)
您是否设置了被动保存数据的订阅?方法如下:
Fitness.RecordingApi.subscribe(mClient, DataType.TYPE_ACTIVITY_SEGMENT)
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
if (status.isSuccess()) {
if (status.getStatusCode()
== FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) {
Log.i(TAG, "Existing subscription for activity detected.");
} else {
Log.i(TAG, "Successfully subscribed!");
}
} else {
Log.i(TAG, "There was a problem subscribing.");
}
}
});
答案 1 :(得分:0)
我得到活动段数据就好了。我的阅读请求与您的不同,因此我复制了您的请求并阅读了一周的数据并且没有收到任何数据集。在过去的一周里,我没有手动插入任何数据会话。我的信念是bucketBySession
是你的问题。我运行了3个测试,每个DataReadRequest
如下所述,假设时间范围也设置了(对我来说是1周):
read(DataType.TYPE_ACTIVITY_SEGMENT)
;没有聚合,没有分组。 结果:良好的数据。aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
与bucketBySession(1, TimeUnit.MINUTES)
。 结果:没有数据集或存储桶。aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
与bucketByTime(1, TimeUnit.DAYS)
。 结果:良好的数据在我看来,bucketBySession
documentation并不是很清楚,它将专门返回属于Session
的数据,但这似乎可以解释我的3次测试的结果以及您注意到的条件列表。
注意我还安装了Google健身应用,但我不确定这些数据是否会自动记录/订阅(如果不是)。