[TR] Android Hareket Sensoru Kullanimi
Android’de chazın hareket etmesi halinde, hareket sensöründen x,y,z koordinatlarında ivmelenme bilgilerini alabiliriz. Bu ivmelerden √(x*x + y*y + z*z)
hesaplamasını yaparak gerçek ivmeye ulaşabiliriz.
Not: Mobil cihazınızın ayarlarını kontrol ederek sensörün açık olduğundan emin olunuz.
public class MotionActivity extends Avtivity implements SensorEventListener{
private SensorManager sensorMan;
private Sensor accelerometer;
private float[] mGravity;
private float mAccel;
private float mAccelCurrent;
private float mAccelLast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_motion);
...
sensorMan = (SensorManager)getSystemService(SENSOR_SERVICE);
accelerometer = sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mAccel = 0.00f;
mAccelCurrent = SensorManager.GRAVITY_EARTH;
mAccelLast = SensorManager.GRAVITY_EARTH;
}
//sensor tekrar devreye girer
@Override
public void onResume() {
super.onResume();
sensorMan.registerListener(this, accelerometer,
SensorManager.SENSOR_DELAY_UI);
}
//sensor devre disi
@Override
protected void onPause() {
super.onPause();
sensorMan.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
mGravity = event.values.clone();
//sensorden elde edilen ivme bilgileri
float x = mGravity[0];
float y = mGravity[1];
float z = mGravity[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = FloatMath.sqrt(x*x + y*y + z*z);
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta;
//sensorun calisacagi minimum ivme
if(mAccel > 3){
Toast.makeText(getApplicationContext(), "Hareket tespit edildi!",
Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// required method
}
}