آموزش سنسورها (Sensor) - در برنامه نویسی اندروید

سنسورها

اکثر دستگاه‌های اندرویدی دارای Sensorهای داخلی هستند که حرکت، جهت‌گیری و شرایط محیطی مختلف را اندازه‌گیری می‌کنند. پلتفرم اندروید از سه دسته وسیع از Sensorها پشتیبانی می کند:

  • سنسور های حرکت
  • Sensorهای محیطی
  • سنسورهای موقعیت

برخی از سنسورها مبتنی بر سخت افزار و برخی از سنسورهای مبتنی بر نرم افزار هستند. سنسور هر چه که باشد، اندروید به ما اجازه می‌دهد تا داده‌های خام را از این سنسورها دریافت کنیم و از آن در برنامه خود استفاده کنیم. برای هر کدام از Sensorها اندروید چند کلاس در اختیار ما قرار می دهد.

نحوه استفاده از Sensorها

اندروید کلاس های SensorManager و Sensor را برای استفاده از Sensorهای حسگری در پروژه های ما ارائه می دهد. برای استفاده از حسگرها، اولین کاری که باید انجام دهید این است که شی کلاس SensorManager را نمونه سازی کنیم. به این صورت :

SensorManager sMgr;
sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);

کار بعدی که باید انجام دهید این است که با فراخوانی متد getDefaultSensor() از کلاس SensorManager، شی کلاس Sensor را نمونه سازی کنید. به این شکل :

Sensor light;
light = sMgr.getDefaultSensor(Sensor.TYPE_LIGHT);

بعد از اینکه کلاس Sensor ایجاد شد، باید listener آن را ثبت کنید و دو متد onAccuracyChanged و onSensorChanged را override کنید. به کدهای زیر دقت کنید:

sMgr.registerListener(this, light,SensorManager.SENSOR_DELAY_NORMAL);
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

public void onSensorChanged(SensorEvent event) {
}

دریافت لیست سنسورهای موجود در دستگاه

می توانید با فراخوانی متد getSensorList لیستی از سنسورهای پشتیبانی شده توسط دستگاه خود را دریافت کنید، که این لیست حاوی نام و شماره نسخه و اطلاعات مهمی از سنسورها میباشد که درون تلفن موجود میباشد. پس می توانید لیست را برای دریافت اطلاعات تکرار کنید. روش استفاده را در پایین آورده ایم:

sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);
List<Sensor> list = sMgr.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: list){
}

متدهای مهم استفاده از Sensorها

جدا از این متد ها، متدهای دیگری نیز توسط کلاس SensorManager برای مدیریت چارچوب سنسورها ارائه شده است. این متدها در پایین ذکر شده است:

متد و توضیحات ردیف
getDefaultSensor(int type)

این متد سنسور پیش فرض را برای یک نوع معین را دریافت می کند.

1
getInclination(float[] I)

متد بالا زاویه شیب ژئومغناطیسی را بر حسب رادیان از ماتریس شیب محاسبه می کند.

2
registerListener(SensorListener listener, int sensors, int rate)

با این متد میتوانید یک listener برای سنسور ثبت کنید.

3
unregisterListener(SensorEventListener listener, Sensor sensor)

در این متد میتوان یک listenerی را برای حسگرهاثبت شده است را لغو ثبت کرد.

4
getOrientation(float[] R, float[] values)

برای محاسبه چرخش جهت گیری دستگاه بر اساس ماتریس از این متد استفاده میشود.

5
getAltitude(float p0, float p)

با متد بالا میتوان ارتفاع را بر حسب متر از فشار اتمسفر و فشار در سطح دریا محاسبه کرد.

6

مثال

در این مقاله مثالی آورده ایم که استفاده از کلاس SensorManager را نشان می دهد. این برنامه به شما امکان می دهد لیست سنسورهای دستگاه خود را مشاهده و اطلاعات آن استفاده کنید. برای آزمایش این مثال، می‌توانید آن را روی یک دستگاه واقعی و شبیه‌ساز اجرا کنید.

توضیحات مرحله
ابتدا یک پروژه جدید در اندروید استودیو با یک پکیج دلخواه ایجاد کنید و ادامه مراحل را دنبال کنید. 1
کدهای درون فایل MainActivity.class را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 2
کدهای درون فایل activity_main.xml را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 3
برنامه را بر روی یک تلفن واقعی یا شبیه ساز اجرا کنید و تست را انجام بدهید. 4

فایل MainActivity.java

package com.foray.articlelib;

import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv1 = findViewById(R.id.textView2);
        tv1.setVisibility(View.GONE);

        SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        List<Sensor> mList= mSensorManager.getSensorList(Sensor.TYPE_ALL);

        for (int i = 1; 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());
        }
    }


}

 

کدهای فایل activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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:padding="24dp"
    android:transitionGroup="true"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="سنسورها"
        android:textSize="35dp" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textview"
        android:layout_centerHorizontal="true"
        android:text="7Cloner.com"
        android:textColor="#009688"
        android:textSize="35dp" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="160dp"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:src="@drawable/abc"
        android:theme="@style/Base.TextAppearance.AppCompat" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:text="New Text" />

</RelativeLayout>

 

پس از اجرا میتوانید نتیجه کار این کدها را ببینید:

AndroidSensors

بعد از این که کدهای بالا را در پروژه خود اضافه کردید, میتوانید آنرا اجرا کنید و نتیجه آن را مشاهده کنید. در این تست میتوانید تمامی حرکت های لازم محاسبه و زیر نظر بگیرید.

قیمت آموزش
رایگان
نوع دسترسی
رایگان

این مقاله در حال حاضر تنها به روش رایگان در دسترس می باشد.

ناصر خالدی
مدرس دوره

ناصر خالدی

مهندس شبکه, امنیت, برنامه نویسی تلفن های هوشمند, طراح وب سایت و متخصص هوش مصنوعی

گفتگوی برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن

دوره های پیشنهادی

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر نیاز است تا ابتدا وارد سایت شوید.

هیچ نظری ارسال نشده است.

مقالات پیشنهادی

نود جی اس

توسعه دهندگان نود جی اس, زبان جاوا اسکریپت را از یک زبان قابل اجرا در مرورگر خارج کرده و به زبانی تبدیل کردن که بتوان آن را بصورت یه اپلیکیشن مستفل اجرا کرد و ...


۶۶۰
۰
۱۲ آذر ۱۳۹۹

جاوا اسکریپت

جاوا اسکریپت یک زبان پویا و محبوب مبتنی بر شیء, داینامیک و مفسری می باشد. این زبان برای برنامه نویسی سمت سرور و کلاینت استفاده میشود که ...


۶۲۶
۰
۱۳ آذر ۱۳۹۹

پی اچ پی - PHP

با استفاده از این زبان می توان وب سایت های پویا طراحی کرد, این زبان می تواند با HTML ادغام شود, در حقیقت یک زبان اسکریپتی متن باز و رایگان است. یعنی زمانی که سرور درخواست ...


۶۸۷
۰
۱۳ آذر ۱۳۹۹

درباره فایل Robots.txt

این فایل ربات های خزنده موتور های جستجو را راهنمایی می کنند و به آنان می فهماند که چه دایرکتوری و لینک هایی قابل بررسی و چه دایرکتوری و لینک هایی غیرقابل برررسی می باشند...


۵۳۸
۰
۲ دی ۱۳۹۹