// ICLogger.i("getMNC "+runtime.getLocationInstance().getMNC()+" getMCC "+runtime.getLocationInstance().getMCC()+" getGSMStationCID " + runtime.getLocationInstance().getGSMStationCID()+ " getLAC "+runtime.getLocationInstance().getLAC()+" changed "+runtime.getLocationInstance().isDataChanged());
ICLogger.i("waitAndSendLocation " + checktimes + ", lbs=" + lbs_ok + ", wifi=" + wifi_ok + ", gps=" + gps_ok + ", mode=" + mode);
- if (NoMoveAndNoGPSsignalSkipGpsFlag) {
+ if (mNoMoveAndNoGPSsignalSkipGpsFlag) {
ICLogger.i("NoMove And NoGPSsignal SkipGpsLocation!");
mode = ICLocation.NORMAL_MOD;//如果没有移动且没有Gps信号,则采用Normal 模式进行wifi定位
}
ICLogger.i("waitAndSendLocation " + checktimes + " timeout");
timeout = true;
}
- if (NoMoveTimeout && (timeout || gps_nosignal)) {
+ if (mNoMoveTimeout && (timeout || gps_nosignal)) {
//没有移动,GPS超时或者没信号都会给 计数 加 1
gpsTimeoutCountOnNoMove++;
}
return skipMoveCheck;
}
- private static boolean NoMoveAndNoGPSsignalSkipGpsFlag = false;
+ private static boolean mNoMoveAndNoGPSsignalSkipGpsFlag = false;
private static boolean noMove = false;
- private static boolean NoMoveTimeout = false;
+ private static boolean mNoMoveTimeout = false;
private static boolean last_noMove = false;
private static final int MaxNoMoveTimeout = 3 * 60 * 1000; //3分钟
private static long first_NoMove_timestamp = 0;
private boolean needLocationForBT() {
updateStepCount();//update StepCount,保证每次定位前,计步数据是最新的。防止丢数据。
//如果没有动,且超时。则跳过定位
- NoMoveTimeout = checkNoMoveTimeoutForBT();
- ICLogger.i("BT NoMoveTimeout " + NoMoveTimeout + ", forceLocation=" + forceLocation + ", Config.GpsForceMoveCheck=" + Config.GpsForceMoveCheck + ", skipMoveCheck=" + skipMoveCheck);
+ mNoMoveTimeout = checkNoMoveTimeoutForBT();
+ ICLogger.i("BT NoMoveTimeout " + mNoMoveTimeout + ", forceLocation=" + forceLocation + ", Config.GpsForceMoveCheck=" + Config.GpsForceMoveCheck + ", skipMoveCheck=" + skipMoveCheck);
// 不强制定位 且 (WorkingMod 不是紧急模式 或者 强制进行移动检测),且 没有移动过
if ((forceLocation != 1) &&
(Config.GpsForceMoveCheck == true) &&
- (NoMoveTimeout) && (skipMoveCheck == false)) {
+ (mNoMoveTimeout) && (skipMoveCheck == false)) {
ICLogger.i("No Move ,skip BT location!");
return false;
private boolean needLocation() {
updateStepCount();//update StepCount,保证每次定位前,计步数据是最新的。防止丢数据。
//如果没有动,且超时。则跳过定位
- NoMoveTimeout = checkNoMoveTimeout();
- ICLogger.i(" NoMoveTimeout " + NoMoveTimeout + ", forceLocation=" + forceLocation + ", Config.GpsForceMoveCheck=" + Config.GpsForceMoveCheck + ", skipMoveCheck=" + skipMoveCheck);
+ mNoMoveTimeout = checkNoMoveTimeout();
+ ICLogger.i(" NoMoveTimeout " + mNoMoveTimeout + ", forceLocation=" + forceLocation + ", Config.GpsForceMoveCheck=" + Config.GpsForceMoveCheck + ", skipMoveCheck=" + skipMoveCheck);
// 不强制定位 且 (WorkingMod 不是紧急模式 或者 强制进行移动检测),且 没有移动过
if ((forceLocation != 1) &&
(Config.GpsForceMoveCheck == true) &&
- (NoMoveTimeout) && (skipMoveCheck == false)) {
+ (mNoMoveTimeout) && (skipMoveCheck == false)) {
ICLogger.i("No Move ,skip BT location2!");
return false;
public void startLocationProcess(int mod) {
updateStepCount();//update StepCount,保证每次定位前,计步数据是最新的。防止丢数据。
- ICLogger.i("forceLocation=" + forceLocation + ", WorkingMod=" + mod + ", isLocating=" + isLocating + ", lastStep=" + runtime.getLastStepCount() + ", currentStep=" + runtime.getTotalStepCount());
- if (isLocating && 1 != forceLocation) { //如果是强制定位,则即使是正在定位,也要执行,因为有时模式变换的时候,需要取消上一次定位信息,马上新的模式定位。
+ ICLogger.i("forceLocation=" + forceLocation +
+ ", WorkingMod=" + mod + ", isLocating="
+ + isLocating + ", lastStep="
+ + runtime.getLastStepCount()
+ + ", currentStep=" + runtime.getTotalStepCount());
+
+ //如果是强制定位,则即使是正在定位,也要执行,因为有时模式变换的时候,需要取消上一次定位信息,马上新的模式定位。
+ if (isLocating && 1 != forceLocation) {
ICLogger.i("locating ,skip location!");
return;
}
//如果没有动,且超时。则跳过定位
- NoMoveTimeout = checkNoMoveTimeout();
+ //如果超时,返回true,表示静止
+ //如果是false表示移动了
+
+ mNoMoveTimeout = checkNoMoveTimeout();
+
+
// 不强制定位 且 (WorkingMod 不是紧急模式 或者 强制进行移动检测),且 没有移动过
if ((forceLocation != 1) &&
- (((mod == ICLocation.NORMAL_MOD) || (mod == ICLocation.LOWPOWER_MOD) || (mod == ICLocation.CUSTOM_MOD8_WIFI)) || Config.GpsForceMoveCheck == true) &&
- (NoMoveTimeout) && (skipMoveCheck == false)) {
+ (((mod == ICLocation.NORMAL_MOD) || (mod == ICLocation.LOWPOWER_MOD) ||
+ (mod == ICLocation.CUSTOM_MOD8_WIFI)) || Config.GpsForceMoveCheck == true) &&
+ (mNoMoveTimeout) && (skipMoveCheck == false)) {
ICLogger.i("No Move ,skip location!");
+ //走到这里返回的条件是
+ //1.非强制定位
+ //2.当前模式是NORMAL_MOD,或者LOWPOWER_MOD,或者是CUSTOM_MOD8_WIFI,或者GPS强制移动检查为true
+ //3.静止时间超时(没有移动过)
+ //4.不跳过移动检测
return;
}
-
- if (NoMoveTimeout) {
+ //能走到这里的case有:
+ //1.强制定位
+ //2.mode是紧急模式,或者普通模式下,非强制GPS定位检查
+ //3.移动了
+ //4.跳过移动检查
+
+ /**
+ * GpsForceMoveCheck true表示强制GPS移动检查,false表示不强制GPS移动检查
+ * skipMoveCheck true跳过移动检查,false不跳过移动检查
+ */
+ if (mNoMoveTimeout) {
// 记录gps 无信号或者timeout的次数,超过5 就会停止使用gps定位,只要有一次 移动,或者设置为wifi定位,则清零。
if (gpsTimeoutCountOnNoMove >= MaxGpsTimeoutCountOnNoMove) {
- NoMoveAndNoGPSsignalSkipGpsFlag = true;
+ //没有移动,没有GPS信号,跳过GPS
+ mNoMoveAndNoGPSsignalSkipGpsFlag = true;
} else {
- NoMoveAndNoGPSsignalSkipGpsFlag = false;
+ mNoMoveAndNoGPSsignalSkipGpsFlag = false;
}
-
} else {
- NoMoveAndNoGPSsignalSkipGpsFlag = false;
+ mNoMoveAndNoGPSsignalSkipGpsFlag = false;
gpsTimeoutCountOnNoMove = 0; //只要有一次 移动,则清零。
}
switch (mod) {
case ICLocation.CUSTOM_MOD:
case ICLocation.CUSTOM_MOD8_GPS:
- if (!NoMoveAndNoGPSsignalSkipGpsFlag) {
+ if (!mNoMoveAndNoGPSsignalSkipGpsFlag) {
if (runtime.getLocationInstance().getLocation_cycle() <= 60) {
nmeaListener.setNoStop(true);
} else {
break;
case ICLocation.EMERGNECY_MOD:
case ICLocation.REALTIME_MOD:
- if (!NoMoveAndNoGPSsignalSkipGpsFlag) {
+ if (!mNoMoveAndNoGPSsignalSkipGpsFlag) {
nmeaListener.setNoStop(true);
//nmeaListener.setNoStop(false);//保证从Custom切换回来的时候不至于不关闭gps
startGpsLocate();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_GPSCMD);
- (this.runtime.getContextProxy()).context.registerReceiver(this.mLocationBroadcastReceiver, intentFilter);
+ (runtime.getContextProxy()).context.registerReceiver(this.mLocationBroadcastReceiver, intentFilter);
}
public void unregisterBroadReceiver() {
- (this.runtime.getContextProxy()).context.unregisterReceiver(this.mLocationBroadcastReceiver);
+ (runtime.getContextProxy()).context.unregisterReceiver(this.mLocationBroadcastReceiver);
}
private final BroadcastReceiver mLocationBroadcastReceiver = new BroadcastReceiver() {