【问题标题】:Automatically recorded activities missing aggregated activity summary from google fit api自动记录的活动缺少来自 google fit api 的汇总活动摘要
【发布时间】:2016-08-10 06:52:29
【问题描述】:

步行/跑步/骑自行车是在安装了 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 界面手动记录的
  • “会话”是使用 Sessions API 录制的
  • 活动是使用 History API 手动添加的(未对此进行测试,但这是我的假设)

问题

是否有人知道我可能需要如何修改我的查询以获取由我设备上的 google fit 应用程序自动记录的数据?可能是这种特定数据无法使用(这很奇怪,因为我可以获取自动记录的步骤)。

【问题讨论】:

  • 你找到解决这个问题的方法了吗?我现在面临同样的问题,但使用的是 REST API。

标签: android google-fit google-fit-sdk


【解决方案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.");
            }
        }
});

【讨论】:

  • 嗯.. 是的,我已经尝试过了,但由于某种原因,我仍然无法获取数据。我的假设是我会从我激活和前进的那一点获得任何步行/跑步/骑自行车的数据。
【解决方案2】:

我得到了活动段数据就好了。我的读取请求与您的不同,因此我复制了您的请求并读取了一周的数据,但没有收到任何数据集。在过去的一周中,我没有手动插入任何数据会话。我相信bucketBySession 是您的问题。我进行了 3 次测试,每个 DataReadRequest 如下所述,假设还设置了时间范围(对我来说是 1 周):

  1. read(DataType.TYPE_ACTIVITY_SEGMENT);没有聚合,没有分桶。 结果:良好的数据。
  2. aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)bucketBySession(1, TimeUnit.MINUTES)结果:没有数据集或存储桶。
  3. aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)bucketByTime(1, TimeUnit.DAYS)结果:良好的数据

在我看来,bucketBySession documentation 不是很清楚它会专门返回属于Session 的数据,但这似乎解释了我的 3 次测试的结果以及您的条件列表注意到了。

请注意,我还安装了 Google Fit 应用,如果没有,我不确定是否会自动记录/订阅相同的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多