androidandroid-sensors

Get min and max values for getOrientation on accelerometer?


I am currently working with the accelerometer on Android, and have run into an interesting situation. I need to find out the maximum values for the following, WITHOUT requiring the end user to flop their phone around in some elaborate calibration routine. The values I am looking for specifically are...

@Override
public void onSensorChanged(SensorEvent event) {

    SensorManager.getOrientation(outR, xyz);

    float X, Y, XMax, YMax;

    X = xyz[1];
    Y = xyz[2];

    XMax = ???;
    YMax = ???;
}

I've poked around online, but have not had much luck determining what the values would be (it appears it changes from phone to phone), nor seen anyone mention a way to pull that value from somewhere.

Does anyone know how I might determine the maximum/minimum values of xyz[1] and xyz[2]?

UPDATE: An Example of what I mean is the following:

When I report directly the outputed float from xyz[1], and then move my phone forward and backward all the way, I get the following results:

min value it reports: -1.50 (give or take a 10ths) max value it reports: 1.50 (give or take a 10ths)

when I roll my phone left and right, I get the following for xyz[2]:

min value it reports: -3.14 (give or take a 10ths) max value it reports: 3.14 (give or take a 10ths)

I was told this changes between phones, however this could be wrote.


Solution

  • I don't know what max/min values you're talking about but getOrientation will populate a vector with the following data:

    xyz[0]: azimuth [-π,π]
    xyz[1]: pitch [-π,π]
    xyz[2]: roll [-π/2,π/2]
    

    From docs:

    All three angles above are in radians and positive in the counter-clockwise direction.

    Refer also to the SensorManager.java:1094 class:

    https://android.googlesource.com/platform/frameworks/base/+/b267554/core/java/android/hardware/SensorManager.java