/remindme/src/com/google/marvin/remindme/ShakeDetector.java

http://eyes-free.googlecode.com/ · Java · 70 lines · 55 code · 15 blank · 0 comment · 6 complexity · 1583dfcdaacf9dc9205a002b32b2787c MD5 · raw file

  1. package com.google.marvin.remindme;
  2. import android.content.Context;
  3. import android.hardware.SensorListener;
  4. import android.hardware.SensorManager;
  5. public class ShakeDetector {
  6. public interface ShakeListener {
  7. public void onShakeDetected();
  8. }
  9. private SensorListener mListener;
  10. private ShakeListener cb;
  11. private SensorManager sensorManager;
  12. public ShakeDetector(Context context, ShakeListener callback) {
  13. cb = callback;
  14. mListener = new SensorListener() {
  15. private final double deletionForce = .8;
  16. private final int deletionCount = 2;
  17. int shakeCount = 0;
  18. boolean lastShakePositive = false;
  19. private int shakeCountTimeout = 500;
  20. public void onSensorChanged(int sensor, float[] values) {
  21. if ((values[1] > deletionForce) && !lastShakePositive) {
  22. (new Thread(new resetShakeCount())).start();
  23. shakeCount++;
  24. lastShakePositive = true;
  25. } else if ((values[1] < -deletionForce) && lastShakePositive) {
  26. (new Thread(new resetShakeCount())).start();
  27. shakeCount++;
  28. lastShakePositive = false;
  29. }
  30. if (shakeCount > deletionCount) {
  31. shakeCount = 0;
  32. cb.onShakeDetected();
  33. }
  34. }
  35. public void onAccuracyChanged(int arg0, int arg1) {
  36. }
  37. class resetShakeCount implements Runnable {
  38. public void run() {
  39. try {
  40. Thread.sleep(shakeCountTimeout);
  41. shakeCount = 0;
  42. } catch (InterruptedException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47. };
  48. sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
  49. sensorManager.registerListener(mListener, SensorManager.SENSOR_ACCELEROMETER,
  50. SensorManager.SENSOR_DELAY_FASTEST);
  51. }
  52. public void shutdown() {
  53. sensorManager.unregisterListener(mListener);
  54. }
  55. }