【发布时间】:2017-07-06 08:54:55
【问题描述】:
我正在开发健身应用程序,我需要使用 Recording_API 获取一些信息来跟踪步数、燃烧的卡路里和行走的距离。我能够成功计算步数,但无法获得活动卡路里和距离。下面我放代码来获取燃烧的卡路里。
googleApiClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.HISTORY_API)
.addApi(Fitness.RECORDING_API)
.addApi(Fitness.CONFIG_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.enableAutoManage(this, 0, this)
.build();
Fitness.RecordingApi.subscribe(googleApiClient, DataType.TYPE_CALORIES_EXPENDED)
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
if (status.isSuccess()) {
if (status.getStatusCode() == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) {
Log.e( "RecordingAPI", "Already subscribed to the Recording API");
} else {
Log.e("RecordingAPI", "Subscribed to get Calories using Recording API");
}
}
}
});
new DataReadRequest.Builder()
.aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED)
.bucketByActivitySegment(1, TimeUnit.MILLISECONDS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);
if (dataReadResult.getBuckets().size() > 0) {
for (Bucket bucket : dataReadResult.getBuckets()) {
String bucketActivity = bucket.getActivity();
if (bucketActivity.contains(FitnessActivities.WALKING)) {
List<DataSet> dataSets = bucket.getDataSets();
for (DataSet dataSet : dataSets) {
dumpDataSet(dataSet);
}
}
}
}
for (DataPoint dp : dataSet.getDataPoints()) {
if (dp.getEndTime(TimeUnit.MILLISECONDS) > dp.getStartTime(TimeUnit.MILLISECONDS)) {
for (Field field : dp.getDataType().getFields()) {
expendedCalories = expendedCalories + dp.getValue(field).asFloat();
}
}
}
在上面的代码中,bucket 活动是未知的,dataPoints 是空的,因此我无法获得卡路里。以前我使用的是 HISTORY_API,使用它我能够正确获取所有信息,但它仅在用户拥有 google fit 帐户时才有效,否则它会给出空结果。 谁能帮帮我。
【问题讨论】:
标签: android google-fit