Berikut ini contoh kode. Masukkan ini ke dalam kelas aktivitas Anda:
/* 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();
}
Dan tambahkan ini ke metode onCreate Anda:
/* 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;
Anda kemudian dapat bertanya "mAccel" di mana pun yang Anda inginkan dalam aplikasi Anda untuk akselerasi saat ini, terlepas dari sumbu dan dibersihkan dari akselerasi statis seperti gravitasi. Itu akan menjadi sekitar. 0 jika tidak ada gerakan, dan, katakanlah> 2 jika perangkat diguncang.
Berdasarkan komentar - untuk menguji ini:
if (mAccel > 12) {
Toast toast = Toast.makeText(getApplicationContext(), "Device has shaken.", Toast.LENGTH_LONG);
toast.show();
}
Catatan:
Accelometer harus dinonaktifkan pada Jeda dan diaktifkan pada Resume untuk menghemat sumber daya (CPU, Baterai). Kode ini mengasumsikan kita berada di planet Bumi ;-) dan menginisialisasi percepatan gravitasi bumi. Kalau tidak, Anda akan mendapatkan "guncangan" yang kuat ketika aplikasi dimulai dan "menyentuh" tanah dari jatuh bebas. Namun, kode tersebut akan terbiasa dengan gravitasi karena filter berpotongan rendah dan akan bekerja juga di planet lain atau di ruang kosong, setelah diinisialisasi. (Anda tidak pernah tahu berapa lama aplikasi Anda akan digunakan ... ;-)