Click here to Skip to main content
15,890,690 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
Hi guys,
I need something from your brain and mind d^_^b.
Here's the issue :
I need to know how do android device managing it's orientation? I mean, how do I know it will get Landscape or Portrait or else (on what degree of obliquity).

I got these code :
C++
  float angle = event.vector.roll;
if(angle >= 45 && angle < 135)
		newOrientationType  = OET_ASPECTLANDSCAPE_LEFT;
	else if(angle >= 135 && angle < 225)
		newOrientationType = OET_ASPECTPORTRAIT_REVERSED;
	else if(angle >= 225 && angle < 315)
		newOrientationType = OET_ASPECTLANDSCAPE_RIGHT;
	else
		newOrientationType = OET_ASPECTPORTRAIT;


Here's the clue of above :
angle : determined how much device has been tilted
newOrientationType : determined the orientation.

The question is : "When's 45,135,255,and else degree for the devices?"

Ok, that might be unclear.

So watch this :

^ ^
_ _ , is the normal position (but what degree??) (OET_ASPECTLANDSCAPE_RIGHT)

| >
| > , what degree?? (OET_ASPECTLANDSCAPE_LEFT)

\
\ , what degree?? (OET_ASPECTLANDSCAPE_LEFT)

Note : "_ _" : position of device

"^" and ">" : device's screen facing to (as for the (3), diagonal, it's should be facing 45 degree (top right).

Thanks
Posted
Updated 17-Jun-12 22:58pm
v3

1 solution

To enable the data for the angle, you have to write a certain Eventlistener and have to register it with the SensorManager class.


Java
public class myAngleClass extends Activity
{   
    
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        

        SensorManager Manager = (SensorManager)
this.getSystemService(SENSOR_SERVICE);        

        final float[] mValuesMagnet      = new float[3];
        final float[] mValuesAccel       = new float[3];
        final float[] mValuesOrientation = new float[3];
        final float[] mRotationMatrix    = new float[9];

       
        final SensorEventListener mEventListener = new SensorEventListener() {
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }

            public void onSensorChanged(SensorEvent event) {
               
                switch (event.sensor.getType()) {
                    case Sensor.TYPE_ACCELEROMETER:
                        System.arraycopy(event.values, 0, mValuesAccel, 0, 3);
                        break;

                    case Sensor.TYPE_MAGNETIC_FIELD:
                        System.arraycopy(event.values, 0, mValuesMagnet, 0, 3);
                        break;
                }
            };
        };

// Register the event listener
    public void regListeners(SensorManager Manager , SensorEventListener list)
    {
       Manager 
             .registerListener(list, Manager  
             .getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
                SensorManager.SENSOR_DELAY_NORMAL);


        Manager
              .registerListener(list, 
               sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), 
                SensorManager.SENSOR_DELAY_NORMAL);

    }
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900