另一个延迟任务中的延迟任务每次运行一次

时间:2018-12-03 16:35:58

标签: android sensor android-handler

我需要检查手机是否处于水平位置。如果手机处于水平位置,则必须振动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;
    }
}

0 个答案:

没有答案