我正试图从google fit API获取步数,距离,卡路里。
我使用GoogleApiClient
来访问Google Fit中的数据。
我要求根据Google Fit权限允许访问Google健身中的所有数据:
此权限每次都会弹出。我需要允许4到5次,然后才能从Google Fit中获取步骤。
我第一次获得Google健身许可需要做些什么。 所以请帮我解决这个问题。
mGoogleApiClient1 = new GoogleApiClient.Builder(this)
.addApi(Fitness.HISTORY_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addScope(new Scope(Scopes.FITNESS_BODY_READ_WRITE))
.addScope(new Scope(Scopes.FITNESS_LOCATION_READ_WRITE))
.addConnectionCallbacks(this)
.enableAutoManage(this, Constants.googleApi, this)
.build();
2。我使用以下API来获取步距和卡路里 请告诉我为什么我没有从Google Fit获得一致的数据。 它总是比Google Fit的原始步骤获得的步骤数据更多。
// get Steps data from bellow api
private void getStepDataForToday() {
DailyTotalResult result = Fitness.HistoryApi.readDailyTotal( mGoogleApiClient1, DataType.TYPE_STEP_COUNT_DELTA ).await(1, TimeUnit.MINUTES);
showDataSet(result.getTotal());
}
private void getDistanceDataForToday() {
DailyTotalResult result = Fitness.HistoryApi.readDailyTotal( mGoogleApiClient1, DataType.TYPE_DISTANCE_DELTA ).await(1, TimeUnit.MINUTES);
showDataSet(result.getTotal());
}
private void getCaloriesDataForToday() {
DailyTotalResult result = Fitness.HistoryApi.readDailyTotal( mGoogleApiClient1, DataType.TYPE_CALORIES_EXPENDED ).await(1, TimeUnit.MINUTES);
showDataSet(result.getTotal());
}
谢谢 并等待帮助
答案 0 :(得分:1)
对于适合权限,请确保或仔细检查您是否正确遵循Authorization in Android中的指示。
对于您获得的步数,距离和卡路里数据,这只是Google健身的原始步骤吗?
Google FIT的FAQ声明:
由于Google Fit更新的发布方式,可能会有所帮助 Google Fit应用程序具有更新版本的数据分析 代码比Google Play服务更少发布。
然而,我们的后端总是拥有最新版本的 数据,最终在那里处理的所有内容都应该匹配 在几次云同步之后。如果情况不是这样,请告诉我们。
我们正努力让这种情况变得更好 应用程序要求我们立即处理云同步 一切都是同步的,也是通过使它同步发生 输入或更改重要数据时自动显示。
这也可能是因为没有读取正确的数据源。至 匹配Google Fit的值,您应该阅读以下数据:
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(ESTIMATED_STEP_DELTAS, DataType.AGGREGATE_STEP_COUNT_DELTA) .aggregate(DataType.TYPE_DISTANCE_DELTA, DataType.AGGREGATE_DISTANCE_DELTA) .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED) .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY) .bucketByTime(1, TimeUnit.DAYS) .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) .build();
有关详情,请查看相关的SO question。