کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش استفاده از sensor manager در اندروید

 آموزش استفاده از sensor manager در اندروید حسگر اندروید

در این فصل شما را با نحوه ی استفاده از sensor manager در اندروید آشنا می سازیم .

 آموزش استفاده از sensor manager در اندروید فهرست محتوا

1. Android Sensor

  • آموزش SensorManager
  • Sensor listener (گوش فراخوان های رخدادهای مربوط به حس گرها)

2. آموزش Accelerometer (شتاب سنج)

3. آموزش ساخت Compass (قطب نما)

 آموزش استفاده از sensor manager در اندروید Android Sensor

آموزش SensorManager

Android Sensor (حسگرها یا همان سنسورهای اندروید) با کمک SensorManager, از چندین سنسور متعدد پشتیبانی می کند. به عنوان نمونه می توان به شتاب سنج اشاره کرد . متاسفانه امکان تست شتاب سنج بر روی شبیه ساز وجود ندارد .
می توان به وسیله ی getSystemService(SENSOR_SERVICE) به SensorManager دسترسی پیدا کرد . کلاس Sensor با تعریف چندین ثابت (constant) قابلیت دستیابی به حس گر های مختلف را فراهم می آورد .

 آموزش استفاده از sensor manager در اندروید آموزش استفاده از Intent برای گرفتن یک عکس

در وهله ی اول یک پروژه ی جدید اندروید به نام de.vogella.android.imagepick ایجاد کنید . اکنون activity پروژه را ساخته و آن را ImagePickActivity نام گذاری کنید .
داخل طرح کلی (layout) activity یک ImageView با شناسه ی (ID) result بگنجانید . در مرحله ی بعد یک دکمه با خصوصیت (property) onClick اضافه کنید که به تابع onClick اشاره کند .
کلاس ImagePickActivity را به کد زیر اضافه کنید .

Sensor.TYPE_GYROSCOPE
Sensor.TYPE_MAGNETIC_FIELD
Sensor.TYPE_ORIENTATION
Sensor.TYPE_ACCELEROMETER

Sensor listener (گوش فراخوان های رخدادهای مربوط به حس گرها)

پس از دستیابی به حسگر, می توان روی آن یک شئ SensorEventListener ثبت کرد . گوش فراخوان ذکر شده در صورت تغییر داده (چنانچه اطلاعات تغییر یافت), بلافاصله مطلع می گردد .
به منظور اجتناب از مصرف بی مورد باتری, می توانید گوش فراخوان خود را در متد onResume() ثبت کرده و آن را دوباره در تابع onPause() لغو ثبت (de-register) کنید .

 آموزش استفاده از sensor manager در اندروید آموزش Accelerometer (شتاب سنج)

یک برنامه می سازیم که رنگ پس زمینه را در صورت رخ دادن shuffle, تغییر می دهد . پروژه ی جدید de.vogella.android.sensor را ایجاد کرده و activity آن را SensorTestActivity نام گذاری کنید .
فایل طرح بندی (layout) خود را به کد زیر تغییر دهید .

   




              
                 

کلاس activity خود را به کد زیر اصلاح کنید .

                
package de.vogella.android.sensor;
import android.app.Activity;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
public class SensorTestActivity extends Activity implements SensorEventListener {
  private SensorManager sensorManager;
  private boolean color = false;
  private View view;
  private long lastUpdate;
/** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    view = findViewById(R.id.textView);
    view.setBackgroundColor(Color.GREEN);
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    lastUpdate = System.currentTimeMillis();
  }
 
  @Override
  public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
      getAccelerometer(event);
    }
  }
  private void getAccelerometer(SensorEvent event) {
    float[] values = event.values;
    // Movement
    float x = values[0];
    float y = values[1];
    float z = values[2];
    float accelationSquareRoot = (x * x + y * y + z * z)
        / (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
    long actualTime = event.timestamp;
    if (accelationSquareRoot >= 2) //
    {
      if (actualTime - lastUpdate < 200) {
        return;
      }
      lastUpdate = actualTime;
      Toast.makeText(this, "Device was shuffed", Toast.LENGTH_SHORT)
          .show();
      if (color) {
        view.setBackgroundColor(Color.GREEN);
      } else {
        view.setBackgroundColor(Color.RED);
      }
      color = !color;
    }
  }
  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {
  }
  @Override
  protected void onResume() {
    super.onResume();
    // register this class as a listener for the orientation and
    // accelerometer sensors
    sensorManager.registerListener(this,
        sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
        SensorManager.SENSOR_DELAY_NORMAL);
  }
  @Override
  protected void onPause() {
    // unregister listener
    super.onPause();
    sensorManager.unregisterListener(this);
  }
}                 

 آموزش استفاده از sensor manager در اندروید آموزش ساخت Compass (قطب نما)

پروژه ی جدید این تمرین را de.vogella.android.sensor.compass نام گذاری کنید . سپس activity پروژه را ساخته و آن را MainActivity اسم گذاری کنید .
حال کلاس سفارشی View را ایجاد کنید .

                
package de.vogella.android.sensor.compass;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class MyCompassView extends View {
  private Paint paint;
  private float position = 0;
  public MyCompassView(Context context) {
    super(context);
    init();
  }
  private void init() {
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setStrokeWidth(2);
    paint.setTextSize(25);
    paint.setStyle(Paint.Style.STROKE);
    paint.setColor(Color.WHITE);
  }
  @Override
  protected void onDraw(Canvas canvas) {
    int xPoint = getMeasuredWidth() / 2;
    int yPoint = getMeasuredHeight() / 2;
    float radius = (float) (Math.max(xPoint, yPoint) * 0.6);
    canvas.drawCircle(xPoint, yPoint, radius, paint);
    canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);
    // 3.143 is a good approximation for the circle
    canvas.drawLine(xPoint,
        yPoint,
        (float) (xPoint + radius
            * Math.sin((double) (-position) / 180 * 3.143)),
        (float) (yPoint - radius
            * Math.cos((double) (-position) / 180 * 3.143)), paint);
 
    canvas.drawText(String.valueOf(position), xPoint, yPoint, paint);
  }
  public void updateData(float position) {
    this.position = position;
    invalidate();
  }
} 
 
                

در مرحله ی آخر کدنویسی (coding) activity خود را به صورت زیر اصلاح کنید .

     
                    package de.vogella.android.sensor.compass;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class MainActivity extends Activity {
  private static SensorManager sensorService;
  private MyCompassView compassView;
  private Sensor sensor;
/** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    compassView = new MyCompassView(this);
    setContentView(compassView);
    sensorService = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensor = sensorService.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    if (sensor != null) {
      sensorService.registerListener(mySensorEventListener, sensor,
          SensorManager.SENSOR_DELAY_NORMAL);
      Log.i("Compass MainActivity", "Registerered for ORIENTATION Sensor");
    } else {
      Log.e("Compass MainActivity", "Registerered for ORIENTATION Sensor");
      Toast.makeText(this, "ORIENTATION Sensor not found",
          Toast.LENGTH_LONG).show();
      finish();
    }
  }
  private SensorEventListener mySensorEventListener = new SensorEventListener() {
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
    @Override
    public void onSensorChanged(SensorEvent event) {
      // angle between the magnetic north direction
      // 0=North, 90=East, 180=South, 270=West
      float azimuth = event.values[0];
      compassView.updateData(azimuth);
    }
  };
  @Override
  protected void onDestroy() {
    super.onDestroy();
    if (sensor != null) {
      sensorService.unregisterListener(mySensorEventListener);
    }
  }
}            
                
1394/08/12 7837 3276
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...