从CountDownTimer返回布尔值

时间:2018-05-14 18:26:16

标签: android countdowntimer

我有一个5秒倒计时器,我需要检测持续时间内的加速幅度。如果幅度符合语句,则返回true。但是,由于void方法OnTick并且它是一个内部类,我无法返回或传递任何值到外部类。

public boolean low_high_Detection(final double ampA) {
    new CountDownTimer(5000, 1000) {
        public void onTick(long millisUntilFinished) {
            final double low_TH = 9.0, high_TH = 10.5;
            boolean lying_on_floor = false;
            if(ampA > low_TH && ampA <high_TH)
            {
                lying_on_floor = true;
            }
        }
        public void onFinish() {
            Toast.makeText(detect.getBaseContext(), "5 seconds dectection over",Toast.LENGTH_SHORT).show();
        }
    }.start();

    if (lying_on_floor == true)
    {
        return true;
    }
    return false;
}

任何人都可以建议我如何修复此方法?或者有另一种方法来处理它。

1 个答案:

答案 0 :(得分:0)

这可以通过匿名类作为监听器来实现。

声明一个充当监听器的接口。

public interface LowHightDetectionListener {
   void onDetected(boolean result);
}

然后,调用此方法并将此侦听器的实例传递给方法low_high_Detection()

low_high_Detection(ampA, new LowHightDetectionListener {
   @Override
   public void onDetected(boolean result) {
      // Process the result
   }
});

您将获得“返回”值。

要在low_high_Detection()方法中返回所需的值,您需要调用侦听器。

public void low_high_Detection(final double ampA, final LowHightDetectionListener callback) {
    new CountDownTimer(5000, 1000) {
      public void onTick(long millisUntilFinished) {
        final double low_TH = 9.0, high_TH = 10.5;
        boolean lying_on_floor = false;
        if(ampA > low_TH && ampA <high_TH) {
            lying_on_floor = true;
            callback.onDetected(true); // EXAMPLE OF RETURNING VALUE INSIDE AN ANONYMOUS CLASS
         }
      }

      public void onFinish() {
        Toast.makeText(detect.getBaseContext(), "5 seconds dectection over",Toast.LENGTH_SHORT).show();
      }
   }.start();

   if (lying_on_floor == true) {
     callback.onDetected(true);
     return;
   }
   callback.onDetected(false);
  }
}