با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش برنامه نویسی اندروید را دنبال می کنند. اکثر دستگاه های اندروید دارای سنسورهایی می باشند که حرکت، جهت گیری و شرایط محیطی مختلف را اندازه گیری می کنند. بعضی از این سنسور ها بر پایه سخت افزار نصب شده اند و بعضی از آنها نیز سنسورهای نرم افزاری هستند. هر سنسور در آندروید ما را قادر می سازد تا اطلاعات خام را از این سنسورها دریافت کرده و از آن در برنامه خود استفاده کنیم. برای آشنایی بیشتر با طرز کار با سنسورها در اندروید در ادامه ی این مباحث با ما همراه باشید.
در این مبحث به بررسی روال کلی کار با سنسورها در برنامه نویسی اندروید و متدهای مربوطه می پردازیم.
همچنین در ادامه ی آموزش به یک مثال ساده از بکارگیری سنسورها در برنامه نویسی اندروید پرداخته ایم.
پتفرم اندروید از سه دسته ی کلی از سنسورها پشتیبانی می کند:
آندروید کلاس های SensorManager و Sensor را برای استفاده از سنسورها در برنامه ما ارائه می دهد.
اولین گام در استفاده از سنسورها در برنامه نویسی اندروید تعریف یک آبجکت از کلاس SensorManager است.
این تعریف می تواند به شرح نمونه زیر باشد:
1 2 | ensorManager sMgr; sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE); |
حالا باید یک آبجکت از کلاس Sensor با فراخوانی متد ()getDefaultSensor از کلاس SensorManager ایجاد کنیم:
1 2 | Sensor light; light = sMgr.getDefaultSensor(Sensor.TYPE_LIGHT); |
هنگامی که این سنسور اعلام می شود، شما باید آن را Listener ثبت کرده و دو متد AccuracyChanged و onSensorChanged را اعمال کنید:
1 2 3 4 5 6 | sMgr.registerListener(this, light,SensorManager.SENSOR_DELAY_NORMAL); public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void onSensorChanged(SensorEvent event) { } |
شما می توانید لیستی از سنسورهای پشتیبانی شده توسط دستگاه خود را با فراخوانی متد getSensorList دریافت کنید.
متد فوق یک لیست از سنسورها حاوی نام و شماره نسخه و اطلاعات بسیار بیشتری را نشان می دهد.
ساختار اقدام فوق به صورت زیر است:
1 2 3 4 | sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE); List<Sensor> list = sMgr.getSensorList(Sensor.TYPE_ALL); for(Sensor sensor: list){ } |
علاوه بر متد فوق متدهای دیگری نیز از کلاس SensorManager برا مدیریت فریم ورک سنسورها ارائه شده که به شرح زیر می باشد:
ردیف | متد و توضیحت مربوطه |
---|---|
۱ | getDefaultSensor(int type) این متد یک سنسور را بر اساس نوع مشخص شده می گیرد. |
۲ | getOrientation(float[] R, float[] values) این متد یک توصیف از clip اولیه را از کلیپبورد برمی گرداند. |
۳ | getInclination(float[] I) این متد زاویه گرانشی زمین را در رادیان از ماتریس inclination محاسبه می کند. |
۴ | registerListener(SensorListener listener, int sensors, int rate) این متد یک listener برای سنسور ثبت می کند. |
۵ | unregisterListener(SensorEventListener listener, Sensor sensor) این متد یک listener که برای سنسور ثبت شده را لغو می کند. |
۶ | getOrientation(float[] R, float[] values) این متد جهت گیری دستگاه بر اساس ماتریس چرخش را محاسبه می کند. |
۷ | getAltitude(float p0, float p) این متد محاسبه ارتفاع در متر از فشار اتمسفر و فشار در سطح دریا است. |
در اینجا به یک نمونه استفاده از کلاس SensorManager در کدهای اندروید پرداخته ایم.
این یک برنامه ی ساده است که لیست تمام سنسورهای موجود در دستگاه شما را لیست می کند.
شما می توانید این برنامه را در یک دستگاه اندروید واقعی و یا شبیه ساز اندروید اجرا کنید.
مراحل انجام کار:
مراحل | توضیحات |
---|---|
۱ | مراحل ایجاد برنامه در اندروید استدیو را طبق بخش های قبلی تحت عنوان پکیج com.example.Pvlearn.myapplication دنبال کنید. |
۲ | به محتوای فایل src/MainActivity.java کدهای ضروری را اضافه کنید. |
۳ | طراحی مناسب با این برنامه را به res/layout/activity_main اضافه کنید. |
۴ | برنامه را اجرا کنید تا شبیه ساز یا دستگاه اندروید شما نتیجه را نمایش دهد. |
محتوای فایل MainActivity.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | package com.example.Pvlearn.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 = 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()); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } |
محتوای فایل activity_main.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <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:text="Sensor " android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview" android:textSize="35dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" Pvlearn" android:id="@+id/textView" android:layout_below="@+id/textview" android:layout_centerHorizontal="true" android:textColor="#ff7aff24" android:textSize="35dp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:src="@drawable/abc" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:theme="@style/Base.TextAppearance.AppCompat" /> <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> |
محتوای فایل res/values/string.xml:
1 2 3 4 5 | <resources> <string name="app_name">My Application</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> </resources> |
محتوای فایل AndroidManifest.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sairamkrishna.myapplication" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
برای اجرای برنامه ی اندرویدی خود یکی از فایل های activity در برنامه ی خود کلیک کنید.
سپس روی نماد (Run) از نوار ابزار برای شروع اجرای برنامه کلیک کنید.
صفحه اول این اپلیکیشن به صورت زیر ظاهر خواهد شد:
اکنون اگر شما به صفحه دستگاهتان نگاه کنید، فهرستی از سنسورهای پشتیبانی شده توسط دستگاه شما را همراه با نام و نسخه و سایر اطلاعات خود مشاهده خواهید کرد.
اگر این برنامه را در دستگاه های مختلف اجرا کنید، خروجی متفاوت خواهد بود زیرا خروجی بستگی به تعداد سنسورهای پشتیبانی شده توسط دستگاه شما دارد.
امروزه در تلفن های هوشمند از سنسورهای مختلفی برای تشخیص حرکت ، چرخش ، موقعیت ، دما و… استفاده می شود، اندروید به شما اجازه می دهد تا در صورت لزوم از این سنسورها در برنامه نویسی اندروید خود نیز استفاده کنید.
در بخش بعدی به مدیریت Session در اندروید می پردازیم.