Skip to content

Commit

Permalink
add orientation sensor
Browse files Browse the repository at this point in the history
  • Loading branch information
ruleant committed Feb 23, 2014
1 parent 4ccf0b0 commit 04f2bf6
Showing 1 changed file with 40 additions and 3 deletions.
43 changes: 40 additions & 3 deletions src/com/github/ruleant/getback_gps/lib/Orientation.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@
* @author Dieter Adriaenssens <ruleant@users.sourceforge.net>
*/
public class Orientation implements SensorEventListener {
/**
* Accelerometer Sensor.
*/
private Sensor mOrientationSensor;

/**
* Context of the Android app.
*/
Expand Down Expand Up @@ -143,6 +148,8 @@ public Orientation(final Context context) {
Sensor.TYPE_ACCELEROMETER);
mMagneticFieldSensor = mSensorManager.getDefaultSensor(
Sensor.TYPE_MAGNETIC_FIELD);
mOrientationSensor = mSensorManager.getDefaultSensor(
Sensor.TYPE_ORIENTATION);
}
}

Expand Down Expand Up @@ -188,6 +195,24 @@ public final void setMagneticField(final SensorEvent event) {
onOrientationChange();
}

/**
* Set orientation by an event from a TYPE_ORIENTATION sensor.
*
* @param event Sensor event from TYPE_ACCELEROMETER sensor
*/
public final void setOrientation(final SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ORIENTATION
// reject values that arrive sooner than the update rate
|| (event.timestamp - mOrientationTimestamp)
< SENSOR_UPDATE_RATE * MICRO_IN_NANO) {
return;
}
mOrientation = event.values[0];
mOrientationTimestamp = event.timestamp;

onOrientationChange();
}

/**
* Checks if an orientation can be provided :
* - required sensors are available
Expand All @@ -199,7 +224,8 @@ public boolean hasOrientation() {
return mAccelerometer != null && mMagneticFieldSensor != null
&& isTimestampRecent(mAccelerometerTimestamp)
&& isTimestampRecent(mMagneticFieldTimestamp)
&& isTimestampRecent(mOrientationTimestamp);
|| (mOrientationSensor != null
&& isTimestampRecent(mOrientationTimestamp));
}

/**
Expand All @@ -220,10 +246,12 @@ public double getOrientation() {
*/
public final boolean hasSensors() {
return mSensorManager != null
&& mSensorManager.getSensorList(
&& (mSensorManager.getSensorList(
Sensor.TYPE_MAGNETIC_FIELD).size() > 0
&& mSensorManager.getSensorList(
Sensor.TYPE_ACCELEROMETER).size() > 0;
Sensor.TYPE_ACCELEROMETER).size() > 0
|| mSensorManager.getSensorList(
Sensor.TYPE_ORIENTATION).size() > 0);
}

/**
Expand All @@ -238,6 +266,9 @@ public final void registerEvents(final SensorEventListener listener) {
listener, mAccelerometer, SENSOR_UPDATE_RATE);
mSensorManager.registerListener(
listener, mMagneticFieldSensor, SENSOR_UPDATE_RATE);
} else if (mOrientationSensor != null) {
mSensorManager.registerListener(
listener, mOrientationSensor, SENSOR_UPDATE_RATE);
}
}

Expand All @@ -252,6 +283,9 @@ public final void unRegisterEvents(final SensorEventListener listener) {
mSensorManager.unregisterListener(listener, mAccelerometer);
mSensorManager.unregisterListener(listener, mMagneticFieldSensor);
}
if (mOrientationSensor != null) {
mSensorManager.unregisterListener(listener, mOrientationSensor);
}
}

/**
Expand Down Expand Up @@ -377,6 +411,9 @@ public final void onSensorChanged(final SensorEvent event) {
case Sensor.TYPE_MAGNETIC_FIELD:
setMagneticField(event);
break;
case Sensor.TYPE_ORIENTATION:
setOrientation(event);
break;
default:
break;
}
Expand Down

0 comments on commit 04f2bf6

Please sign in to comment.