Đây là một mã ví dụ. Đặt cái này vào lớp hoạt động của bạn:
/* 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();
}
Và thêm điều này vào phương thức onCreate của bạn:
/* 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;
Sau đó, bạn có thể hỏi "mAccel" bất cứ nơi nào bạn muốn trong ứng dụng của mình để tăng tốc hiện tại, độc lập với trục và được làm sạch khỏi gia tốc tĩnh như trọng lực. Nó sẽ được khoảng. 0 nếu không có chuyển động và giả sử> 2 nếu thiết bị bị rung.
Dựa trên các ý kiến - để kiểm tra điều này:
if (mAccel > 12) {
Toast toast = Toast.makeText(getApplicationContext(), "Device has shaken.", Toast.LENGTH_LONG);
toast.show();
}
Ghi chú:
Thiết bị đo tốc độ nên được hủy kích hoạt onPause và kích hoạt onResume để tiết kiệm tài nguyên (CPU, Pin). Mã giả định rằng chúng ta đang ở trên hành tinh Trái đất ;-) và khởi tạo gia tốc cho trọng lực trái đất. Nếu không, bạn sẽ bị "rung lắc" mạnh khi ứng dụng khởi động và "chạm" xuống đất khi rơi tự do. Tuy nhiên, mã được sử dụng để hấp dẫn do bộ lọc cắt thấp và cũng sẽ hoạt động trên các hành tinh khác hoặc trong không gian trống, một khi nó được khởi tạo. (bạn không bao giờ biết ứng dụng của mình sẽ được sử dụng trong bao lâu ... ;-)