这是我在应用程序中不断遇到的唯一问题。默认情况下 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] 删除。
我来说两句