Monday, October 29, 2012

Get Angle from using SensorManager In Android

private float[] mGravity;
    private float[] mMagnetic;
  
    private float getDirection()
    {
      
        float[] temp = new float[9];
        float[] R = new float[9];
        //Load rotation matrix into R
        SensorManager.getRotationMatrix(temp, null,
                mGravity, mMagnetic);
      
        //Remap to camera's point-of-view
        SensorManager.remapCoordinateSystem(temp,
                SensorManager.AXIS_X,
                SensorManager.AXIS_Z, R);
      
        //Return the orientation values
        float[] values = new float[3];
        SensorManager.getOrientation(R, values);
      
        //Convert to degrees
        for (int i=0; i < values.length; i++) {
            Double degrees = (values[i] * 180) / Math.PI;
            values[i] = degrees.floatValue();
        }

        return values[0];
      
    }
  
    @Override
    public void onSensorChanged(SensorEvent event) {
        switch(event.sensor.getType()) {
              
        case Sensor.TYPE_ACCELEROMETER:
            mGravity = event.values.clone();
            break;
        case Sensor.TYPE_MAGNETIC_FIELD:
            mMagnetic = event.values.clone();
            break;
        default:
            return;
        }
        if(mGravity != null && mMagnetic != null) {
            getDirection();
        }
    }

1 comment:

ablev said...

This was super-useful, thanks!