Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过Google Fit Api检索到的步数与Google Fit官方应用程序中显示的步数不匹配_Android_Google Fit_Google Fit Sdk - Fatal编程技术网

Android 通过Google Fit Api检索到的步数与Google Fit官方应用程序中显示的步数不匹配

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可

我开发了一个需要显示每日步数的应用程序。 为此,我使用了GoogleFitSDK中提供的API

看起来一切都正常,但我得到的步数与GoogleFit官方应用程序中显示的步数不匹配

例如,当Google Fit应用程序显示2367个步骤时,我得到了2308个步骤

这有什么原因吗?有人有同样的问题吗?
有人有线索吗?

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获取距离好的,您有任何关于此信息的特定来源或文档吗?如果是,你能提供吗?你能帮我找到像这样燃烧卡路里的方法吗?