@@ -40,21 +40,37 @@ public class AccelerationEventListener implements SensorEventListener
40
40
private boolean useHighPassFilter ;
41
41
42
42
private MovementDetectionListener callback ;
43
+
44
+ private long lastDetectedMovement = Long .MAX_VALUE ;
45
+
46
+ private final static long DEFAULT_MIN_TIME_BETWEEN_MOVEMENT = 300 ;
47
+
48
+ public final static long DEFAULT_MIN_TIME_BETWEEN_MOVEMENT_DISABLED = -1 ;
49
+
50
+ private long minTimeBetweenMovement = DEFAULT_MIN_TIME_BETWEEN_MOVEMENT_DISABLED ;
43
51
44
52
public AccelerationEventListener (boolean useHighPassFilter ,
45
53
MovementDetectionListener callback )
46
54
{
47
- this (useHighPassFilter , callback , THRESHOLD_LOW );
55
+ this (useHighPassFilter , callback , THRESHOLD_LOW , DEFAULT_MIN_TIME_BETWEEN_MOVEMENT_DISABLED );
48
56
}
49
57
50
58
public AccelerationEventListener (boolean useHighPassFilter ,
51
- MovementDetectionListener callback , int threshold )
59
+ MovementDetectionListener callback , int threshold , long minTimeBetweenMovement )
52
60
{
53
61
this .useHighPassFilter = useHighPassFilter ;
54
62
gravity = new float [3 ];
55
63
highPassCount = 0 ;
56
64
this .callback = callback ;
57
65
this .threshold = threshold ;
66
+ this .minTimeBetweenMovement = minTimeBetweenMovement ;
67
+
68
+ lastDetectedMovement = System .currentTimeMillis ();
69
+ }
70
+
71
+ public void setMinTimeBetweenMovement (long minTimeBetweenMovement )
72
+ {
73
+ this .minTimeBetweenMovement = minTimeBetweenMovement ;
58
74
}
59
75
60
76
@ Override
@@ -83,7 +99,7 @@ public void onSensorChanged(SensorEvent event)
83
99
if (acceleration > threshold )
84
100
{
85
101
Log .i (TAG , "Movement detected:" + acceleration );
86
- callback . movementDetected ( true );
102
+ possiblyReportMovement ( );
87
103
}
88
104
}
89
105
}
@@ -113,6 +129,21 @@ private float[] highPass(float x, float y, float z)
113
129
114
130
return filteredValues ;
115
131
}
132
+
133
+ private void possiblyReportMovement ()
134
+ {
135
+ long currentTime = System .currentTimeMillis ();
136
+ long timeDiff = currentTime - lastDetectedMovement ;
137
+ if (timeDiff < minTimeBetweenMovement )
138
+ {
139
+ Log .d (TAG , "movement detected too soon " + timeDiff );
140
+ }
141
+ else
142
+ {
143
+ lastDetectedMovement = currentTime ;
144
+ callback .movementDetected (true );
145
+ }
146
+ }
116
147
117
148
/**
118
149
* TODO
0 commit comments