سنسورها
اکثر دستگاههای اندرویدی دارای 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>
پس از اجرا میتوانید نتیجه کار این کدها را ببینید:
بعد از این که کدهای بالا را در پروژه خود اضافه کردید, میتوانید آنرا اجرا کنید و نتیجه آن را مشاهده کنید. در این تست میتوانید تمامی حرکت های لازم محاسبه و زیر نظر بگیرید.