Мне нужно проверить, находится ли телефон в горизонтальном положении.Если телефон находится в горизонтальном положении, телефон должен вибрировать в течение 10 секунд.
После 10 секунд вибрации он должен вибрировать еще 5 секунд.
После (второй) 5-секундной вибрации он должен выполнитьcode.
После выполнения кода счетчик времени должен быть сброшен.
Код, который я написал, работает, но я полагаю, что отложенный код выполняется много раз одновременно, вместо этого мне нужно выполнить простоодин раз за раз.
@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;
}
}