使用以下代码,我可以获得响应,但使用空数据集。在googlefit应用程序中,显示了步骤。如何通过历史记录api获取googlefit app中显示的确切步骤?我尝试了体重,卡路里......每次,响应都是作为空数据集而来的!我已经浪费了最近3天的时间。
DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder()
.setDataType(DataType.TYPE_STEP_COUNT_DELTA)
.setType(DataSource.TYPE_DERIVED)
.setStreamName("estimated_steps")
.setAppPackageName("com.google.android.gms")
.build();
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();
PendingResult<DataReadResult> pendingResult = Fitness.HistoryApi.readData(mClient, readRequest);
pendingResult.setResultCallback(new ResultCallback<DataReadResult>(){
@Override
public void onResult(@NonNull DataReadResult dataReadResult) {
parseData(dataReadResult);
}
});
private static void parseData(DataReadResult dataReadResult) {
if (dataReadResult.getBuckets().size() > 0) {
Log.i(TAG,
"Number of returned buckets of DataSets is: " + dataReadResult.getBuckets().size());
for (Bucket bucket : dataReadResult.getBuckets()) {
List<DataSet> dataSets = bucket.getDataSets();
for (DataSet dataSet : dataSets) {
dumpDataSet(dataSet);
}
}
} else if (dataReadResult.getDataSets().size() > 0) {
Log.i(TAG, "Number of returned DataSets is: " + dataReadResult.getDataSets().size());
for (DataSet dataSet : dataReadResult.getDataSets()) {
dumpDataSet(dataSet);
}
}
}
答案 0 :(得分:0)
相关SO thread。
在使用History API检索数据之前,您必须先使用Recording API:
进行记录您的应用可以使用Recording API创建对DataType.TYPE_STEP_COUNT_CUMULATIVE
数据类型的订阅来记录用户的步数,如以下示例所示:
public void subscribe() {
// To create a subscription, invoke the Recording API. As soon as the subscription is
// active, fitness data will start recording.
Fitness.RecordingApi.subscribe(mClient, DataType.TYPE_STEP_COUNT_CUMULATIVE)
.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.w(TAG, "There was a problem subscribing.");
}
}
});
}
即使应用,Google Fit也会存储订阅中的步骤数据 没有运行,并在系统恢复订阅 重新启动。您的应用可以读取用户的每日步骤总数 健身史。
T 他的完全相同的问题在Google Fit常见问题解答中得到解决 找到了 here 强>
Fit应用程序使用特定数据源执行步骤。它补充说 以下功能位于默认合并步骤流之上:
在骑车,驾驶和其他一些非移动时记录的步骤 活动被删除。当涉及步骤的活动(例如 步行或跑步)没有合理的步骤数 与之相关的,估计活动的步骤。您可以 访问“估计”步骤流,如下所示:
通过REST API:
派生:com.google.step_count.delta:com.google.android.gms:estimated_step&gt; s通过Android API:
new DataSource.Builder()
.setAppPackageName(“com.google.android.gms”)
.setDataType(DataType.TYPE_STEP_COUNT_DELTA)
.setType(DataSource.TYPE_DERIVED)
.setStreamName("estimated_steps")
.build();
请注意,即使使用正确的数据源,您的步数也可以 仍然与Google Fit应用不同。这可能是应该的 出于以下原因之一:
在磨损时,Fit MicroApp在连接时将显示步数 通过电话查询并通过可穿戴API传输。其他 访问仅限本地数据的MicroApp只会获得监视步骤。我们是 致力于让开发人员更轻松。有时候这一步 Google Fit应用的计算代码已更新,其中包含错误修复程序 在我们能够向开发人员发布修复程序之前(需要 Google Play服务版本)。我们也在努力创造它 开发人员可以同时访问修复程序。
答案 1 :(得分:0)
我的方式:案例DataStepCounterRequest:
final DataSource ds = new DataSource.Builder()
.setAppPackageName("com.google.android.gms")
.setDataType(DataType.TYPE_STEP_COUNT_DELTA)
.setType(DataSource.TYPE_DERIVED)
.setStreamName("estimated_steps")
.build();
return new DataReadRequest.Builder()
.aggregate(ds, DataType.AGGREGATE_STEP_COUNT_DELTA)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.enableServerQueries()
.build();