Я использую 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();
}
Выводится так, как описано в документации.