if (runtime.getLocationInstance().getLocationStat() == ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT)
gps_nosignal = true;
lbs_ok = (
- runtime.getLocationInstance().isDataChanged() == false /*如果mcc,mnc等都没有赋过值 */||
- ( runtime.getLocationInstance().getMNC().equals("0") && runtime.getLocationInstance().getMCC().equals("0")
- && runtime.getLocationInstance().getGSMStationCID() == 0 && runtime.getLocationInstance().getLAC() == 0
- )
- )? false : true;
+ runtime.getLocationInstance().isDataChanged() == false /*如果mcc,mnc等都没有赋过值 */ ||
+ (runtime.getLocationInstance().getMNC().equals("0") && runtime.getLocationInstance().getMCC().equals("0")
+ && runtime.getLocationInstance().getGSMStationCID() == 0 && runtime.getLocationInstance().getLAC() == 0
+ )
+ ) ? false : true;
// 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);
//GPS 优先的话多给些时间(10秒)
timeCost = System.currentTimeMillis() - startCheckTime;
- if ((checktimes > WiFiLocationTimeoutInSeconds) || ((startCheckTime != 0L) && (timeCost > WiFiLocationTimeoutInSeconds *1000))) {
- ICLogger.i("waitAndSendLocation WiFi TimeOut " + checktimes + " > "+WiFiLocationTimeoutInSeconds + " or timeCost "+timeCost+"> "+WiFiLocationTimeoutInSeconds*1000+"ms ");
+ if ((checktimes > WiFiLocationTimeoutInSeconds) || ((startCheckTime != 0L) && (timeCost > WiFiLocationTimeoutInSeconds * 1000))) {
+ ICLogger.i("waitAndSendLocation WiFi TimeOut " + checktimes + " > " + WiFiLocationTimeoutInSeconds + " or timeCost " + timeCost + "> " + WiFiLocationTimeoutInSeconds * 1000 + "ms ");
wifi_timeout = true;
}
- if ((checktimes > GPSLocationTimeoutInSeconds) || ((startCheckTime != 0L) && (timeCost > GPSLocationTimeoutInSeconds*1000))) {
+ if ((checktimes > GPSLocationTimeoutInSeconds) || ((startCheckTime != 0L) && (timeCost > GPSLocationTimeoutInSeconds * 1000))) {
//有时timer计数不准,则根据实际时间计算
- ICLogger.i("waitAndSendLocation " + checktimes + "> "+GPSLocationTimeoutInSeconds+" or timeCost "+timeCost+"> "+GPSLocationTimeoutInSeconds*1000+"ms ");
+ ICLogger.i("waitAndSendLocation " + checktimes + "> " + GPSLocationTimeoutInSeconds + " or timeCost " + timeCost + "> " + GPSLocationTimeoutInSeconds * 1000 + "ms ");
timeout = true;
}
- if (NoMoveTimeout && (timeout || gps_nosignal)) {
+ if (mNoMoveTimeout && (timeout || gps_nosignal)) {
//没有移动,GPS超时或者没信号都会给 计数 加 1
gpsTimeoutCountOnNoMove++;
}
}
runtime.getLocationInstance().setLocationType(locationtype);
runtime.getLocationInstance().setLocationTime(TimeUtil.getSystemTime3());
- ICLogger.i("waitAndSendLocation startSOSLocation " + startSOSLocation +" or startNomalLocation "+startNomalLocation);
+ ICLogger.i("waitAndSendLocation startSOSLocation " + startSOSLocation + " or startNomalLocation " + startNomalLocation);
if (startSOSLocation) {
StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime);
startNomalLocation = false;
if (gps_ok) {
// if (!TextUtils.isEmpty(runtime.getWifiInfo())) {
- StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);
- DeliverMessage(AP01_CMD);
+ StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);
+ DeliverMessage(AP01_CMD);
// }
} else {
StringMessage AP02_CMD = protocolAPIHelper.getLBSLocationMSG(runtime);
if (Config.LOG_TOFILE) {
ICLogger.logToFile("GPS", msg);
}
- } else if ((timeout ||gps_nosignal) && !lbs_ok && wifi_timeout) {
+ } else if ((timeout || gps_nosignal) && !lbs_ok && wifi_timeout) {
//timeout + noLBS +noGPS
ICLogger.i("timeout no location ");
stopCheckLocationResult();
ICLogger.logToFile("GPS", "timeout no location ");
}
}
- break;
+ break;
case ICLocation.CUSTOM_MOD9_WIFI_FIRST: {
//检测wifi和lbs先,成功则直接返回,失败则开启GPS
timeCost = System.currentTimeMillis() - startCheckTime;
//wifi扫描 检测次数到,或者实际时间到,都会触发 timeout事件,开启gps扫描。
- if ((checktimes > WiFiLocationTimeoutInSeconds) || ((startCheckTime != 0L) && (timeCost > WiFiLocationTimeoutInSeconds *1000))) {
- ICLogger.i("waitAndSendLocation WiFi TimeOut " + checktimes + " > "+WiFiLocationTimeoutInSeconds + " or timeCost "+timeCost+"> "+WiFiLocationTimeoutInSeconds*1000+"ms ");
- if (!wifi_timeout)
- {
+ if ((checktimes > WiFiLocationTimeoutInSeconds) || ((startCheckTime != 0L) && (timeCost > WiFiLocationTimeoutInSeconds * 1000))) {
+ ICLogger.i("waitAndSendLocation WiFi TimeOut " + checktimes + " > " + WiFiLocationTimeoutInSeconds + " or timeCost " + timeCost + "> " + WiFiLocationTimeoutInSeconds * 1000 + "ms ");
+ if (!wifi_timeout) {
gpsTimeoutCountOnNoMove = 0; //只要有一次不是GPS定位,则清零。
startGpsLocate();
}
wifi_timeout = true;
}
//WIFI First 会在完成 wifi 检测且没有 后再开始GPS测试。
- if ((checktimes > (GPSLocationTimeoutInSeconds+WiFiLocationTimeoutInSeconds)) || ((startCheckTime != 0L) && (timeCost > (GPSLocationTimeoutInSeconds+WiFiLocationTimeoutInSeconds)*1000))) {
+ if ((checktimes > (GPSLocationTimeoutInSeconds + WiFiLocationTimeoutInSeconds)) || ((startCheckTime != 0L) && (timeCost > (GPSLocationTimeoutInSeconds + WiFiLocationTimeoutInSeconds) * 1000))) {
//有时timer计数不准,则根据实际时间计算
- ICLogger.i("waitAndSendLocation GPS Timeout " + checktimes + "> "+(GPSLocationTimeoutInSeconds+WiFiLocationTimeoutInSeconds)+" or timeCost "+timeCost+"> "+GPSLocationTimeoutInSeconds*1000+"ms ");
+ ICLogger.i("waitAndSendLocation GPS Timeout " + checktimes + "> " + (GPSLocationTimeoutInSeconds + WiFiLocationTimeoutInSeconds) + " or timeCost " + timeCost + "> " + GPSLocationTimeoutInSeconds * 1000 + "ms ");
timeout = true;
}
- if (NoMoveTimeout && (timeout || gps_nosignal)) {
+ if (mNoMoveTimeout && (timeout || gps_nosignal)) {
//没有移动,GPS超时或者没信号都会给 计数 加 1
gpsTimeoutCountOnNoMove++;
}
locationtype = "WiFi";
runtime.getLocationInstance().setLocationType(locationtype);
runtime.getLocationInstance().setLocationTime(TimeUtil.getSystemTime3());
- ICLogger.i("waitAndSendLocation startSOSLocation " + startSOSLocation +" or startNomalLocation "+startNomalLocation);
+ ICLogger.i("waitAndSendLocation startSOSLocation " + startSOSLocation + " or startNomalLocation " + startNomalLocation);
if (startSOSLocation) {
StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime);
DeliverMessage(AP10_CMD);
}
runtime.getLocationInstance().setLocationType(locationtype);
runtime.getLocationInstance().setLocationTime(TimeUtil.getSystemTime3());
- ICLogger.i("waitAndSendLocation startSOSLocation " + startSOSLocation +" or startNomalLocation "+startNomalLocation);
+ ICLogger.i("waitAndSendLocation startSOSLocation " + startSOSLocation + " or startNomalLocation " + startNomalLocation);
if (startSOSLocation) {
StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime);
DeliverMessage(AP10_CMD);
startNomalLocation = false;
if (gps_ok) {
// if (!TextUtils.isEmpty(runtime.getWifiInfo())) {
- StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);
- DeliverMessage(AP01_CMD);
+ StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);
+ DeliverMessage(AP01_CMD);
// }
} else {
StringMessage AP02_CMD = protocolAPIHelper.getLBSLocationMSG(runtime);
if (Config.LOG_TOFILE) {
ICLogger.logToFile("GPS", msg);
}
- } else if ((timeout ||gps_nosignal) && !lbs_ok) {
+ } else if ((timeout || gps_nosignal) && !lbs_ok) {
//timeout + noLBS +noGPS
ICLogger.i("timeout no location ");
stopCheckLocationResult();
}
}
}
- break;
+ break;
case ICLocation.NORMAL_MOD:
case ICLocation.LOWPOWER_MOD:
case ICLocation.CUSTOM_MOD8_WIFI:
default: {
//wifi优先的话给20秒时间
timeCost = System.currentTimeMillis() - startCheckTime;
- if ((checktimes > WiFiLocationTimeoutInSeconds) || ((startCheckTime != 0L) && (timeCost > WiFiLocationTimeoutInSeconds *1000))) {
- ICLogger.i("waitAndSendLocation WiFi TimeOut " + checktimes + " > "+WiFiLocationTimeoutInSeconds + " or timeCost "+timeCost+"> "+WiFiLocationTimeoutInSeconds*1000+"ms ");
+ if ((checktimes > WiFiLocationTimeoutInSeconds) || ((startCheckTime != 0L) && (timeCost > WiFiLocationTimeoutInSeconds * 1000))) {
+ ICLogger.i("waitAndSendLocation WiFi TimeOut " + checktimes + " > " + WiFiLocationTimeoutInSeconds + " or timeCost " + timeCost + "> " + WiFiLocationTimeoutInSeconds * 1000 + "ms ");
wifi_timeout = true;
}
}
runtime.getLocationInstance().setLocationType(locationtype);
runtime.getLocationInstance().setLocationTime(TimeUtil.getSystemTime3());
- ICLogger.i("waitAndSendLocation startSOSLocation " + startSOSLocation +" or startNomalLocation "+startNomalLocation);
+ ICLogger.i("waitAndSendLocation startSOSLocation " + startSOSLocation + " or startNomalLocation " + startNomalLocation);
if (startSOSLocation) {
StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime);
ICLogger.logToFile("GPS", "WiFi timeout no location ");
}
}
- break;
+ break;
}
ICLogger.i("needCheckAgain " + needCheckAgain);
if (needCheckAgain) {
private static int gpsTimeoutCountOnNoMove = 0;// 记录gps 无信号或者timeout的次数,超过5 就会停止使用gps定位,只要有一次 移动,或者设置为wifi定位,则清零。
private static final int MaxGpsTimeoutCountOnNoMove = 5;//不动的情况最大的gps搜不到星的次数。
- private static boolean skipMoveCheck = false;
+ private static boolean skipMoveCheck = true;
public static void setSkipMoveCheck(boolean _skipMoveCheck) {
private static boolean NoMoveAndNoGPSsignalSkipGpsFlag = 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 String lastMCC = "";
+ private String lastMnc = "";
+ private long lastLAC = 0l;
+ private long lastCID = 0l;
+
+ private boolean checkLBS() {
+ //获取LBS上一次的数据,与当前的数据进行对比即可
+ //只要有一个是变化的,那么我们就认为是变化了
+ ICLocation locationInstance = runtime.getLocationInstance();
+ String mcc = locationInstance.getMCC();
+ ICLogger.d("mcc==> " + mcc);
+ String mnc = locationInstance.getMNC();
+ ICLogger.d("mnc==> " + mnc);
+ long lac = locationInstance.getLAC();
+ ICLogger.d("lac==> " + lac);
+ long gsmStationCID = locationInstance.getGSMStationCID();
+ ICLogger.d("gsmStationCID==> " + gsmStationCID);
+ //判断跟上一次的是否一样,如果一样的话就没有变化
+ //如果变了,那么就返回true
+ ICLogger.d("last ==> lastMCC " + lastMCC + " lastMnc ==> " +
+ lastMnc + " lastLAC ==> " + lastLAC + " lastCID " + lastCID);
+ boolean result = false;
+ if (!lastMCC.equals(mcc) || !lastMnc.equals(mnc) || lastCID != gsmStationCID || lastLAC != lac) {
+ result = true;
+ }
+ //更新值
+ lastMnc = mnc;
+ lastMCC = mcc;
+ lastLAC = lac;
+ lastCID = gsmStationCID;
+ return result;
+ }
+
/***
*noMove and timeout return true
* else return false
*/
private boolean checkNoMoveTimeout() {
+ //先检查LBS,如果LBS变了,那么我们就认为是位置改过了。
+ if (checkLBS()) {
+ ICLogger.d("ON LBS CHANGE...");
+ return false;
+ }
noMove = (runtime.getTotalStepCount() - runtime.getLastStepCount() <= 0);
runtime.updateFZDDevStatusMoving(!noMove); //设置当前运动状态
ICLogger.i("checkNoMoveTimeout last_noMove " + last_noMove + " noMove " + noMove + " lastStepCount " + runtime.getLastStepCount() + " StepCount " + runtime.getTotalStepCount());
private boolean needLocationForBT() {
updateStepCount();//update StepCount,保证每次定位前,计步数据是最新的。防止丢数据。
//如果没有动,且超时。则跳过定位
- NoMoveTimeout = checkNoMoveTimeoutForBT();
- ICLogger.i("BT NoMoveTimeout " + NoMoveTimeout + ", forceLocation=" + forceLocation + ", Config.forceGPSMoveCheck=" + Config.forceGPSMoveCheck + ", skipMoveCheck=" + skipMoveCheck);
-
+ if (skipMoveCheck || Config.forceGPSMoveCheck) {
+ mNoMoveTimeout = false;
+ } else {
+ mNoMoveTimeout = checkNoMoveTimeoutForBT();
+ }
+ ICLogger.d("mNoMoveTimeout ==> " + mNoMoveTimeout);
+ ICLogger.i("BT NoMoveTimeout " + mNoMoveTimeout + ", forceLocation=" + forceLocation + ", " +
+ "Config.forceGPSMoveCheck=" + Config.forceGPSMoveCheck + ", skipMoveCheck=" + skipMoveCheck);
// 不强制定位 且 (WorkingMod 不是紧急模式 或者 强制进行移动检测),且 没有移动过
if ((forceLocation != 1) &&
- (Config.forceGPSMoveCheck == true) &&
- (NoMoveTimeout) && (skipMoveCheck == false)) {
+ (mNoMoveTimeout) && (!skipMoveCheck)) {
ICLogger.i("No Move ,skip BT location!");
return false;
private boolean needLocation() {
updateStepCount();//update StepCount,保证每次定位前,计步数据是最新的。防止丢数据。
//如果没有动,且超时。则跳过定位
- NoMoveTimeout = checkNoMoveTimeout();
- ICLogger.i(" NoMoveTimeout " + NoMoveTimeout + ", forceLocation=" + forceLocation + ", Config.forceGPSMoveCheck=" + Config.forceGPSMoveCheck + ", skipMoveCheck=" + skipMoveCheck);
-
+ if (skipMoveCheck || Config.forceGPSMoveCheck) {
+ mNoMoveTimeout = false;
+ } else {
+ mNoMoveTimeout = checkNoMoveTimeout();
+ }
+ ICLogger.d("mNoMoveTimeout => " + mNoMoveTimeout);
+ ICLogger.i(" NoMoveTimeout " + mNoMoveTimeout + ", forceLocation=" + forceLocation +
+ ", Config.forceGPSMoveCheck=" + Config.forceGPSMoveCheck + ", skipMoveCheck=" + skipMoveCheck);
// 不强制定位 且 (WorkingMod 不是紧急模式 或者 强制进行移动检测),且 没有移动过
- if ((forceLocation != 1) &&
- (Config.forceGPSMoveCheck == true) &&
- (NoMoveTimeout) && (skipMoveCheck == false)) {
+ if ((forceLocation != 1) && mNoMoveTimeout) {
ICLogger.i("No Move ,skip BT location2!");
-
return false;
}
//只做正常定位前是否运动的判断,给定位前蓝牙扫描专用的。和 NeedlocationFotBT 还不同。
ICLogger.i("locating ,skip location!");
return;
}
- //如果没有动,且超时。则跳过定位
- NoMoveTimeout = checkNoMoveTimeout();
+ //默认运动检测开启
+ if (skipMoveCheck || Config.forceGPSMoveCheck) {
+ mNoMoveTimeout = false;
+ } else {
+ //如果没有动,且超时。则跳过定位
+ mNoMoveTimeout = checkNoMoveTimeout();
+ }
/*
不强制定位(一次性强制取消移动检测用,定位后会恢复) &&
(( NORMAL_MOD , LOWPOWER_MOD, CUSTOM_MODE_WIFI 任意一种) || 强制移动检测(其它协议需GPS要强制移动检测用) ) &&
没有移动过 && 不跳过移动检测(其它协议所有项目都需要跳过移动检测时使用)
都满足才检测
*/
- if ( (forceLocation != 1) &&
- (((mod == ICLocation.NORMAL_MOD) || (mod == ICLocation.LOWPOWER_MOD) || (mod == ICLocation.CUSTOM_MOD8_WIFI)) || Config.forceGPSMoveCheck) &&
- (NoMoveTimeout) &&
- (!skipMoveCheck)) {
- ICLogger.i("No Move ,skip location!");
- return;
+ if ((forceLocation != 1) &&
+ (((mod == ICLocation.NORMAL_MOD) ||
+ (mod == ICLocation.LOWPOWER_MOD) ||
+ (mod == ICLocation.CUSTOM_MOD8_WIFI))) && mNoMoveTimeout) {
+ ICLogger.i("No Move ,skip location!");
+ return;
}
- if (NoMoveTimeout) {
+ if (mNoMoveTimeout) {
// 记录gps 无信号或者timeout的次数,超过5 就会停止使用gps定位,只要有一次 移动,或者设置为wifi定位,则清零。
if (gpsTimeoutCountOnNoMove >= MaxGpsTimeoutCountOnNoMove) {
NoMoveAndNoGPSsignalSkipGpsFlag = true;