سبد (0)

آموزش حسگرهای اندروید

آموزش حسگرهای اندروید

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

1)     حسگرهای حرکتی

2)     حسگرهای محیطی

3)     حسگرهای موقعیت

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

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

 

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

کار بعدی نمونه قرار دادن یک شئ از کلاس حسگر ها با فراخوانی متد DefaultSensor()  از کلاس SensorManager، می باشد. ترکیب آن در زیر ارائه شده است

 


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

زمانی که حسگر شناسایی شد، لازم است شنونده ی آن را ثبت کرده و دو متد AccuracyChanged  و  onSensorChanged را وارد کنید. ترکیب آن مانند زیر می باشد

 

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){
}

علاوه بر این متد ها، متد های دیگری توسط کلاس SensorManager، برای سازماندهی frameworkحسگرها ارائه شده است. این متد ها در جدول زیر ارائه شده است

  • getDefaultSensor(int type)

    این متد یک حسگر پیش فرض را برای یک نوع ارائه شده، می گیرد.

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

    این متد توضیحی از کلیپ اصلی حاضر روی کلیپ بورد گزارش می دهد، اما کپی از داده ی آن ارائه نمی شود.

  • getInclination(float[] I)  

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

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

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

  • unregisterListener(SensorEventListener listener, Sensor sensor)

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

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

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

  • getAltitude(float p0, float p)

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

مثال

در اینجا مثالی را می بینید که استفاده از کلاس SensorManager را توضیح می دهد. این مثال یک برنامه ی پایه ایجاد می کند که به شما اجازه می دهد تا لیست حسگرها را روی دستگاه خود مشاهده کنید.

برای آزمایش این مثال می توانید آن را روی یک دستگاه حقیقی یا یک شبیه ساز اجرا کنید.

  • برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان Sensors  به عنوان بسته ی com.PRG.sensors نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDKو Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API استفاده کنید.

  • src/MainActivity.java  را برای افزودن کد لازم تغییر دهید.

  • res/layout/activity_main را برای افزودن مولفه های XML مربوطه تغییر دهید.

  • برنامه را اجرا کرده و یک دستگاه اجرایی اندروید انتخاب کنید، برنامه را روی آن نصب کرده و نتایج را بررسی کنید.

در اینجا محتوای فایل تغییر یافته ی MainActivity.java را مشاهده می کنید.

 

package com.PRG.sensors;

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);
   }
}

در ادامه محتوای تغییریافته ی xml مربوط به res/layout/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: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="Tutorials point"
      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را مشاهده می کنید.

 

<resources>
    <string name="app_name">My Application</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
</resources>

در زیر محتوای فایل AndroidManifest.xmlرا مشاهده می کنید.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.PRG.sensors" >
   <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>

اجازه دهید برنامه ی Sensor تازه تغییریافته را اجرا کنیم.فرض می کنیم که شما در هنگام انجام تنظیمان محیط AVD خود را ایجاد کرده اید. برای اجرای برنامه از Eclipse، یکی از فایل های فعالیت برنامه را باز کرده و روی آیکن icon در تولبار کلیک کنید. Eclipse برنامه را روی AVD نصب کرده و آن را شروع می کند. اگر همه چیز در مورد برنامه و تنظیمات آن درست باشد، پنجره ی شبیه ساز زیر نمایش داده خواهد شد.

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

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

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه