代码仅执行一次而无需重置变量

时间:2019-04-21 15:18:56

标签: java android for-loop if-statement timer

试图使我的Fitbit与Android应用程序兼容。它有助于检测跌倒并向家人发送短信通知。

它应该工作的方式是: 使用Fitbit的加速度,它会检测到跌倒并在智能手机上发送连续的哔哔声,您必须在10-15秒钟内手动将其重置,以免发生错误的跌落(跌倒检测算法并非100%准确,因此应该给您时间重置它)。手动重置后,它应该可以再次工作。

它是如何工作的:它只发出一次哔声,然后自动重置。稍后可以再次使用,是的但是仍然存在相同的问题。我希望我可以通过添加20秒的延迟来解决该问题,尽管我知道这根本不是最佳实践。

试图在最后一个If条件语句中添加一个返回值,但没有改变。 想到只用一会儿就可以了

 public void checkFall() {
    int i,j;
    double minAcc, maxAcc;

    long fallWindowSamp = (mFallWindow*mSdData.mSampleFreq)/1000; // Convert ms to samples.
    Log.v(TAG, "check_fall() - fallWindowSamp=" +fallWindowSamp);
    // Move window through sample buffer, checking for fall.
    mSdData.fallAlarmStanding = false;
    if (mFallActive) {
        for (i = 0; i < mSdData.mNsamp - fallWindowSamp; i++) {  // i = window start point
            // Find max and min acceleration within window.
            minAcc = mSdData.rawData[i];
            maxAcc = mSdData.rawData[i];
            for (j = 0; j < fallWindowSamp; j++) {  // j = position within window
                if (mSdData.rawData[i + j] < minAcc) minAcc = mSdData.rawData[i + j];
                if (mSdData.rawData[i + j] > maxAcc) maxAcc = mSdData.rawData[i + j];
            }
            if ((minAcc < mFallThreshMin) && (maxAcc > mFallThreshMax)) {
                Log.d(TAG, "check_fall() - minAcc=" + minAcc + ", maxAcc=" + maxAcc);
                Log.d(TAG, "check_fall() - ****FALL DETECTED****");
                mSdData.fallAlarmStanding = true;
              //  return;
            }
        }
    } else {
        Log.v(TAG,"check_fall - mFallActive is false - doing nothing");
    }
    //if (debug) APP_LOG(APP_LOG_LEVEL_DEBUG,"check_fall() - minAcc=%d, maxAcc=%d",
    //    minAcc,maxAcc);

}

0 个答案:

没有答案