java如何为步进计数器设置步间的最小时间?
我创建了一个步进计数器,我注意到你可以通过摇动这个设备在一秒钟内数到六步。 如何设置每个步骤之间的最小时间量以使其更准确?例如,使其至少有四分之一秒的时间,然后才能将下一步计算为一个步骤。如果这不是一个很好的解决方案,使它更准确,那么请让我知道
下面是代码,它包括一个计时器,每十分钟只计算一次总的步数,所以忽略它
public class StepCounterManager implements SensorEventListener{
boolean timerStarted = false;
private float initCount, finalCount, currentCount;
public Activity activity;
private boolean activityRunning;
private SensorManager sensorManager;
public StepCounterManager(Activity activity){
this.activity = activity;
}
public void stepCounterInit(){
sensorManager = (SensorManager) activity.getSystemService(Context.SENSOR_SERVICE);
timer();
timerStarted = true;
}
//timer starts at the start of app and restarts every 10 minutes
public void timer(){
Timer t = new Timer(false);
Toast.makeText(this.activity, "timer started", Toast.LENGTH_SHORT).show();
t.schedule(new TimerTask() {
@Override
public void run() {
activity.runOnUiThread(new Runnable() {
public void run() {
getFinalStepCount();
}
});
}
}, 600000);
}
public void register(){
activityRunning = true;
Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
if(countSensor != null){
sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI);
} else {
Toast.makeText(this.activity, "Count sensor not available", Toast.LENGTH_SHORT).show();
}
}
public void unRegister(){
activityRunning = false;
}
@Override
public void onSensorChanged(SensorEvent event) {
if(activityRunning){
currentCount = event.values[0];
System.out.println(currentCount);
}
if(timerStarted){
resetInitialStepCount();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
//a new initial count has to be made because the step count can only reset after a reboot
public void resetInitialStepCount(){
initCount = currentCount;
Toast.makeText(this.activity, "initial count is: " + initCount, Toast.LENGTH_SHORT).show();
timerStarted = false;
}
public void getFinalStepCount(){
finalCount = currentCount-initCount;
Toast.makeText(this.activity, "final count is: " + finalCount, Toast.LENGTH_SHORT).show();
resetInitialStepCount();
timer();
//todo: send finalcount to database
}
}
# 1 楼答案