آموزش سنسورها (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

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

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

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

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

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

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

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

ناصر خالدی

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

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

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

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

هوش مصنوعی

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


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

نود جی اس

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


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

بک لینک چیست؟

بک لینک (Back Link) به لینک دادن یک سایت به سایت دیگر گفته میشود که یک فاکتور مهم و اساسی در سئو هر سایتی می باشد.


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

اندروید

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


۱۰۳۵
۰
۲۹ آبان ۱۳۹۹