แพลตฟอร์ม 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()
โค้ดต่อไปนี้แสดงวิธีดำเนินการ
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); } }
คุณต้องมีการใช้งานทั้งเมธอด 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.com/static/images/guide/topics/sensors/dew_point.png?authuser=8&hl=th)
ที่ไหน
- td = อุณหภูมิจุดน้ำค้างเป็นองศา C
- t = อุณหภูมิจริงเป็นองศา C
- RH = ความชื้นสัมพัทธ์ตามจริงในหน่วยเปอร์เซ็นต์ (%)
- ม. = 17.62
- = 243.12
ความชื้นสัมบูรณ์
ความชื้นสัมบูรณ์คือมวลไอน้ำในปริมาณอากาศแห้งที่ระบุ สัมบูรณ์ ความชื้นวัดเป็นหน่วยกรัม/เมตร3 สมการต่อไปนี้จะแสดงวิธีที่คุณ สามารถคำนวณความชื้นสัมบูรณ์ได้
![d_v(t,RH) = (RH/100) · A · exp(m·
t/(T_n+t)/(273.15 + t)](https://developer.android.com/static/images/guide/topics/sensors/absolute_humidity.png?authuser=8&hl=th)
ที่ไหน
- dv = ความชื้นสัมบูรณ์เป็นกรัม/เมตร3
- t = อุณหภูมิจริงเป็นองศา C
- RH = ความชื้นสัมพัทธ์ตามจริงในหน่วยเปอร์เซ็นต์ (%)
- ม. = 17.62
- Tn = 243.12 องศาC
- A = 6.112 hPa