يوفر نظام Android الأساسي أربعة أجهزة استشعار تتيح لك مراقبة الخصائص البيئية المختلفة. يمكنك استخدام أدوات الاستشعار هذه لمراقبة الرطوبة النسبية والإضاءة والضغط المحيط ودرجة الحرارة في البيئة المحيطة بالقرب من جهاز يعمل بنظام التشغيل Android. جميع مستشعرات البيئة الأربعة تعتمد على الأجهزة ولا تتوفر إلا إذا قامت الشركة المصنعة للجهاز ببنائها في الجهاز. باستثناء مستشعر الضوء، الذي تستخدمه معظم الشركات المصنّعة للأجهزة للتحكم في سطوع الشاشة، لا تتوفر أجهزة استشعار البيئة دائمًا على الأجهزة. ولهذا السبب، من المهم على وجه الخصوص أن تتحقّق في وقت التشغيل من وجود مستشعر للبيئة قبل محاولة الحصول على البيانات منه.
على عكس معظم أجهزة استشعار الحركة وأجهزة استشعار الموضع التي تعرض مجموعة متعددة الأبعاد من قيم أداة الاستشعار لكل SensorEvent
، تعرض أجهزة استشعار البيئة قيمة أداة استشعار واحدة لكل حدث بيانات. على سبيل المثال، درجة الحرارة بالدرجة المئوية أو الضغط بالهلوسة البالونية.
وعلى عكس أجهزة استشعار الحركة وأجهزة استشعار الموضع التي تتطلب في كثير من الأحيان تصفية التمرير العالي أو المنخفض، لا تتطلب أجهزة استشعار البيئة عادةً أي فلترة للبيانات أو معالجة للبيانات. يقدم الجدول
1 ملخصًا لأدوات استشعار البيئة المتوافقة مع نظام Android الأساسي.
الجدول 1. أدوات استشعار البيئة المتوافقة مع نظام Android الأساسي
أداة استشعار | بيانات أحداث أجهزة الاستشعار | وحدات القياس | وصف البيانات |
---|---|---|---|
TYPE_AMBIENT_TEMPERATURE |
event.values[0] |
°م | درجة حرارة الهواء المحيط: |
TYPE_LIGHT |
event.values[0] |
لُكس | السطوع |
TYPE_PRESSURE |
event.values[0] |
هيكتو باسكال أو ميللي بار | ضغط الهواء المحيط |
TYPE_RELATIVE_HUMIDITY |
event.values[0] |
% | الرطوبة النسبية المحيطة. |
TYPE_TEMPERATURE |
event.values[0] |
°م | درجة حرارة الجهاز.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) = تينيسي · (ln(RH/100) + m·t/(T_n+t
))/(م - [ln(RH/100%) + m·t/(T_n+t)])](https://developer.android.com/static/images/guide/topics/sensors/dew_point.png?authuser=6&hl=ar)
أين،
- td = درجة حرارة نقطة الندى بالدرجات C
- t = درجة الحرارة الفعلية بالدرجات C
- RH = الرطوبة النسبية الفعلية بالنسبة المئوية (%)
- م = 17.62
- Tn = 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=6&hl=ar)
أين،
- dv = الرطوبة المطلقة بالجرام/المتر3
- t = درجة الحرارة الفعلية بالدرجات C
- RH = الرطوبة النسبية الفعلية بالنسبة المئوية (%)
- م = 17.62
- Tn = 243.12 درجة مئوية
- A = 6.112 هكتو باسكال