Android 通过Google Fit Api检索到的步数与Google Fit官方应用程序中显示的步数不匹配
我开发了一个需要显示每日步数的应用程序。 为此,我使用了GoogleFitSDK中提供的API 看起来一切都正常,但我得到的步数与GoogleFit官方应用程序中显示的步数不匹配 例如,当Google Fit应用程序显示2367个步骤时,我得到了2308个步骤 这有什么原因吗?有人有同样的问题吗?Android 通过Google Fit Api检索到的步数与Google Fit官方应用程序中显示的步数不匹配,android,google-fit,google-fit-sdk,Android,Google Fit,Google Fit Sdk,我开发了一个需要显示每日步数的应用程序。 为此,我使用了GoogleFitSDK中提供的API 看起来一切都正常,但我得到的步数与GoogleFit官方应用程序中显示的步数不匹配 例如,当Google Fit应用程序显示2367个步骤时,我得到了2308个步骤 这有什么原因吗?有人有同样的问题吗? 有人有线索吗?Google Fit sdk是Google Play服务的一部分。。官方的Google Fit应用程序也从Google Play services sdk收集相同的数据,但Google可
有人有线索吗?Google Fit sdk是Google Play服务的一部分。。官方的Google Fit应用程序也从Google Play services sdk收集相同的数据,但Google可能已经在Google Fit应用程序中添加了一些代码,以使数据更加准确。这也可能是Google Fit应用程序中的一个bug 我找到了解决办法 Fit应用程序在这些步骤的基础上进行一些额外的处理。当没有记录时,它会根据活动估计步骤 如果它能帮助某人: 您需要使用com.google.android.gms包的自定义数据源
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)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
Google Play Services 7.3(于2015年4月28日发布)在中添加了一种新方法,该方法与Google Fit官方应用程序中的步数匹配,更易于使用
PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(fitnessApiClient, DataType.AGGREGATE_STEP_COUNT_DELTA);
DailyTotalResult totalResult = result.await(30, TimeUnit.SECONDS);
if (totalResult.getStatus().isSuccess()) {
DataSet totalSet = totalResult.getTotal();
steps = totalSet.isEmpty() ? -1 : totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
}
pendingreult result=Fitness.HistoryApi.readDailyTotal(fitnessApiClient,DataType.AGGREGATE\u STEP\u COUNT\u DELTA);
DailyTotalResult totalResult=结果。等待(30,时间单位。秒);
if(totalResult.getStatus().isSuccess()){
DataSet totalSet=totalResult.getTotal();
steps=totalSet.isEmpty()?-1:totalSet.getDataPoints().get(0).getValue(Field.Field_steps).asInt();
}
根据要求,我正在发布完整的代码以获取值
DataSource estimatedSteps = 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(estimatedSteps, DataType.AGGREGATE_STEP_COUNT_DELTA)
.setTimeRange(startTimeSeconds, endTimeSeconds, TimeUnit.SECONDS)
.bucketByTime(1, TimeUnit.DAYS)
.enableServerQueries()
.build();
PendingResult<DataReadResult> pendingResult = Fitness.HistoryApi.readData(client, readRequest);
pendingResult.setResultCallback(new ResultCallback<DataReadResult>() {
@Override
public void onResult(@NonNull DataReadResult dataReadResult) {
List<Bucket> allBuckets = dataReadResult.getBuckets();
for (Bucket bucket : allBuckets) {
long startAtSeconds = bucket.getStartTime(TimeUnit.SECONDS);
Value stepsValue = getValue(bucket, DataType.TYPE_STEP_COUNT_DELTA, Field.FIELD_STEPS);
int steps = stepsValue != null ? stepsValue.asInt() : 0;
Log.d(TAG, String.format("startAtSeconds %s, steps %s", startAtSeconds, steps));
}
}
});
DataSource estimatedSteps=新建DataSource.Builder()
.setDataType(数据类型.TYPE\u步骤\u计数\u增量)
.setType(数据源.TYPE_派生)
.setStreamName(“估计的_步数”)
.setAppPackageName(“com.google.android.gms”)
.build();
DataReadRequest=newDataReadRequest.Builder()
.aggregate(估计步数,数据类型。聚合\u步数\u增量)
.setTimeRange(开始时间毫秒、结束时间秒、时间单位秒)
.bucketByTime(1,时间单位:天)
.enableServerQueries()
.build();
Pendingreult Pendingreult=Fitness.HistoryApi.readData(客户端,readRequest);
Pendingreult.setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(@NonNull DataReadResult DataReadResult){
List allbucket=dataReadResult.getbucket();
用于(铲斗:所有铲斗){
long StartSeconds=bucket.getStartTime(时间单位:秒);
Value stepsValue=getValue(bucket,DataType.TYPE\u STEP\u COUNT\u DELTA,Field.Field\u STEPS);
int steps=stepsValue!=null?stepsValue.asInt():0;
Log.d(TAG,String.format(“startAtSeconds%s,steps%s”,startAtSeconds,steps));
}
}
});
这对我很有帮助,干得不错。你是怎么得到这个解决方案的?这些信息的任何来源,或者仅仅是你的辛勤工作?我仍然没有得到与此相同的价值观,大多数日子的回报都比Google Fit报告的要多!它实际上比示例中显示的方式更不准确。请给我们完整的代码,以便从请求中获取值,因为我无法找到它。卡路里呢?下面的代码不返回任何内容。DataSource ESTIMATED_STEP_DELTAS=new DataSource.Builder().setDataType(DataType.TYPE_Carries_EXPENDED).setType(DataSource.TYPE_Derivated).setStreamName(“ESTIMATED_Carries”).setAppPackageName(“com.google.android.gms”).build();有人能帮我找到像这样燃烧卡路里的方法吗@托马斯:有可能发布一些代码吗?您是否在后台的步骤中为Record使用AsyncTask类?几天前我问过这个问题,但没有人回答我。你能发布你的代码吗?没有服务我怎么能做到这一点?使用wait会在主活动代码中出现错误,将wait更改为0秒将无法获取数据。如果没有Google Play服务,则无法执行此操作。您必须在后台线程中使用wait。如果要在主线程中使用它,请调用result.setResultCallback(…);如何使用Fitness.HistoryApi.ReadDailyTotalOK获取距离好的,您有任何关于此信息的特定来源或文档吗?如果是,你能提供吗?你能帮我找到像这样燃烧卡路里的方法吗?