Android 플랫폼은 다양한 환경 속성을 모니터링할 수 있는 센서 4개를 제공합니다. 이러한 센서를 사용하여 Android 지원 기기 근처의 상대 주변 습도, 조도, 주변 압력 및 주변 온도를 모니터링할 수 있습니다. 환경 센서 4 개는 모두 하드웨어 기반이며 기기 제조업체가 기기에 내장한 경우에만 사용할 수 있습니다. 대부분의 기기 제조업체가 화면 밝기를 제어하는 데 사용하는 조도 센서 외에 기기에서 항상 환경 센서를 사용할 수 있는 것은 아닙니다. 따라서 런타임에 환경 센서로부터 데이터를 획득하기 전에 환경 센서가 존재하는지 확인하는 것이 특히 중요합니다.
SensorEvent
별로 센서 값의 다차원 배열을 반환하는 대부분의 움직임 감지 센서 및 위치 센서와 달리 환경 센서는 데이터 이벤트별로 단일 센서 값을 반환합니다. 예를 들어 온도는 °C, 압력은 hPa로 반환됩니다.
또한 일반적으로 고역 또는 저역 통과 필터링이 필요한 움직임 감지 센서 및 위치 센서와 달리 환경 센서에는 일반적으로 데이터 필터링이나 데이터 처리가 필요하지 않습니다. 표 1에서는 Android 플랫폼에서 지원되는 환경 센서를 간략히 설명합니다.
표 1. Android 플랫폼에서 지원되는 환경 센서
센서 | 센서 이벤트 데이터 | 측정 단위 | 데이터 설명 |
---|---|---|---|
TYPE_AMBIENT_TEMPERATURE |
event.values[0] |
°C | 주변 기온. |
TYPE_LIGHT |
event.values[0] |
lx | 조도. |
TYPE_PRESSURE |
event.values[0] |
hPa 또는 mbar | 주변 기압. |
TYPE_RELATIVE_HUMIDITY |
event.values[0] |
% | 주변 상대 습도. |
TYPE_TEMPERATURE |
event.values[0] |
°C | 기기 온도.1 |
1 구현 방식은 기기마다 다릅니다. 이 센서는 Android 4.0(API 레벨 14)에서 지원 중단되었습니다.
조도, 압력 및 온도 센서 사용
조도, 압력 및 온도 센서에서 획득한 원시 데이터는 일반적으로 보정, 필터링, 수정이 필요하지 않으므로 사용하기 아주 쉽습니다. 이러한 센서에서 데이터를 획득하려면 먼저 SensorManager
클래스의 인스턴스를 만든 다음 이를 사용하여 실제 센서의 인스턴스를 가져올 수 있습니다.
그런 다음 onResume()
메서드에 센서 리스너를 등록하고 onSensorChanged()
콜백 메서드에서 수신되는 센서 데이터를 처리하기 시작합니다. 다음 코드에서 이 작업을 실행하는 방법을 보여줍니다.
Kotlin
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) } }
Java
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://android-dot-devsite-v2-prod.appspot.com/static/images/guide/topics/sensors/dew_point.png?hl=ko)
여기서
- td = 이슬점 온도(˚C)
- t = 실제 온도(˚C)
- RH = 실제 상대 습도(%)
- m = 17.62
- Tn = 243.12
절대 습도
절대 습도는 주어진 양의 건조 공기에 포함된 수증기의 질량입니다. 절대 습도는 그램/미터3 단위로 측정됩니다. 다음 식은 절대 습도를 계산하는 방법을 보여줍니다.

여기서
- dv = 절대 습도(그램/미터3)
- t = 실제 온도(˚C)
- RH = 실제 상대 습도(%)
- m = 17.62
- Tn = 243.12˚C
- A = 6.112 hPa