Android प्लैटफ़ॉर्म में चार सेंसर होते हैं. इनकी मदद से, पर्यावरण से जुड़ी अलग-अलग चीज़ों की निगरानी की जा सकती है. इन सेंसर का इस्तेमाल करके, आस-पास की नमी, रोशनी, आस-पास के दबाव, और Android पर चलने वाले डिवाइस के आस-पास का तापमान. सभी चार एनवायरमेंट सेंसर, हार्डवेयर पर आधारित होते हैं और ये सिर्फ़ तब उपलब्ध होते हैं, जब डिवाइस बनाने वाली कंपनी ने इन्हें डिवाइस में बनाया हो. इन्हें छोड़कर लाइट सेंसर, जिसका इस्तेमाल ज़्यादातर डिवाइस बनाने वाली कंपनियां, स्क्रीन की चमक और आस-पास की चीज़ों को कंट्रोल करने के लिए करती हैं डिवाइसों पर सेंसर हमेशा उपलब्ध नहीं होते. इस वजह से, यह ज़रूरी है कि इससे पहले कि आप डेटा पाने की कोशिश करें, रनटाइम के दौरान यह पुष्टि कर लें कि एनवायरमेंट सेंसर मौजूद है या नहीं इसे.
ज़्यादातर मोशन सेंसर और पोज़िशन सेंसर के उलट, जो सेंसर का मल्टी-डाइमेंशनल कलेक्शन दिखाते हैं
हर 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 (एपीआई लेवल 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 · (lt(RH/100) + m·t/(T_n+t)
))/(मी॰ - [nn(RH/100%) + m·t/(T_n+t)])](https://developer.android.google.cn/static/images/guide/topics/sensors/dew_point.png?authuser=7&hl=hi)
कहां,
- td = डिग्री C में ओसांक का तापमान
- t = डिग्री C में असल तापमान
- RH = प्रतिशत में असल ह्यूमिडिटी (%)
- मी॰ = 17.62
- n = 243.12
कुल नमी
पूरी नमी का मतलब है, बताई गई मात्रा में मौजूद सूखी हवा में मौजूद वाष्प का द्रव्यमान. कुल नमी को ग्राम/मीटर3 में मापा जाता है. इस समीकरण से पता चलता है कि निरपेक्ष नमी का हिसाब लगाया जा सकता है:
![d_v(t,RH) = (RH/100) · A · exp(m·)
t/(T_n+t)/(273.15 + t)](https://developer.android.google.cn/static/images/guide/topics/sensors/absolute_humidity.png?authuser=7&hl=hi)
कहां,
- dv = ग्राम/मीटर में पूरी नमी3
- t = डिग्री C में असल तापमान
- RH = प्रतिशत में असल ह्यूमिडिटी (%)
- मी॰ = 17.62
- Tn = 243.12 डिग्री C
- A = 6.112 एचपीए