Android 如何区分Google Fit Api中手动添加的步骤和传感器记录的步骤
我在我的项目中使用GoogleFitAPI来获取用户的日常步骤。但问题是,用户可以通过添加活动手动输入步骤。当我检索每日步骤时,GoogleFitAPI也会返回手动添加的步骤。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累积 数据类型 在您的情况下,您将获得聚合数据,该数据是传感器记录的步骤和使用提取的数据的组合 尝试查看您将需要的
有没有办法区分手动添加的步骤和传感器记录的步骤。基本上,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?