Here's my code for capturing orientation data... This is a snippet so
has not been compiled, but should give you and idea.
Keep in mind that you should register the sensors with something like
this when ever you want to start listening to sensors:

sensorMgr = (SensorManager) contex.getSystemService
(Service.SENSOR_SERVICE);
orientationSensor = sensorMgr.getDefaultSensor
(Sensor.TYPE_ORIENTATION);
magnetSensor = sensorMgr.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
accelSensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

//this class implements SensorEventListener
sensorMgr.registerListener(this,orientationSensor,
SensorManager.SENSOR_DELAY_FASTEST);
sensorMgr.registerListener(this,magnetSensor,
SensorManager.SENSOR_DELAY_FASTEST);
orientationsupported = sensorMgr.registerListener(this, accelSensor,
SensorManager.SENSOR_DELAY_FASTEST);

//*************The following is the static data necessary for my
sensorlistener, these are fields of my class
 // for storing sensor data
float[] mags = new float[3];
float[] accels = new float[3];

int matrix_size = 16;
// matrices for letting SensorManager do its magic
float[] RotationMatrix = new float[matrix_size];
float[] InclinationMatrix = new float[matrix_size];

// an output matrix, that will hold a rotation matrix that
// can be used in openGl as a modelview matrix
float[] outR = new float[matrix_size];

// the orientation rotation array
float[] values = new float[3];

//***************************************************************
// here's the meat of the sensor handling, from the
android.hardware.SensorListener interface
public void onSensorChanged(SensorEvent event) {
  Sensor sensor = event.sensor;

  int type = sensor.getType();

  switch (type) {
  case Sensor.TYPE_MAGNETIC_FIELD:

    mags[0] = event.values[0];
    mags[1] = event.values[1];
    mags[2] = event.values[2];
    break;
  case Sensor.TYPE_ACCELEROMETER:
    accels[0] = event.values[0];
    accels[1] = event.values[1];
    accels[2] = event.values[2];
    break;
  case Sensor.TYPE_ORIENTATION:
    /******************************
     *these are the orientation values in degrees - one of them is the
     * magnetic heading....
     */
    // values = event.values.clone();

    break;
  }

  //this is key to getting your heading, it fills out the matrices
which are needed to calculate the
 //heading.  It is important to not that the acceleration data is
linked to the magnetic data, in that the
 //physical tilt/yaw of the phone affects the mags vector. Atleast
this is my understanding.
  SensorManager.getRotationMatrix(RotationMatrix, InclinationMatrix,
      accels, mags);

  // this is only necessary for my AR opengl purposes
  SensorManager.remapCoordinateSystem(RotationMatrix,
      SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, outR);

  // This is the orientation that i need
  // values[0] = compass in radians
  // values[1] and values[2] are the rotations about the x and y axis
  SensorManager.getOrientation(outR, values);

  // I have not used this function but it may give you the magnetic
  // heading
  // directly, in radians of course
  float magHeading = SensorManager.getInclination(InclinationMatrix);

}

Check out 
http://developer.android.com/reference/android/hardware/SensorManager.html
for definitive documentation.
I would put a text field in your activity and output the values live
as the sensors update.  I have found that the numbers
do not behave quite as expected, jumping 180 degrees depending on the
tilt of the phone.  I have not tried getInclination,
but documentation seems to point that this would be your best bet.
Good luck.

On Dec 12, 9:32 pm, Jeffrey <[email protected]> wrote:
> Okay, so I got a little further, I'm now stuck at the point where I
> can pull values, but they are the micro-tesla measurements. How do I
> get degrees from this?
>
> On Dec 12, 8:13 pm, Jeffrey <[email protected]> wrote:
>
> > I'm working on an application that will randomly point an arrow in a
> > direction, and have that arrow maintain it's direction if the device
> > is moved. All I want to do it get the magnetic field readings as
> > degrees and I can do it from there. The problem I'm having is getting
> > the magnetic field readings. I can't find any tutorials on it and the
> > API demo on google's dev site uses deprecated code (figures, google's
> > sample code is never n00b friendly).
>
> > At this point I've got this together but I don't know what I'm
> > missing, all the examples I can find are using SensorListener which
> > has onSensorChanged(int sensor, float[] values) but
> > SensorEventListener does not support "float[] values"
>
> > What am I missing here?
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to