| page.title=Environment Sensors |
| parent.title=Sensors |
| parent.link=index.html |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| <h2>In this document</h2> |
| <ol> |
| <li><a href="#sensors-using-temp">Using the Light, Pressure, and Temperature |
| Sensors</a></li> |
| <li><a href="#sensors-using-humid">Using the Humidity Sensor</a></li> |
| </ol> |
| <h2>Related samples</h2> |
| <ol> |
| <li><a href="{@docRoot}resources/samples/AccelerometerPlay/index.html">Accelerometer |
| Play</a></li> |
| <li><a |
| href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html"> |
| API Demos (OS - RotationVectorDemo)</a></li> |
| <li><a |
| href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html">API Demos |
| (OS - Sensors)</a></li> |
| </ol> |
| <h2>See also</h2> |
| <ol> |
| <li><a href="{@docRoot}guide/topics/sensors/index.html">Sensors</a></li> |
| <li><a href="{@docRoot}guide/topics/sensors/sensors_overview.html">Sensors Overview</a></li> |
| <li><a href="{@docRoot}guide/topics/sensors/sensors_position.html">Position Sensors</a></li> |
| <li><a href="{@docRoot}guide/topics/sensors/sensors_motion.html">Motion |
| Sensors</a></li> |
| </ol> |
| </div> |
| </div> |
| |
| <p>The Android platform provides four sensors that let you monitor various environmental properties. |
| You can use these sensors to monitor relative ambient humidity, illuminance, ambient pressure, and |
| ambient temperature near an Android-powered device. All four environment sensors are hardware-based |
| and are available only if a device manufacturer has built them into a device. With the exception of |
| the light sensor, which most device manufacturers use to control screen brightness, environment |
| sensors are not always available on devices. Because of this, it's particularly important that you |
| verify at runtime whether an environment sensor exists before you attempt to acquire data from |
| it.</p> |
| |
| <p>Unlike most motion sensors and position sensors, which return a multi-dimensional array of sensor |
| values for each {@link android.hardware.SensorEvent}, environment sensors return a single sensor |
| value for each data event. For example, the temperature in °C or the pressure in hPa. |
| Also, unlike motion sensors and position sensors, which often require high-pass or low-pass |
| filtering, environment sensors do not typically require any data filtering or data processing. Table |
| 1 provides a summary of the environment sensors that are supported on the Android platform.</p> |
| |
| <p class="table-caption" id="table1"> |
| <strong>Table 1.</strong> Environment sensors that are supported on the Android platform.</p> |
| <table> |
| <tr> |
| <th scope="col" style="white-space:nowrap">Sensor</th> |
| <th scope="col" style="white-space:nowrap">Sensor event data</th> |
| <th scope="col" style="white-space:nowrap">Units of measure</th> |
| <th scope="col" style="white-space:nowrap">Data description</th> |
| </tr> |
| <tr> |
| <td>{@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE}</td> |
| <td><code>event.values[0]</code></td> |
| <td>°C</td> |
| <td>Ambient air temperature.</td> |
| </tr> |
| <tr> |
| <td>{@link android.hardware.Sensor#TYPE_LIGHT}</td> |
| <td><code>event.values[0]</code></td> |
| <td>lx</td> |
| <td>Illuminance.</td> |
| </tr> |
| <tr> |
| <td>{@link android.hardware.Sensor#TYPE_PRESSURE}</td> |
| <td><code>event.values[0]</code></td> |
| <td>hPa or mbar</td> |
| <td>Ambient air pressure.</td> |
| </tr> |
| <tr> |
| <td>{@link android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY}</td> |
| <td><code>event.values[0]</code></td> |
| <td>%</td> |
| <td>Ambient relative humidity.</td> |
| </tr> |
| <tr> |
| <td>{@link android.hardware.Sensor#TYPE_TEMPERATURE}</td> |
| <td><code>event.values[0]</code></td> |
| <td>°C</td> |
| <td>Device temperature.<sup>1</sup></td> |
| </tr> |
| </table> |
| |
| <p class="note"><sup><strong>1</strong></sup> Implementations vary from device to |
| device. This sensor was deprecated in Android 4.0 (API Level 14).</p> |
| |
| <h2 id="sensors-using-temp">Using the Light, Pressure, and Temperature Sensors</h2> |
| |
| <p>The raw data you acquire from the light, pressure, and temperature sensors usually requires no |
| calibration, filtering, or modification, which makes them some of the easiest sensors to use. To |
| acquire data from these sensors you first create an instance of the {@link |
| android.hardware.SensorManager} class, which you can use to get an instance of a physical sensor. |
| Then you register a sensor listener in the {@link android.app.Activity#onResume |
| onResume()} method, and start handling incoming sensor data in the {@link |
| android.hardware.SensorEventListener#onSensorChanged onSensorChanged()} callback method. The |
| following code shows you how to do this:</p> |
| |
| <pre> |
| public class SensorActivity extends Activity implements SensorEventListener { |
| private SensorManager mSensorManager; |
| private Sensor mPressure; |
| |
| @Override |
| public final void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.main); |
| |
| // Get an instance of the sensor service, and use that to get an instance of |
| // a particular sensor. |
| mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); |
| mPressure = mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE); |
| } |
| |
| @Override |
| public final void onAccuracyChanged(Sensor sensor, int accuracy) { |
| // Do something here if sensor accuracy changes. |
| } |
| |
| @Override |
| public final void onSensorChanged(SensorEvent event) { |
| float millibars_of_pressure = event.values[0]; |
| // Do something with this sensor data. |
| } |
| |
| @Override |
| protected void onResume() { |
| // Register a listener for the sensor. |
| super.onResume(); |
| mSensorManager.registerListener(this, mPressure, SensorManager.SENSOR_DELAY_NORMAL); |
| } |
| |
| @Override |
| protected void onPause() { |
| // Be sure to unregister the sensor when the activity pauses. |
| super.onPause(); |
| mSensorManager.unregisterListener(this); |
| } |
| } |
| </pre> |
| |
| <p>You must always include implementations of both the {@link |
| android.hardware.SensorEventListener#onAccuracyChanged onAccuracyChanged()} and {@link |
| android.hardware.SensorEventListener#onSensorChanged onSensorChanged()} callback methods. Also, be |
| sure that you always unregister a sensor when an activity pauses. This prevents a sensor from |
| continually sensing data and draining the battery.</p> |
| |
| <h2 id="sensors-using-humid">Using the Humidity Sensor</h2> |
| |
| <p>You can acquire raw relative humidity data by using the humidity sensor the same way that you use |
| the light, pressure, and temperature sensors. However, if a device has both a humidity sensor |
| ({@link android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY}) and a temperature sensor ({@link |
| android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE}) you can use these two data streams to calculate |
| the dew point and the absolute humidity.</p> |
| |
| <h4>Dew point</h4> |
| |
| <p>The dew point is the temperature at which a given volume of air must be cooled, at constant |
| barometric pressure, for water vapor to condense into water. The following equation shows how you |
| can calculate the dew point:</p> |
| |
| <pre class="no-pretty-print classic"> |
| ln(RH/100%) + m·t/(T<sub>n</sub>+t) |
| t<sub>d</sub>(t,RH) = T<sub>n</sub> · ------------------------------------ |
| m - [ln(RH/100%) + m·t/(T<sub>n</sub>+t)] |
| </pre> |
| |
| <p>Where,</p> |
| |
| <ul type="none"> |
| <li>t<sub>d</sub> = dew point temperature in degrees C</li> |
| <li>t = actual temperature in degrees C</li> |
| <li>RH = actual relative humidity in percent (%)</li> |
| <li>m = 17.62</li> |
| <li>T<sub>n</sub> = 243.12</li> |
| </ul> |
| |
| <h4>Absolute humidity</h4> |
| |
| <p>The absolute humidity is the mass of water vapor in a given volume of dry air. Absolute |
| humidity is measured in grams/meter<sup>3</sup>. The following equation shows how you |
| can calculate the absolute humidity:</p> |
| |
| <pre class="no-pretty-print classic"> |
| (RH/100%) · A · exp(m·t/(T<sub>n</sub>+t) |
| d<sub>v</sub>(t,RH) = 216.7 · ------------------------------------ |
| 273.15 + t |
| </pre> |
| |
| <p>Where,</p> |
| |
| <ul type="none"> |
| <li>d<sub>v</sub> = absolute humidity in grams/meter<sup>3</sup></li> |
| <li>t = actual temperature in degrees C</li> |
| <li>RH = actual relative humidity in percent (%)</li> |
| <li>m = 17.62</li> |
| <li>T<sub>n</sub> = 243.12 degrees C</li> |
| <li>A = 6.112 hPa</li> |
| </ul> |
| |