Android SensorManager 与 Google 适合计步

Android SensorManager vs Google Fit for step count

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

Using SensorManager:

val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val sensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)

Using 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;
    }
}

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

Similar question about heart rate here,但没有答案。非常感谢任何指导!

高层次:

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

Google Fit 使用您设备上的传感器来收集(除其他外)步数。他们还(可能?)施展魔法来改进这些数据。并确保如果你和你的 phone 一起出去 运行 并且观看它只记录一次。 Google Google 健身可让您访问历史数据。

回答您的问题:

  • Do they get step count data from the same source, i.e. will they give the same numbers?

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

  • Does the Google Fit terms and conditions apply to using SensorManager data?

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

  • Do both retrieve data from Wear OS if the user is wearing one?

如前所述,SensorManager只记录代码为运行ning的设备上的数据。 Google Fit 能够从 Wear OS 设备收集数据,前提是用户对其进行了配置。

  • Why are there two approaches, what's the difference?

我已经在上面解释了一些主要区别。回答"why":不同的应用行为需要不同的解决方案。有时 SensorManager 是最佳选择,有时 Google 适合。