正在获取 Google 适合数据到 android 应用程序
Fetching Google Fit Data into android application
我们如何获取特定用户存储在google fit cloud 中的数据?
我尝试使用 History API 但没有显示任何数据。然后我尝试输入一些数据 vai 历史 api,现在我只能通过历史 api 查看这些数据,而不是实际存在的完整数据。
DataReadRequest readRequest = queryFitnessData();
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);
数据请求是
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
根据你的问题,很难知道你期待什么但没有收到。更多细节会有所帮助。
我猜这是因为 Fit 正在返回默认的合并步骤流。基本上,如果两个应用程序在同一 60 分钟内都报告了 1,000 步,Fit 将假定它们是重复的并且 "merge" 它们作为响应。
尝试丢失存储桶功能,看看您是否掌握了原始步骤。此代码对我有用:
final DataReadRequest readRequest = new DataReadRequest.Builder()
.read(DataType.TYPE_STEP_COUNT_DELTA)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(mGoogleApiFitnessClient, readRequest).await(1, TimeUnit.MINUTES);
DataSet stepData = dataReadResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);
int totalSteps = 0;
for (DataPoint dp : stepData.getDataPoints()) {
for(Field field : dp.getDataType().getFields()) {
int steps = dp.getValue(field).asInt();
totalSteps += steps;
}
}
如果你想从云端读取数据,你必须添加以下调用到DataReadRequest.Builder
:enableServerQueries()
因此您的代码将如下所示:
final DataReadRequest readRequest = new DataReadRequest.Builder()
.read(DataType.TYPE_STEP_COUNT_DELTA)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.enableServerQueries()
.build();
你先订阅了吗?
我有同样的问题,但在 Fitness.RecordingApi.subscribe(mClient, myDataType)
后解决了
数据类型为 DataType.TYPE_STEP_COUNT_DELTA
或 DataType.TYPE_STEP_COUNT_CUMULATIVE
我真的不明白如何在 insertFitnessData() 中插入计步器值。基本历史 google 程序已经有一个数据集,其步数值为 1000。我应该如何更改该部分以便它可以计算我在过去一小时内所做的步数?
DataSet dataSet = DataSet.create(dataSource);
// For each data point, specify a start time, end time, and the data
value -- in this case,
// the number of new steps.
DataPoint dataPoint = dataSet.createDataPoint()
.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
我应该使用 OnDataPointListener 接收回调吗?我很困惑!
在我的情况下,我仍然可以使用 bucket,并且它一直很好用,直到它完全不服从我。不管怎样,我修好了。有一些可能的原因:
1) 您订阅过此类数据吗?
2) 您的应用无法与 google 服务正确连接。您是否从 Google 开发控制台创建了 OAuth 客户端 ID?这是 google 连接到其 GG Fit 服务的强制性说明(请注意,如果您在同一台计算机上克隆另一个应用程序,则需要重新创建另一个 OAuth 客户端 ID 以及您需要做的另一件事需要 2 个单独的帐户,一个用于登录 Google 开发控制台以创建 OAuth 客户端 ID,一个用于在启动您的应用程序后登录,它会要求您登录以接受其许可,...不知道为什么是,但它会起作用)
注意:顺便说一下,您可以在设备中搜索有关 Google 的设置(设置 --> Google),在这里您可以找到哪个应用程序连接到 google 服务(包括 GG Fit 服务)。我建议您断开所有连接并删除 OAuth 客户端 ID、您的应用程序,然后重新创建所有这些!
Mttdat.
我们如何获取特定用户存储在google fit cloud 中的数据? 我尝试使用 History API 但没有显示任何数据。然后我尝试输入一些数据 vai 历史 api,现在我只能通过历史 api 查看这些数据,而不是实际存在的完整数据。
DataReadRequest readRequest = queryFitnessData();
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);
数据请求是
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
根据你的问题,很难知道你期待什么但没有收到。更多细节会有所帮助。
我猜这是因为 Fit 正在返回默认的合并步骤流。基本上,如果两个应用程序在同一 60 分钟内都报告了 1,000 步,Fit 将假定它们是重复的并且 "merge" 它们作为响应。
尝试丢失存储桶功能,看看您是否掌握了原始步骤。此代码对我有用:
final DataReadRequest readRequest = new DataReadRequest.Builder()
.read(DataType.TYPE_STEP_COUNT_DELTA)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(mGoogleApiFitnessClient, readRequest).await(1, TimeUnit.MINUTES);
DataSet stepData = dataReadResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);
int totalSteps = 0;
for (DataPoint dp : stepData.getDataPoints()) {
for(Field field : dp.getDataType().getFields()) {
int steps = dp.getValue(field).asInt();
totalSteps += steps;
}
}
如果你想从云端读取数据,你必须添加以下调用到DataReadRequest.Builder
:enableServerQueries()
因此您的代码将如下所示:
final DataReadRequest readRequest = new DataReadRequest.Builder()
.read(DataType.TYPE_STEP_COUNT_DELTA)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.enableServerQueries()
.build();
你先订阅了吗?
我有同样的问题,但在 Fitness.RecordingApi.subscribe(mClient, myDataType)
数据类型为 DataType.TYPE_STEP_COUNT_DELTA
或 DataType.TYPE_STEP_COUNT_CUMULATIVE
我真的不明白如何在 insertFitnessData() 中插入计步器值。基本历史 google 程序已经有一个数据集,其步数值为 1000。我应该如何更改该部分以便它可以计算我在过去一小时内所做的步数?
DataSet dataSet = DataSet.create(dataSource);
// For each data point, specify a start time, end time, and the data
value -- in this case,
// the number of new steps.
DataPoint dataPoint = dataSet.createDataPoint()
.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
我应该使用 OnDataPointListener 接收回调吗?我很困惑!
在我的情况下,我仍然可以使用 bucket,并且它一直很好用,直到它完全不服从我。不管怎样,我修好了。有一些可能的原因:
1) 您订阅过此类数据吗?
2) 您的应用无法与 google 服务正确连接。您是否从 Google 开发控制台创建了 OAuth 客户端 ID?这是 google 连接到其 GG Fit 服务的强制性说明(请注意,如果您在同一台计算机上克隆另一个应用程序,则需要重新创建另一个 OAuth 客户端 ID 以及您需要做的另一件事需要 2 个单独的帐户,一个用于登录 Google 开发控制台以创建 OAuth 客户端 ID,一个用于在启动您的应用程序后登录,它会要求您登录以接受其许可,...不知道为什么是,但它会起作用)
注意:顺便说一下,您可以在设备中搜索有关 Google 的设置(设置 --> Google),在这里您可以找到哪个应用程序连接到 google 服务(包括 GG Fit 服务)。我建议您断开所有连接并删除 OAuth 客户端 ID、您的应用程序,然后重新创建所有这些!
Mttdat.