我正在使用SensorLister和STEP_COUNTER模式通过与传感器侦听器一起运行服务来跟踪应用中的步骤。即使其RAW数据也可以在99%的设备上正常运行。但是,有些设备为我提供了具有较高价值(不切实际)的随机数,例如一次读取多出3、4、5、000步。对于像素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();
}
它应该像文档中描述的那样输出。
[一段时间后,我放弃并切换了Google Fitness API。那是我的解决方案。易于集成,没有提到的问题我找不到解决方案。