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

Mud*_*rif 1 android google-play-services google-fit-sdk google-fit

我在我的项目中使用 Google Fit Api 来获取用户的每日步数。但问题是,用户可以通过添加活动来手动输入步骤。当我检索每日步数时,Google Fit Api 还会返回手动添加的步数。有什么方法可以区分手动添加的步骤和传感器记录的步骤。

Mud*_*rif 6

这就是我解决这个问题的方法。

   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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

第一点 - >在我使用总步骤之前

Fitness.HistoryApi.readDailyTotal
Run Code Online (Sandbox Code Playgroud)

它返回一个数据点以及每日总步数。第二点->然后我改变了获取每日步数的方式

Fitness.HistoryApi.readData
Run Code Online (Sandbox Code Playgroud)

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

dp.getOriginalDataSource().getStreamName()
Run Code Online (Sandbox Code Playgroud)

它返回类型,要么是传感器记录的步骤,要么是使用输入。这就是您可以过滤用户输入步骤以避免应用程序中的步骤被黑客攻击的方法。