SensorManager requestTriggerSensor возвращает false - PullRequest
0 голосов
/ 28 марта 2019

Я делаю фитнес-приложение, которое использует количество шагов для измерения расстояния. Я пытаюсь использовать метод sensorManager.requestTriggerSensor(), чтобы получить начальный счетчик шагов при запуске приложения. Тем не менее, мой код возвращает false, то есть датчик не сработал. Я успешно реализовал SensorEventListener, который я использую для продолжения подсчета шагов. Мой фрагмент кода выглядит следующим образом, аналогично документации

private SensorManager mSensorManager;
private Sensor sensorStepCounter;
private TriggerEventListener triggerEventListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

    triggerEventListener = new TriggerEventListener() {
        @Override
        public void onTrigger(TriggerEvent event) {

            float initialSteps = event.values[0];
            Log.d(TAG, "initial Steps: " + Arrays.toString(event.values));
        }
    };

    sensorStepCounter = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
    ....
}

@Override
protected void onResume() {
    ...
    boolean triggered = mSensorManager.requestTriggerSensor(triggerEventListener, sensorStepCounter);
}

Или есть другой способ получения текущих данных датчика, таких как количество шагов, при запуске приложения?

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Полагаю, вы хотите использовать для этого Google Fit API, а не доступ к необработанным данным датчика. С документация :

    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.");
    }

Обратите внимание, что этот код не хочет запускаться в потоке пользовательского интерфейса. Вы можете переместить его в другой поток (как показано на странице, на которую я ссылался) или использовать метод PendingResult.setResultCallback.

0 голосов
/ 10 мая 2019

У меня есть только предположение, что срабатывание шагового датчика является ложным, поскольку датчик уже сработал.Тем не менее, я предлагаю другое решение.

  1. Вы можете прослушать Sensor.TYPE_STEP_COUNTER.Тогда значение шагов, которые вы получаете при первом событии датчика, является вашим «смещением», поэтому для определения количества шагов, сделанных пользователем с момента запуска приложения, вам необходимо вычесть «смещение» из новейшего значения датчика.
  2. С другой стороныЕсть еще один датчик: Sensor.TYPE_STEP_COUNTER, который срабатывает при каждом шаге.Вы также можете использовать это.
...