从android中的加速度计读取后,一行代码正在循环

触发器

这是我在应用程序中不断遇到的唯一问题。默认情况下 n=0,如果来自加速度计的重力值高于某个值,则将设置为 1。一旦 n=1(检测到的重力足够高),将调用方法“action()”。由于来自加速度计的重力值变化非常快,我需要调用 action() 并稍等片刻,然后再将 n 更改回 0 或 action() 将连续调用几次。

我尝试在调用 action 之后和将 n 更改为 0 之前使用 sleep() 但它没有用。然后我尝试使用倒数计时器 5 秒,它只是循环 action(); 在停止之前真的快了 5 秒。可能是我对 android 倒数计时器缺乏了解,这很奇怪,因为我在代码的其他部分使用了它,并且运行良好。

    if(n == 1){
        if (state == true) {
            action();
            new CountDownTimer(5000, 1000) {
                @Override
                public void onTick(long millisUntilFinished) {
                }

                public void onFinish() {
                    n = 0;
                }
            }.start();
        }
    }

我只需要一种方法让 action() 只被调用一次,然后将 n 设置为 0,以便准备好从加速度计进行另一次读取。

谢谢!

数码忍者

我想我理解你想要达到的目标,这可能只是荷马辛普森的“D'oh!” 对你的时刻...

当 n=1 时,您想调用action(),那么action()将继续调用,就像 n=1 和 state=true 一样。您的倒数计时器将保持 n=1 直到 5 秒过去,此时它会被设置为零以防止action()被调用。此外,只要 n=1 且 state=true,您就会一遍又一遍地创建一个新的倒数计时器。

你真正想要做的是立即设置n为零和state假。如果n再次变为 1state将阻止action()被调用。然后在倒计时完成后将state返回设置为 true,这将允许action再次调用。如果state在其他地方使用,那么您可能需要另一个布尔变量作为您的控件。这样,加速度计可以随时设置n为 1,但在state为真之前您不会关心

if(n == 1){
    if (state == true) {
        n=0;
        state=false;
        action();
        new CountDownTimer(5000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
            }

            public void onFinish() {
               state=true;
            }
        }.start();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章