Android Sensors

سلسلة Android Sensors بالعربية الدرس الأول

السلام عليكم .. اخوتي واخواتي المبرمجين العرب من كل مكان

اليوم نتطرق الى موضوع جديد الا وهو ” الحساسات الموجودة باجهزة الاندرويد وكيفية برمجتها والتعامل معها”

في البداية يجب ان تعرف ما هو  Sensor (الحساس)

الحساس هو اي رد فعل لمؤثر معين

مثال على ذلك صديقك عندما تنادي عليه , سيكون رد فعله الالتفات لك

فصديقك لدية حساس الا وهو الاذن (حاسة السمع) التقط اشارات صوتك ف مخ صديقك ترجم هذة الاشارات ليعرف صديقك انك تنادية

Sensors In Android – الحساسات فى اجهزة الاندرويد

 معظم اجهزة الاندرويد تحتوي بداخلها علي Sensor بل الكثير من الحساسات وليس حساس واحد

منها حساس الضغط الجوي , شدة الاضائة , سرعة الحركة , الجاذبية , الدوران ..الخ

ومنصة الاندرويد تدعم ثلاث فئات واسعة من اجهزة الاستشعار

  • اجهزة استشعار الحركة (Motion sensors)

هذة المجموعة من ال Sensors تستخدم لقياس التسارع

وتشمل هذة الفئة مجموعة من الحساسات وهم

Accelerometers

Gravity sensors

Gyroscopes

Rotational vector sensors

  • اجهزة استشعار البيئة (Environmental sensors)

هذة المجموعة من ال Sensors تستخدم لقياس عوامل البيئة المختلفة , مثل

ambient air temperature  درجة حرارة الهواء

pressure الضغط الجوي

illumination شدة الاضائة

humidity الرطوبة

  • اجهزة استشعار المكان (Position sensors)

هذة المجموعة من ال Sensors تستخدم فى تحديد المكان الفعلي للجهاز

وتشمل هذة الفئة مجسات التوجية والمغناطيسية

بامكانك الوصول الى الحساسات الموجودة فى الجهاز برمجيا عن طريق
Android Sensor Framework وهو عباره عن مجموعة من الكلاسات التى يوفرها لك نظام أندرويد
بداخل هذا الـFramework تجد  العديد من الكلاسات التي تساعدك فى الكشف عن الحساسات الموجودة بالجهاز والتعامل معها .
مثال على ذلك يمكنك استخدام ال Sensor Framework
– لتحديد جميع ال Sensor المتوفرة فى الجهاز
– تحديد امكانيات ال Sensor مثل اقصي حد يصل الية الحساس

يندرج انواع الحساسات تحت نوعين

فى الاساس هي hardware

ويوجد حساسات اخري software

واليوم سوف اتحدث عن ملخص للحساسات الموجودة فى اجهزة الاندرويد , ولكن مستقبلا سوف اشرح كل منهم على حدة وكيفية استخدامة فى التطبيقات الخاصة بنا

الجدول التالي به معظم الحساسات (Sensors) و الاستخدامات الشائعة لكل حساس

حساسات الاندرويد وانواعهم

والجدول التالي يوضح توافر الحساسات فى ال android platforms

Sensor availability by platform.
Sensor availability by platform.

ملحوظة : n/a فى الجدول تعني not available


كيفية الحصول على قائمة بال Sensors المتاحة فى احد الاجهزة

كما ذكرنا أن Android sensor framework  مزود ب methods و classes مختلفة التي تجعلك بكل سهولة تحديد الحساسات المتوفرة في الجهاز فى مرحلة ال runtime  (أثناء عمل الجهاز )

وسوف نقوم بشرح إنشاء  تطبيق بسيط للحصول على قائمة من ال sensors الموجوده بالموبايل  الذى يتم فتح التطبيق من خلاله  .

اولا قمنا بعمل reference (متغير ) من Sensor Service  ليمسك الناتج عن طريق استدعاء الميثود getSystemService()  واعطائها البرامتر SENSOR_SERVICE والتى سوف تقوم بارجاع قيمة من نوع Sensor Manager

