我有一个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;
}
任何人都可以建议我如何修复此方法?或者有另一种方法来处理它。
答案 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);
}
}