سنسورهای محیطی
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
پلتفرم اندروید چهار حسگر را ارائه میکند که به شما امکان نظارت بر ویژگیهای مختلف محیطی را میدهد. می توانید از این حسگرها برای نظارت بر رطوبت نسبی محیط، روشنایی، فشار محیط و دمای محیط در نزدیکی دستگاه مجهز به اندروید استفاده کنید. هر چهار حسگر محیطی مبتنی بر سخت افزار هستند و تنها در صورتی در دسترس هستند که سازنده دستگاه آنها را در دستگاهی تعبیه کرده باشد. به استثنای سنسور نور، که اکثر سازندگان دستگاه ها از آن برای کنترل روشنایی صفحه استفاده می کنند، سنسورهای محیط همیشه در دستگاه ها در دسترس نیستند. به همین دلیل، به ویژه مهم است که در زمان اجرا بررسی کنید که آیا یک حسگر محیطی وجود دارد یا خیر، قبل از اینکه بخواهید اطلاعاتی از آن به دست آورید.
برخلاف اکثر سنسورهای حرکت و حسگرهای موقعیت، که یک آرایه چند بعدی از مقادیر حسگر را برای هر SensorEvent
برمیگردانند، حسگرهای محیطی یک مقدار حسگر واحد را برای هر رویداد داده برمیگردانند. برای مثال، دما بر حسب درجه سانتی گراد یا فشار بر حسب hPa. همچنین، بر خلاف سنسورهای حرکت و سنسورهای موقعیت، که اغلب به فیلتر بالا گذر یا پایین گذر نیاز دارند، سنسورهای محیطی معمولاً نیازی به فیلتر کردن داده یا پردازش داده ندارند. جدول 1 خلاصه ای از حسگرهای محیطی را ارائه می دهد که در پلتفرم اندروید پشتیبانی می شوند.
جدول 1. حسگرهای محیطی که در پلتفرم اندروید پشتیبانی می شوند.
1 پیاده سازی ها از دستگاهی به دستگاه دیگر متفاوت است. این سنسور در اندروید 4.0 (سطح API 14) منسوخ شده است.
از سنسورهای نور، فشار و دما استفاده کنید
دادههای خامی که از سنسورهای نور، فشار و دما به دست میآورید معمولاً نیازی به کالیبراسیون، فیلتر کردن یا اصلاح ندارند، که باعث میشود آنها یکی از آسانترین حسگرها برای استفاده باشند. برای به دست آوردن اطلاعات از این حسگرها ابتدا نمونه ای از کلاس SensorManager
ایجاد می کنید که می توانید از آن برای دریافت نمونه ای از یک حسگر فیزیکی استفاده کنید. سپس یک شنونده حسگر را در متد onResume()
ثبت میکنید و شروع به رسیدگی به دادههای حسگر ورودی در روش پاسخ به تماس onSensorChanged()
میکنید. کد زیر نحوه انجام این کار را به شما نشان می دهد:
کاتلین
class SensorActivity : Activity(), SensorEventListener {
private lateinit var sensorManager: SensorManager
private var pressure: Sensor? = null
public override fun onCreate(savedInstanceState: Bundle?) {
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.
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
pressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)
}
override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
// Do something here if sensor accuracy changes.
}
override fun onSensorChanged(event: SensorEvent) {
val millibarsOfPressure = event.values[0]
// Do something with this sensor data.
}
override fun onResume() {
// Register a listener for the sensor.
super.onResume()
sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL)
}
override fun onPause() {
// Be sure to unregister the sensor when the activity pauses.
super.onPause()
sensorManager.unregisterListener(this)
}
}
جاوا
public class SensorActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
private Sensor pressure;
@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.
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
pressure = sensorManager.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 millibarsOfPressure = event.values[0];
// Do something with this sensor data.
}
@Override
protected void onResume() {
// Register a listener for the sensor.
super.onResume();
sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
// Be sure to unregister the sensor when the activity pauses.
super.onPause();
sensorManager.unregisterListener(this);
}
}
شما باید همیشه پیادهسازی روشهای پاسخ به تماس onAccuracyChanged()
و onSensorChanged()
را وارد کنید. همچنین، مطمئن شوید که همیشه هنگام توقف فعالیت، ثبت سنسور را لغو کنید. این از حسگر مداوم داده ها و تخلیه باتری جلوگیری می کند.
از سنسور رطوبت استفاده کنید
شما میتوانید با استفاده از حسگر رطوبت به همان روشی که از سنسورهای نور، فشار و دما استفاده میکنید، دادههای خام رطوبت نسبی را به دست آورید. با این حال، اگر دستگاهی دارای سنسور رطوبت ( TYPE_RELATIVE_HUMIDITY
) و سنسور دما ( TYPE_AMBIENT_TEMPERATURE
) باشد، میتوانید از این دو جریان داده برای محاسبه نقطه شبنم و رطوبت مطلق استفاده کنید.
نقطه شبنم
نقطه شبنم دمایی است که در آن حجم معینی از هوا باید در فشار بارومتری ثابت خنک شود تا بخار آب به آب متراکم شود. معادله زیر نشان می دهد که چگونه می توانید نقطه شبنم را محاسبه کنید:
![t_d(t,RH) = Tn · (ln(RH/100) + m·t/(T_n+t ))/(m - [ln(RH/100%) + m·t/(T_n+t)] )](https://developer.android.com/static/images/guide/topics/sensors/dew_point.png?authuser=0&hl=fa)
کجا،
- t d = دمای نقطه شبنم بر حسب درجه سانتیگراد
- t = دمای واقعی بر حسب درجه سانتیگراد
- RH = رطوبت نسبی واقعی بر حسب درصد (%)
- m = 17.62
- T n = 243.12
رطوبت مطلق
رطوبت مطلق جرم بخار آب در حجم معینی از هوای خشک است. رطوبت مطلق بر حسب گرم بر متر 3 اندازه گیری می شود. معادله زیر نشان می دهد که چگونه می توانید رطوبت مطلق را محاسبه کنید:

کجا،
- d v = رطوبت مطلق بر حسب گرم در متر 3
- t = دمای واقعی بر حسب درجه سانتیگراد
- RH = رطوبت نسبی واقعی بر حسب درصد (%)
- m = 17.62
- T n = 243.12 درجه سانتیگراد
- A = 6.112 hPa
شما هم باید مطالعه کنید
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Environment sensors\n\nThe Android platform provides four sensors that let you monitor various environmental properties.\nYou can use these sensors to monitor relative ambient humidity, illuminance, ambient pressure, and\nambient temperature near an Android-powered device. All four environment sensors are hardware-based\nand are available only if a device manufacturer has built them into a device. With the exception of\nthe light sensor, which most device manufacturers use to control screen brightness, environment\nsensors are not always available on devices. Because of this, it's particularly important that you\nverify at runtime whether an environment sensor exists before you attempt to acquire data from\nit.\n\nUnlike most motion sensors and position sensors, which return a multi-dimensional array of sensor\nvalues for each [SensorEvent](/reference/android/hardware/SensorEvent), environment sensors return a single sensor\nvalue for each data event. For example, the temperature in °C or the pressure in hPa.\nAlso, unlike motion sensors and position sensors, which often require high-pass or low-pass\nfiltering, environment sensors do not typically require any data filtering or data processing. Table\n1 provides a summary of the environment sensors that are supported on the Android platform.\n\n\n**Table 1.** Environment sensors that are supported on the Android platform.\n\n| Sensor | Sensor event data | Units of measure | Data description |\n|-----------------------------------------------------------------------------------------|-------------------|------------------|----------------------------|\n| [TYPE_AMBIENT_TEMPERATURE](/reference/android/hardware/Sensor#TYPE_AMBIENT_TEMPERATURE) | `event.values[0]` | °C | Ambient air temperature. |\n| [TYPE_LIGHT](/reference/android/hardware/Sensor#TYPE_LIGHT) | `event.values[0]` | lx | Illuminance. |\n| [TYPE_PRESSURE](/reference/android/hardware/Sensor#TYPE_PRESSURE) | `event.values[0]` | hPa or mbar | Ambient air pressure. |\n| [TYPE_RELATIVE_HUMIDITY](/reference/android/hardware/Sensor#TYPE_RELATIVE_HUMIDITY) | `event.values[0]` | % | Ambient relative humidity. |\n| [TYPE_TEMPERATURE](/reference/android/hardware/Sensor#TYPE_TEMPERATURE) | `event.values[0]` | °C | Device temperature.^1^ |\n\n^**1**^ Implementations vary from device to\ndevice. This sensor was deprecated in Android 4.0 (API Level 14).\n\nUse the light, pressure, and temperature sensors\n------------------------------------------------\n\nThe raw data you acquire from the light, pressure, and temperature sensors usually requires no\ncalibration, filtering, or modification, which makes them some of the easiest sensors to use. To\nacquire data from these sensors you first create an instance of the [SensorManager](/reference/android/hardware/SensorManager) class, which you can use to get an instance of a physical sensor.\nThen you register a sensor listener in the [onResume()](/reference/android/app/Activity#onResume()) method, and start handling incoming sensor data in the [onSensorChanged()](/reference/android/hardware/SensorEventListener#onSensorChanged(android.hardware.SensorEvent)) callback method. The\nfollowing code shows you how to do this: \n\n### Kotlin\n\n```kotlin\nclass SensorActivity : Activity(), SensorEventListener {\n\n private lateinit var sensorManager: SensorManager\n private var pressure: Sensor? = null\n\n public override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n setContentView(R.layout.main)\n\n // Get an instance of the sensor service, and use that to get an instance of\n // a particular sensor.\n sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager\n pressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)\n }\n\n override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {\n // Do something here if sensor accuracy changes.\n }\n\n override fun onSensorChanged(event: SensorEvent) {\n val millibarsOfPressure = event.values[0]\n // Do something with this sensor data.\n }\n\n override fun onResume() {\n // Register a listener for the sensor.\n super.onResume()\n sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL)\n }\n\n override fun onPause() {\n // Be sure to unregister the sensor when the activity pauses.\n super.onPause()\n sensorManager.unregisterListener(this)\n }\n}\n```\n\n### Java\n\n```java\npublic class SensorActivity extends Activity implements SensorEventListener {\n private SensorManager sensorManager;\n private Sensor pressure;\n\n @Override\n public final void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.main);\n\n // Get an instance of the sensor service, and use that to get an instance of\n // a particular sensor.\n sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);\n pressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);\n }\n\n @Override\n public final void onAccuracyChanged(Sensor sensor, int accuracy) {\n // Do something here if sensor accuracy changes.\n }\n\n @Override\n public final void onSensorChanged(SensorEvent event) {\n float millibarsOfPressure = event.values[0];\n // Do something with this sensor data.\n }\n\n @Override\n protected void onResume() {\n // Register a listener for the sensor.\n super.onResume();\n sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL);\n }\n\n @Override\n protected void onPause() {\n // Be sure to unregister the sensor when the activity pauses.\n super.onPause();\n sensorManager.unregisterListener(this);\n }\n}\n```\n\nYou must always include implementations of both the [onAccuracyChanged()](/reference/android/hardware/SensorEventListener#onAccuracyChanged(android.hardware.Sensor, int)) and [onSensorChanged()](/reference/android/hardware/SensorEventListener#onSensorChanged(android.hardware.SensorEvent)) callback methods. Also, be\nsure that you always unregister a sensor when an activity pauses. This prevents a sensor from\ncontinually sensing data and draining the battery.\n\nUse the humidity sensor\n-----------------------\n\nYou can acquire raw relative humidity data by using the humidity sensor the same way that you use\nthe light, pressure, and temperature sensors. However, if a device has both a humidity sensor\n([TYPE_RELATIVE_HUMIDITY](/reference/android/hardware/Sensor#TYPE_RELATIVE_HUMIDITY)) and a temperature sensor ([TYPE_AMBIENT_TEMPERATURE](/reference/android/hardware/Sensor#TYPE_AMBIENT_TEMPERATURE)) you can use these two data streams to calculate\nthe dew point and the absolute humidity.\n\n#### Dew point\n\nThe dew point is the temperature at which a given volume of air must be cooled, at constant\nbarometric pressure, for water vapor to condense into water. The following equation shows how you\ncan calculate the dew point:\n\nWhere,\n\n- t~d~ = dew point temperature in degrees C\n- t = actual temperature in degrees C\n- RH = actual relative humidity in percent (%)\n- m = 17.62\n- T~n~ = 243.12\n\n#### Absolute humidity\n\nThe absolute humidity is the mass of water vapor in a given volume of dry air. Absolute\nhumidity is measured in grams/meter^3^. The following equation shows how you\ncan calculate the absolute humidity:\n\nWhere,\n\n- d~v~ = absolute humidity in grams/meter^3^\n- t = actual temperature in degrees C\n- RH = actual relative humidity in percent (%)\n- m = 17.62\n- T~n~ = 243.12 degrees C\n- A = 6.112 hPa\n\n### You should also read\n\n- [Sensors](/guide/topics/sensors)\n- [Sensors Overview](/guide/topics/sensors/sensors_overview)\n- [Position Sensors](/guide/topics/sensors/sensors_position)\n- [Motion Sensors](/guide/topics/sensors/sensors_motion)"]]