private SensorManager mSensorManager;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

والآن يمكنك الحصول علي قائمة الSensors المتوفرة علي هيئة ليست من النوع Sensor عن طريق استدعاء الميثود getSensorList() واعطائها الثابت TYPE_ALL للعودة بجميع ال Sensors الموجودة بالجهاز

List<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);

ويمكن عرض اليست عن طريق استخدام ال for loop

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
List<Sensor> list = mSensorManager.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: list){
    //print sensor info
}

الآن سوف ننشىء التطبيق كاملا سويا

قم بإنشاء مشروع جديد على الاندرويد ستوديو وقم بتسميتة باي اسم تحب

قم بالذهاب الى ملف ال xml الخاص بتصميم ال Activity

وانشاء TextView لعرض نص بها

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context=".MainActivity"
   android:transitionGroup="true">
  
   <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView2"
        android:layout_below="@+id/imageView"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

الآن اذهب الى ملف الجافا الخاص بالاكتفتي هذا MainActivity.java واجعلة بهذا الشكل مع تغيير الباكاج فى السطر الاول بال package name الخاصة بمشروعك 

MainActivity.java

package com.example.hendiware.myapplication;

import android.app.Activity;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import java.util.List;
import android.hardware.Sensor;
import android.hardware.SensorManager;

public class MainActivity extends Activity {
   TextView tv1=null;
   private SensorManager mSensorManager;
   @Override
   
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      tv1 = (TextView) findViewById(R.id.textView2);
      tv1.setVisibility(View.GONE);
      
      mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
      List<Sensor> mList= mSensorManager.getSensorList(Sensor.TYPE_ALL);
      
      for (int i = 0; i < mList.size(); i++) {
         tv1.setVisibility(View.VISIBLE);
         tv1.append("\n" + mList.get(i).getName() + "\n" + mList.get(i).getVendor() + "\n" + mList.get(i).getVersion());
      }
   }
  
}

الآن قم بتشغيل المشروع على جهازك عن طريق الضغط على زر run فى الأندرويد ستوديو

وستري الناتج هكذا

بالطبع سيختلف الناتج من جهاز لاخر حسب الحساسات الموجودة بالجهاز

ارجو ان اكون قد وفقت ف شرحي لهذة المقدمة فى ال Android Sensors وان يكون الشرح مبسط  واذا كان لديك استفسار عن اى شىء فى هذه التدوينة قم بسؤاله فى تعليق .

انتظروني فى الدروس القادمة سوف يتم شرح كل Sensor على حدة عن طريق مشروع بسيط

منتظر ردودكم على التدوينة ورأيكم فى الشرح .

السابق
Android Webservices بالعربية – الدرس الثالث
التالي
Android Webservices بالعربية – الدرس الرابع

7 تعليقات

أضف تعليقا

  1. Ismail Abozeed قال:

    يعني انا دلوقتي لو بعمل برنامج علي الطقس ايها أفضل الحساسات الموجوده بالجهاز ام استدعاء الطقس من مواقع خارجية.

    1. Basem Nasr قال:

      بالتاكيد الافضل استخدام المكتابات المتوفرة من المواقع , IOS تستخدم احصائيات Yahoo للطقس وليس اى حساس مدمج بها

    2. Basem Nasr قال:

      لكي لا تهلك موارد الجهاز

  2. Mahmoud abdelwahab قال:

    شرح واسلوب اكترمن رائع بارك الله فيك يا اخى
    بس سؤال ال عندو API10 لو عايز يعمل تطبيق يقيس درجه الحراره والرطوبه هيجربه كيف انا مشغل الموبيل ك emulator

    1. Basem Nasr قال:

      ممكن حضرتك تنفذ الشرح وتعرف اية ال Sensors المتوفرين عندك فى الجهاز

  3. Mahmoud Reda قال:

    شرح واسلوب اكترمن رائع بارك الله فيك يا اخى

  4. اذا السائق شغل السيارة او لا كيف السنسور بدو يعرف هالشي وشو افضل سنسور لهاد الشي والكود

اترك تعليقاً

This site uses Akismet to reduce spam. Learn how your comment data is processed.