我需要检查手机是否处于水平位置。如果手机处于水平位置,则必须振动10秒钟。
振动10秒钟后,它必须再振动5秒钟。
(第二次)振动5秒后,必须执行代码。
执行完代码后,必须重新设置时间计数。
我写的代码行得通,但是我想延迟的代码可以同时执行很多次,而我需要的只是每次执行一次。
@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
float x = values[0];
float y = values[1];
float z = values[2];
float norm = (float) Math.sqrt(x * x + y * y + z * z);
// Normalize the accelerometer vector
x = (x / norm);
y = (y / norm);
z = (z / norm);
int inclination = (int) Math.round(Math.toDegrees(Math.acos(z)));
if (inclination < 45 || inclination > 155) {
if (!horizontalDevice) {
horizontalDevice = true;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (horizontalDevice) {
long[] pattern = { 0, 500, 500, 500, 500 };
vib.vibrate(pattern , 0);
Handler subHandler = new Handler();
subHandler.postDelayed(new Runnable() {
@Override
public void run() {
// it must be executed once per time.
if (horizontalDevice) {
horizontalDevice = false;
}
}
}, 5000);
}
}
}, 10000);
}
} else {
vib.cancel();
horizontalDevice = false;
}
}