Ось приклад коду. Введіть це у свій клас діяльності:
/* 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();
}
І додайте це до свого методу onCreate:
/* 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;
Потім ви можете запитати "mAccel" куди завгодно у вашій програмі про поточне прискорення, незалежне від осі та очищене від статичного прискорення, такого як сила тяжіння. Це буде ок. 0, якщо руху немає, і, скажімо,> 2, якщо пристрій похитнувся.
На основі коментарів - для перевірки цього:
if (mAccel > 12) {
Toast toast = Toast.makeText(getApplicationContext(), "Device has shaken.", Toast.LENGTH_LONG);
toast.show();
}
Примітки:
Акселеметр повинен бути вимкнено в режимі Призупинення та активовано в режимі " Назад" для економії ресурсів (процесор, акумулятор). Код передбачає, що ми перебуваємо на планеті Земля ;-) і ініціалізує прискорення до сили тяжіння до Землі. В іншому випадку ви отримаєте сильний "похитнення", коли додаток запуститься і "вдарить" об землю від вільного падіння. Однак код звикає до гравітації завдяки низькорозрізаному фільтру, і він буде працювати і на інших планетах або у вільному просторі, як тільки він буде ініціалізований. (ви ніколи не знаєте, як довго буде використовуватись ваша програма ... ;-)