Android SensorManager и Google Fit для подсчета шагов - PullRequest
0 голосов
/ 01 апреля 2020

Я изучал способ считывания количества шагов в приложении Android и нашел в документации два совершенно разных способа сделать это:

Использование SensorManager :

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

Использование 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;
    }
}

Нет никаких указаний на разницу между этими двумя подходами, кто-нибудь знает:

  • Получают ли они данные подсчета шагов из одного и того же источника, т.е. дают ли они одинаковые номера?
  • Применимы ли положения и условия Google Fit к использованию данных SensorManager?
  • Получают ли оба данные от Wear OS, если пользователь носит один?
  • Почему есть два подхода, в чем разница?

Подобный вопрос о частоте сердечных сокращений здесь , но без ответов. Любое руководство высоко ценится!

1 Ответ

2 голосов
/ 01 апреля 2020

На высоком уровне:

SensorManager дает вам прямой доступ к датчикам, которые могут использоваться для записи (помимо прочего) количества шагов. Это дает вам необработанные необработанные данные в режиме реального времени.

Google Fit использует датчики на ваших устройствах для сбора (помимо прочего) количества шагов. Они также (возможно?) Делают магию c, чтобы улучшить эти данные. И убедитесь, что если вы go пробуете оба телефона и смотрите его, он регистрирует его только один раз. Google Fit предоставляет вам доступ к историческим данным.

Чтобы ответить на ваши вопросы:

  • Получают ли они данные о количестве шагов из одного источника, т.е. будут ли они давать одинаковые номера?

Да, они получают данные из одного и того же источника. Однако в Google Fit у вас есть доступ к данным со всех подключенных устройств. С SensorManager у вас есть доступ только к данным на указанном c устройстве. Они не обязательно будут давать одно и то же число.

  • Применимы ли положения и условия Google Fit к использованию данных SensorManager?

Нет, SensorManager не содержит особых условий c. Она является частью платформы Android и может использоваться точно так же, как и любая другая функция в ней.

  • Как получать данные из Wear OS, если пользователь их носит?

Как упоминалось выше, SensorManager записывает данные только на устройстве, на котором выполняется код. Google Fit может собирать данные с устройства Wear OS, если это настроено пользователем.

  • Почему есть два подхода, в чем разница?

Я уже объяснил некоторые из ключевых отличий выше. Чтобы ответить на вопрос «почему»: различное поведение приложения требует разных решений. Иногда SensorManager - лучшая альтернатива, а иногда и Google Fit.

...