diff --git a/api/current.xml b/api/current.xml
index 9de160a..4dd0909 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -77858,6 +77858,21 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<method name="getAltitude"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="p0" type="float">
+</parameter>
+<parameter name="p" type="float">
+</parameter>
+</method>
 <method name="getDefaultSensor"
  return="android.hardware.Sensor"
  abstract="false"
@@ -78437,6 +78452,17 @@
  visibility="public"
 >
 </field>
+<field name="PRESSURE_STANDARD_ATMOSPHERE"
+ type="float"
+ transient="false"
+ volatile="false"
+ value="1013.25f"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="RAW_DATA_INDEX"
  type="int"
  transient="false"
diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java
index 5cc8d5d..f6d237a 100644
--- a/core/java/android/hardware/SensorManager.java
+++ b/core/java/android/hardware/SensorManager.java
@@ -268,6 +268,10 @@
     public static final float MAGNETIC_FIELD_EARTH_MIN = 30.0f;
 
 
+    /** Standard atmosphere, or average sea-level pressure in hPa (millibar) */
+    public static final float PRESSURE_STANDARD_ATMOSPHERE = 1013.25f;
+
+
     /** Maximum luminance of sunlight in lux */
     public static final float LIGHT_SUNLIGHT_MAX = 120000.0f;
     /** luminance of sunlight in lux */
@@ -573,11 +577,11 @@
                     // which won't get the rotated values
                     try {
                         sRotation = sWindowManager.watchRotation(
-                            new IRotationWatcher.Stub() {
-                                public void onRotationChanged(int rotation) {
-                                    SensorManager.this.onRotationChanged(rotation);
+                                new IRotationWatcher.Stub() {
+                                    public void onRotationChanged(int rotation) {
+                                        SensorManager.this.onRotationChanged(rotation);
+                                    }
                                 }
-                            }
                         );
                     } catch (RemoteException e) {
                     }
@@ -638,7 +642,7 @@
                     break;
                 case Sensor.TYPE_ORIENTATION:
                     result |= SensorManager.SENSOR_ORIENTATION |
-                                    SensorManager.SENSOR_ORIENTATION_RAW;
+                    SensorManager.SENSOR_ORIENTATION_RAW;
                     break;
             }
         }
@@ -1488,7 +1492,7 @@
      * @see #getRotationMatrix(float[], float[], float[], float[])
      * @see GeomagneticField
      */
-   public static float[] getOrientation(float[] R, float values[]) {
+    public static float[] getOrientation(float[] R, float values[]) {
         /*
          * 4x4 (length=16) case:
          *   /  R[ 0]   R[ 1]   R[ 2]   0  \
@@ -1514,8 +1518,27 @@
         return values;
     }
 
-
     /**
+     * Computes the Altitude in meters from the atmospheric pressure and the
+     * pressure at sea level.
+     * <p>
+     * Typically the atmospheric pressure is read from a
+     * {@link Sensor#TYPE_PRESSURE} sensor. The pressure at sea level must be
+     * known, usually it can be retrieved from airport databases in the
+     * vicinity.
+     * </p>
+     *
+     * @param p0 pressure at sea level
+     * @param p atmospheric pressure
+     * @return Altitude in meters
+     */
+   public static float getAltitude(float p0, float p) {
+        final float coef = 1.0f / 5.255f;
+        return 44330.0f * (1.0f - (float)Math.pow(p/p0, coef));
+    }
+
+
+   /**
      * {@hide}
      */
     public void onRotationChanged(int rotation) {
