Android STEP_COUNTER случайные высокие значения на некоторых устройствах - PullRequest
0 голосов
/ 11 ноября 2019

Я использую SensorLister и шаблон STEP_COUNTER для отслеживания шагов в приложении, запустив сервис с прослушивателем датчиков. Даже если данные RAW работают нормально на 99% устройств. Тем не менее, есть некоторые устройства, которые дают мне случайное число с высоким значением (нереально), например, 3, 4, 5 тысяч шагов за одно чтение. Это особенно заметно на устройствах pixel 2XL.

Я пытался использовать сенсорный клиент Google FIT, но у него была та же проблема, что и при использовании SensorListener.

Я пытался использовать короткую задержку, избегать пакетной обработки, включая «не»"оптимизировать" приложение в настройках батареи, для подходящего API я пытался использовать небольшую частоту дискретизации и высокую. Те же результаты.

try {
  dataPointListener =
                    new OnDataPointListener() {
                        @Override
                        public void onDataPoint(DataPoint dataPoint) {
                            for (Field field : dataPoint.getDataType().getFields()) {
                                Value val = dataPoint.getValue(field);
                                Log.i("FIT", "Detected DataPoint value: " + val);
                            }
                        }
                    };

            Fitness.getSensorsClient(this, GoogleSignIn.getLastSignedInAccount(this))
                    .add(
                            new SensorRequest.Builder()
                                    .setSamplingRate(10, TimeUnit.SECONDS)
                                    .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
                                    .setAccuracyMode(SensorRequest.ACCURACY_MODE_DEFAULT)
                                    .setFastestRate(5, TimeUnit.SECONDS)
                                    .build(),
                            dataPointListener)
                    .addOnCompleteListener(
                            new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
                                        Log.i(TAG, "Listener registered!");
                                    } else {
                                        Log.e(TAG, "Listener not registered.", task.getException());
                                    }
                                }
                            });       
} catch (Exception e) {
   e.printStackTrace();
}

Выводится так, как описано в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...