Android 플랫폼은 다양한 환경 속성을 모니터링할 수 있는 센서 4개를 제공합니다. 이러한 센서를 사용하여 상대 주변 습도, 조도, 주변 압력 및 80도. 4개의 환경 센서는 모두 하드웨어 기반입니다 기기 제조업체에서 기기에 내장한 경우에만 사용할 수 있습니다. 단, 대부분의 기기 제조업체가 화면 밝기, 주변 환경을 제어하는 데 사용하는 광센서 기기에서 센서를 항상 사용할 수 있는 것은 아닙니다. 그렇기 때문에 환경 센서의 존재 여부를 런타임에 확인( 있습니다.
센서의 다차원 배열을 반환하는 대부분의 움직임 감지 센서 및 위치 센서와 달리
값이 SensorEvent
이므로 환경 센서는
값을 정의합니다. 예를 들어 온도는 °C, 압력은 hPa로 반환됩니다.
또한 종종 고역 전달 또는 저역 통과를 요구하는 움직임 감지 센서 및 위치 센서와는 달리
필터링, 환경 센서에는 일반적으로 데이터 필터링이나 데이터 처리가 필요하지 않습니다. 테이블
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) } }
자바
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
)가 있다면 이 두 데이터 스트림을 사용해
이슬점과 절대 습도.
이슬점
이슬점은 주어진 양의 공기가 일정하게 냉각되어야 하는 온도입니다. 수증기가 물로 응축되는 기압 다음 식은 이슬점을 계산할 수 있습니다.
여기서
- 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