Android 如何区分Google Fit Api中手动添加的步骤和传感器记录的步骤

Android 如何区分Google Fit Api中手动添加的步骤和传感器记录的步骤,android,google-play-services,google-fit,google-fit-sdk,Android,Google Play Services,Google Fit,Google Fit Sdk,我在我的项目中使用GoogleFitAPI来获取用户的日常步骤。但问题是,用户可以通过添加活动手动输入步骤。当我检索每日步骤时,GoogleFitAPI也会返回手动添加的步骤。 有没有办法区分手动添加的步骤和传感器记录的步骤。基本上,Google Fit文档中给出的示例说明,您可以通过使用获取设备的基本每日步骤总数 您的应用程序可以使用 创建对数据类型的订阅。类型\u步骤\u计数\u累积 数据类型 在您的情况下,您将获得聚合数据,该数据是传感器记录的步骤和使用提取的数据的组合 尝试查看您将需要的

我在我的项目中使用GoogleFitAPI来获取用户的日常步骤。但问题是,用户可以通过添加活动手动输入步骤。当我检索每日步骤时,GoogleFitAPI也会返回手动添加的步骤。
有没有办法区分手动添加的步骤和传感器记录的步骤。

基本上,Google Fit文档中给出的示例说明,您可以通过使用获取设备的基本每日步骤总数

您的应用程序可以使用 创建对数据类型的订阅。类型\u步骤\u计数\u累积 数据类型

在您的情况下,您将获得聚合数据,该数据是传感器记录的步骤和使用提取的数据的组合

尝试查看您将需要的:

配置API
基本上,GoogleFit文档中给出的示例说明,您可以通过使用获取设备的基本每日总步数

您的应用程序可以使用 创建对数据类型的订阅。类型\u步骤\u计数\u累积 数据类型

在您的情况下,您将获得聚合数据,该数据是传感器记录的步骤和使用提取的数据的组合

尝试查看您将需要的:

配置API
我就是这样解决这个问题的

   final DataReadRequest readRequest = new DataReadRequest.Builder()
            .read(googleFitUtils.getEstimatedSteps())
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

    DataReadResult dataReadResult =
            Fitness.HistoryApi.readData(mGoogleApiFitnessClient, readRequest).await(1, TimeUnit.MINUTES);

    DataSet stepData = dataReadResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);

    int totalSteps = 0;

    for (DataPoint dp : stepData.getDataPoints()) {
        for(Field field : dp.getDataType().getFields()) {
            int steps = dp.getValue(field).asInt();
            if (!"user_input".equals(dp.getOriginalDataSource().getStreamName()))
                totalSteps += steps;
        }
    }
第一点->在我使用

Fitness.HistoryApi.readDailyTotal
它返回一个包含每日总步数的数据点。 第二点->然后我改变了使用

Fitness.HistoryApi.readData
它返回包含每日步骤块的数据点数组。每个数据点都有一个属性

dp.getOriginalDataSource().getStreamName()
它返回类型,或者是传感器记录的步骤,或者是使用输入。
这就是如何过滤用户输入步骤以避免应用程序中的步骤被破解

我就是这样解决这个问题的

   final DataReadRequest readRequest = new DataReadRequest.Builder()
            .read(googleFitUtils.getEstimatedSteps())
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

    DataReadResult dataReadResult =
            Fitness.HistoryApi.readData(mGoogleApiFitnessClient, readRequest).await(1, TimeUnit.MINUTES);

    DataSet stepData = dataReadResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);

    int totalSteps = 0;

    for (DataPoint dp : stepData.getDataPoints()) {
        for(Field field : dp.getDataType().getFields()) {
            int steps = dp.getValue(field).asInt();
            if (!"user_input".equals(dp.getOriginalDataSource().getStreamName()))
                totalSteps += steps;
        }
    }
第一点->在我使用

Fitness.HistoryApi.readDailyTotal
它返回一个包含每日总步数的数据点。 第二点->然后我改变了使用

Fitness.HistoryApi.readData
它返回包含每日步骤块的数据点数组。每个数据点都有一个属性

dp.getOriginalDataSource().getStreamName()
它返回类型,或者是传感器记录的步骤,或者是使用输入。
这就是如何过滤用户输入步骤以避免应用程序中的步骤被破解

您可以尝试签出这些相似的线程:,您可以尝试签出这些相似的线程:,googleFitUtils.getEstimatedSteps是否也返回DataType.TYPE_STEP_COUNT_DELTA?googleFitUtils.getEstimatedSteps是否也返回DataType.TYPE_STEP_COUNT_DELTA?