Return to Snippet

Revision: 13888
at May 10, 2009 17:16 by mattwagl


Initial Code
package com.gedankentank.android.sensor;

import java.util.List;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;

public class AccelerometerListener implements SensorEventListener {
	
	private SensorManager sensorManager;
	private List<Sensor> sensors;
	private Sensor sensor;
	private long lastUpdate = -1;
	private long currentTime = -1;
	
	private float last_x, last_y, last_z;
	private float current_x, current_y, current_z, currenForce;
	private static final int FORCE_THRESHOLD = 900;
	private final int DATA_X = SensorManager.DATA_X;
	private final int DATA_Y = SensorManager.DATA_Y;
	private final int DATA_Z = SensorManager.DATA_Z;
	
	public AccelerometerListener(Activity parent) {
		SensorManager sensorService = (SensorManager) parent.getSystemService(Context.SENSOR_SERVICE);
		this.sensorManager = sensorManager;
		this.subscriber = subscriber;
		this.sensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
		if (sensors.size() > 0) {
            sensor = sensors.get(0);
        }
	}
	public void start () {
		if (sensor!=null)  {
			sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
		}
	}
	
	public void stop () {
		sensorManager.unregisterListener(this);
	}
	
	public void onAccuracyChanged(Sensor s, int valu) {
		
		
	}
	public void onSensorChanged(SensorEvent event) {
		
		if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER || event.values.length < 3)
		      return;
		
		currentTime = System.currentTimeMillis();
		
		if ((currentTime - lastUpdate) > 100) {
			long diffTime = (currentTime - lastUpdate);
			lastUpdate = currentTime;
			
			current_x = event.values[DATA_X];
			current_y = event.values[DATA_Y];
			current_z = event.values[DATA_Z];
			
			currenForce = Math.abs(current_x+current_y+current_z - last_x - last_y - last_z) / diffTime * 10000;
			
			if (currenForce > FORCE_THRESHOLD) {
			
				// Device has been shaken now go on and do something
				// you could now inform the parent activity ...
				
			}
			last_x = current_x;
			last_y = current_y;
			last_z = current_z;

		}
	}

}

Initial URL


Initial Description


Initial Title
Handling Shake Events on Android 1.5

Initial Tags
android

Initial Language
Java