gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:34:40 26 4
gpt4 key购买 nike

这是我在应用程序中遇到的唯一问题。默认情况下 n=0,如果加速度计的重力值高于某个值,则 n=0。一旦 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 设置为 false。如果n再次变为1,state将阻止调用action()。然后,在倒计时结束后,将 state 设置回 true,这将允许再次调用 action。如果 state 在其他地方使用,那么您可能需要另一个 boolean 变量来用作控件。这样,加速度计就可以随时将 n 设置为 1,但在 state 为 true 之前您不会关心。

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();
}
}

关于java - 从android中的加速度计读取后一行代码正在循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57632109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com