İşte bir örnek kod. Bunu aktivite sınıfınıza ekleyin:
/* put this into your activity class */
private SensorManager mSensorManager;
private float mAccel; // acceleration apart from gravity
private float mAccelCurrent; // current acceleration including gravity
private float mAccelLast; // last acceleration including gravity
private final SensorEventListener mSensorListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent se) {
float x = se.values[0];
float y = se.values[1];
float z = se.values[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
mSensorManager.unregisterListener(mSensorListener);
super.onPause();
}
Ve bunu onCreate yönteminize ekleyin:
/* do this in onCreate */
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
mAccel = 0.00f;
mAccelCurrent = SensorManager.GRAVITY_EARTH;
mAccelLast = SensorManager.GRAVITY_EARTH;
Ardından, eksenden bağımsız olarak ve yerçekimi gibi statik ivmeden temizlenmiş olarak mevcut hızlanma için uygulamanızda istediğiniz yerde "mAccel" isteyebilirsiniz. Yakl. Hareket yoksa 0 ve cihaz sallanırsa> 2 diyelim.
Yorumlara dayanarak - bunu test etmek için:
if (mAccel > 12) {
Toast toast = Toast.makeText(getApplicationContext(), "Device has shaken.", Toast.LENGTH_LONG);
toast.show();
}
Notlar:
Kaynakları kaydetmek için hızölçer devre dışı bırakılmalı ve açık bırakılmalıdır (CPU, Pil). Kod, Dünya gezegeninde ;-) olduğumuzu varsayar ve yer çekimine ivme kazandırır. Aksi takdirde, uygulama başladığında ve serbest düşmeden yere "vurduğunda" güçlü bir "sallama" elde edersiniz. Bununla birlikte, kod, düşük kesilmiş filtre nedeniyle yerçekimine alışır ve başlatıldıktan sonra diğer gezegenlerde veya boş alanda da çalışır. (başvurunuzun ne kadar süreyle kullanımda olacağını asla bilemezsiniz ... ;-)