แพลตฟอร์ม Android มีเซ็นเซอร์ 4 ตัวที่ช่วยให้คุณตรวจสอบคุณสมบัติด้านสิ่งแวดล้อมที่หลากหลายได้ คุณสามารถใช้เซ็นเซอร์เหล่านี้เพื่อตรวจดูความชื้นสัมพัทธ์ ความสว่าง ความดันบรรยากาศ และ อุณหภูมิแวดล้อมใกล้กับอุปกรณ์ที่ใช้ Android เซ็นเซอร์ตรวจจับสภาพแวดล้อมทั้ง 4 ตัวทำงานด้วยฮาร์ดแวร์ และพร้อมใช้งานก็ต่อเมื่อผู้ผลิตอุปกรณ์ได้ผสานรวมอุปกรณ์ไว้ ยกเว้นในกรณี เซ็นเซอร์แสง ซึ่งผู้ผลิตอุปกรณ์ส่วนใหญ่ใช้เพื่อควบคุมความสว่างและสภาพแวดล้อมของหน้าจอ เซ็นเซอร์อาจไม่พร้อมใช้งานในอุปกรณ์เสมอไป ด้วยเหตุนี้ คุณจึงจำเป็นต้อง ตรวจสอบขณะรันไทม์ว่ามีเซ็นเซอร์สภาพแวดล้อมหรือไม่ก่อนที่คุณจะพยายามดึงข้อมูลจาก ได้
ต่างจากเซ็นเซอร์ตรวจจับการเคลื่อนไหวและเซ็นเซอร์ตำแหน่งส่วนใหญ่ ซึ่งแสดงผลเซ็นเซอร์แบบหลายมิติ
ค่าสำหรับ SensorEvent
แต่ละรายการ เซ็นเซอร์สภาพแวดล้อมจะแสดงเซ็นเซอร์เดียว
สําหรับเหตุการณ์ข้อมูลแต่ละเหตุการณ์ เช่น อุณหภูมิในหน่วย°C หรือความดันในหน่วย hPa
นอกจากนี้ ต่างจากเซ็นเซอร์ตรวจจับการเคลื่อนไหวและเซ็นเซอร์ตำแหน่ง ซึ่งมักต้องใช้ความถี่สูงหรือต่ำ
ในการกรองข้อมูลทั่วไป เซ็นเซอร์ตรวจจับสภาพแวดล้อมจึงไม่จําเป็นต้องกรองข้อมูลหรือประมวลผลข้อมูล ตาราง
1 จะให้ข้อมูลสรุปเกี่ยวกับเซ็นเซอร์สภาพแวดล้อมที่แพลตฟอร์ม Android รองรับ
ตาราง 1 เซ็นเซอร์สภาพแวดล้อมที่แพลตฟอร์ม Android รองรับ
เซ็นเซอร์ | ข้อมูลเหตุการณ์เซ็นเซอร์ | หน่วยวัด | คำอธิบายข้อมูล |
---|---|---|---|
TYPE_AMBIENT_TEMPERATURE |
event.values[0] |
°C | อุณหภูมิของอากาศแวดล้อม |
TYPE_LIGHT |
event.values[0] |
ลักซ์ | ความสว่าง |
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
ซึ่งสามารถใช้เพื่อรับอินสแตนซ์ของเซ็นเซอร์ทางกายภาพได้
จากนั้นลงทะเบียน Listener เซ็นเซอร์ในเมธอด onResume()
และเริ่มจัดการข้อมูลเซ็นเซอร์ที่เข้ามาในเมธอด Callback 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);
}
}
คุณต้องมีการใช้งานทั้งเมธอด Callback 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.google.cn/static/images/guide/topics/sensors/dew_point.png?hl=th)
ที่ไหน
- td = อุณหภูมิจุดน้ำค้างเป็นองศา C
- t = อุณหภูมิจริงเป็นองศา C
- RH = ความชื้นสัมพัทธ์ตามจริงในหน่วยเปอร์เซ็นต์ (%)
- ม. = 17.62
- = 243.12
ความชื้นสัมบูรณ์
ความชื้นสัมบูรณ์คือมวลไอน้ำในปริมาณอากาศแห้งที่ระบุ สัมบูรณ์ ความชื้นวัดเป็นหน่วยกรัม/เมตร3 สมการต่อไปนี้จะแสดงวิธีที่คุณ สามารถคำนวณความชื้นสัมบูรณ์ได้

ที่ไหน
- dv = ความชื้นสัมบูรณ์เป็นกรัม/เมตร3
- t = อุณหภูมิจริงเป็นองศา C
- RH = ความชื้นสัมพัทธ์ตามจริงในหน่วยเปอร์เซ็นต์ (%)
- ม. = 17.62
- Tn = 243.12 องศาC
- A = 6.112 hPa