Задержанная задача внутри другой отложенной задачи запускается один раз за раз - PullRequest
0 голосов
/ 03 декабря 2018

Мне нужно проверить, находится ли телефон в горизонтальном положении.Если телефон находится в горизонтальном положении, телефон должен вибрировать в течение 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...