Android SensorManager 与 Google Fit 的步数统计

Jam*_*len 2 android sensormanager google-fit wear-os

我一直在研究如何在 Android 应用程序中读取步数,并在文档中找到了两种完全不同的方法:

使用传感器管理器

val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val sensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
Run Code Online (Sandbox Code Playgroud)

使用 Google Fit API

private class VerifyDataTask extends AsyncTask<Void, Void, Void> {
    protected Void doInBackground(Void... params) {

        long total = 0;

        PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(mClient, DataType.TYPE_STEP_COUNT_DELTA);
        DailyTotalResult totalResult = result.await(30, TimeUnit.SECONDS);
        if (totalResult.getStatus().isSuccess()) {
            DataSet totalSet = totalResult.getTotal();
            total = totalSet.isEmpty()
                    ? 0
                    : totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
        } else {
            Log.w(TAG, "There was a problem getting the step count.");
        }

        Log.i(TAG, "Total steps: " + total);

        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

没有任何迹象表明这两种方法之间的区别,有人知道吗:

  • 他们是否从同一来源获得步数数据,即他们会给出相同的数字吗?
  • Google Fit 条款和条件是否适用于使用 SensorManager 数据?
  • 如果用户佩戴了 Wear OS,两者都会从 Wear OS 检索数据吗?
  • 为什么有两种方法,有什么区别?

关于心率的类似问题在这里,但没有答案。非常感谢任何指导!

Tof*_*erJ 6

在高层次上:

SensorManager让您可以直接访问可用于记录(除其他外)步数的传感器。这将为您提供实时的原始、未处理的数据。

Google Fit 使用您设备上的传感器来收集(除其他外)步数。他们还(可能?)做了一些魔法来改进这些数据。并确保如果您同时携带手机和手表出去跑步,它只会记录一次。Google Fit 可让您访问历史数据。

回答您的问题:

  • 他们是否从同一来源获得步数数据,即他们会给出相同的数字吗?

是的,他们从同一来源获取数据。但是,在 Google Fit 中,您可以访问所有连接设备的数据。您SensorManager只能访问该特定设备上的数据。他们不一定会给出完全相同的数字。

  • Google Fit 条款和条件是否适用于使用 SensorManager 数据?

不,SensorManager没有任何特定的条款和条件。它是 Android 平台的一部分,可以像其中的任何其他功能一样使用。

  • 如果用户佩戴了 Wear OS,两者都会从 Wear OS 检索数据吗?

如上所述,SensorManager仅记录运行代码的设备上的数据。如果用户进行了配置,Google Fit 能够从 Wear OS 设备收集数据。

  • 为什么有两种方法,有什么区别?

我已经解释了上面的一些关键区别。回答“为什么”:不同的应用程序行为需要不同的解决方案。有时SensorManager是最好的选择,有时 Google Fit 是最好的选择。