1

I've been struggling to find the solution to loading some SharedPreferences values into SensorEventListener. I keep on getting blank values, null or it just crashes from example code that I found on Stackoverflow.

Here are a few of my references: Android - How to use SharedPreferences in non-Activity class? Android: Using SharedPreferences in a Shake Listener Class

Here is the Shake Detection code from below: Android: I want to shake it

I'm getting these values not from a different activity, and I'd like to load them from SharedPreferences into the public class ShakeEventListener and change the static values for MIN_FORCE, MIN_DIRECTION_CHANGE and MAX_TOTAL_DURATION_OF_SHAKE to the SharedPreferences values based on the stored values.

Example of my SharedPerferences code from Motion.java:

SharedPerferences for value: MIN_FORCE

 SharedPreferences spa = getSharedPreferences("ForceStore",         Activity.MODE_PRIVATE);
 int ValueForce = spa.getInt("Force", 15);

SharedPerferences for value: MIN_DIRECTION_CHANGE

SharedPreferences spb = getSharedPreferences("DirectionStore", MODE_PRIVATE);
int ValueDirection = spb.getInt("Direction", 2);

SharedPerferences for value: MAX_TOTAL_DURATION_OF_SHAKE

SharedPreferences spc = getSharedPreferences("ShakeStore", MODE_PRIVATE);
int ValueShake = spc.getInt("Shake", 200);

Example code from MainActivity.java:

 ((ShakeEventListener) mSensorListener).setOnShakeListener(new ShakeEventListener.OnShakeListener()    {    
      public void onShake() {

    // My code here to react to the Motion detected



          }

      }
    });
    }

Example code of public class ShakeEventListener:

  public class ShakeEventListener implements SensorEventListener {

  private static final int MIN_FORCE = 15;

  private static final int MIN_DIRECTION_CHANGE = 2;

  /** Maximum pause between movements. */
  private static final int MAX_PAUSE_BETHWEEN_DIRECTION_CHANGE = 200;

   /** Maximum allowed time for shake gesture. */
  private static final int MAX_TOTAL_DURATION_OF_SHAKE = 200;

  /** Time when the gesture started. */
  private long mFirstDirectionChangeTime = 0;

  /** Time when the last movement started. */
  private long mLastDirectionChangeTime;

  /** How many movements are considered so far. */
  private int mDirectionChangeCount = 0;

  /** The last x position. */
  private float lastX = 0;

  /** The last y position. */
  private float lastY = 0;

  /** The last z position. */
  private float lastZ = 0;

  /** OnShakeListener that is called when shake is detected. */
  private OnShakeListener mShakeListener;

 public interface OnShakeListener {

  void onShake();
 }


   public void setOnShakeListener(OnShakeListener listener) {
  mShakeListener = listener;
 }

 @Override
 public void onSensorChanged(SensorEvent se) {


// get sensor data
//float x = se.values[0];
//float y = se.values[1];
float z = se.values[2];

// calculate movement
//float totalMovement = Math.abs(x + y + z - lastX - lastY - lastZ);
float totalMovement = Math.abs(z - lastZ);





 if (totalMovement > MIN_FORCE) {

  // get time
  long now = System.currentTimeMillis();

  // store first movement time
  if (mFirstDirectionChangeTime == 0) {
    mFirstDirectionChangeTime = now;
    mLastDirectionChangeTime = now;
  }

  // check if the last movement was not long ago
  long lastChangeWasAgo = now - mLastDirectionChangeTime;
  if (lastChangeWasAgo < MAX_PAUSE_BETHWEEN_DIRECTION_CHANGE) {

    // store movement data
    mLastDirectionChangeTime = now;
    mDirectionChangeCount++;

    // store last sensor data 
    //lastX = x;
    //lastY = y;
    lastZ = z;

    // check how many movements are so far
    if (mDirectionChangeCount >= MIN_DIRECTION_CHANGE) {

      // check total duration
      long totalDuration = now - mFirstDirectionChangeTime;
      if (totalDuration < MAX_TOTAL_DURATION_OF_SHAKE) {
        mShakeListener.onShake();
        resetShakeParameters();
      }
    }

  } else {
    resetShakeParameters();
  }
  }
  }


private void resetShakeParameters() {
mFirstDirectionChangeTime = 0;
mDirectionChangeCount = 0;
mLastDirectionChangeTime = 0;
 // lastX = 0;
 // lastY = 0;
   lastZ = 0;
  }

  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {
  }
   }
Community
  • 1
  • 1

0 Answers0