Android Programming Tutorials

(Romina) #1
Sensing a Disturbance

private void isNotShaking() {
long now=SystemClock.uptimeMillis();

if (lastShakeTimestamp> 0 ) {
if (now-lastShakeTimestamp>gap) {
lastShakeTimestamp= 0 ;

if (cb!=null) {
cb.shakingStopped();
}
}
}
}

public interface Callback {
void shakingStarted();
void shakingStopped();
}

private SensorEventListener listener=new SensorEventListener() {
public void onSensorChanged(SensorEvent e) {
if (e.sensor.getType()==Sensor.TYPE_ACCELEROMETER) {
double netForce=e.values[ 0 ]*e.values[ 0 ];

netForce+=e.values[ 1 ]*e.values[ 1 ];
netForce+=e.values[ 2 ]*e.values[ 2 ];

if (threshold<netForce) {
isShaking();
}
else {
isNotShaking();
}
}
}

public void onAccuracyChanged(Sensor sensor, int accuracy) {
// unused
}
};
}

The Shaker class takes four parameters: a Context (used to get the


SensorManager), the percentage of Earth's gravity that is considered a


"shake", how long the acceleration is below that level before a shaking


event is considered over, and a callback object to alert somebody about


shaking starting and stopping. The math to figure out if, for a given amount


of acceleration, we are shaking, is found in the SensorListener callback


object.


359
Free download pdf