Config.ConfigAlarm(Runtime.AlarmType.ALARM_CUTOFF,true);\r
Config.ConfigAlarm(Runtime.AlarmType.ALARM_ILLEGAL_CUTOFF,true);\r
Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH,true);\r
- Config.setNeedAntiOff(runtime.getContextProxy().context,true);\r
- Config.setNeedCutOff(runtime.getContextProxy().context,true);\r
if (Config.getConfigInitFlag(this)==0) {\r
Config.setLocationMode(this, CUSTOM_MOD8_GPS);\r
// Config.setLocationMode(this, CUSTOM_MOD8_WIFI);\r
}\r
\r
Config.dumpAlarmConfig();\r
- //初始化剪断,脱腕报警开关(这个开关是界面提示显示用的,上面的Config.ConfigAlarm 是上报服务器消息的开关)\r
+ //A9专用变量 初始化剪断,脱腕报警开关(这个开关是界面提示显示用的,上面的Config.ConfigAlarm 是上报服务器消息的开关)\r
runtime.setNeddReportCutoff(Config.getNeedCutOff(this));\r
runtime.setNeedAntioff(Config.getNeedAntiOff(this));\r
\r
public void onDestroy() {\r
super.onDestroy();\r
\r
+\r
saveStepCount();\r
this.connectionServiceChain.processDetach(this.connection, this.runtime);\r
this.invokeHandlerServiceChain.processDetach(this.connection, this.runtime);\r
int preNetworkTypeNomber;\r
private boolean scanBLEOnly=false;\r
\r
+ //如果未扫到,重试扫描的次数。\r
+ private int maxBLEScanTime=2;\r
+ private int ScanBLERetryCount=maxBLEScanTime;\r
+\r
+\r
+\r
private static LocationClient gLocationCline=null;\r
// private BroadcastReceiver screenOnReceiver = new BroadcastReceiver() {\r
// public void onReceive(Context param1Context, Intent param1Intent) {\r
break;\r
}\r
}\r
- runtime.bleInfo.is_in_area = in_area;\r
+ if(in_area == false && ScanBLERetryCount-- > 0){\r
+ //如果没有扫描到,且扫描次数没有超限,则重新扫描一次。注意要delay 5秒\r
+ try{\r
+ Thread.sleep(5000);\r
+ }catch ( Exception e){}\r
+ //Do retry Scan\r
+ ICLogger.i("BT BLE not found retry Scan "+ ScanBLERetryCount);\r
+ btHelper.scanBLE();\r
+ return ;\r
+ }else {\r
+ runtime.bleInfo.is_in_area = in_area;\r
+ ScanBLERetryCount=maxBLEScanTime;\r
+ }\r
+\r
}catch(Exception e){//如果出错,原来的状态不要变。防止误报,最多延迟一个周期报。\r
e.printStackTrace();\r
ICLogger.i(e.getMessage());\r
}\r
} else {\r
runtime.bleInfo.is_in_area = false;\r
+ ScanBLERetryCount=maxBLEScanTime;\r
}\r
ICLogger.i("Bt Dev Is in Area " + runtime.bleInfo.is_in_area);\r
\r
if(scanBLEOnly==true){\r
+ //只扫描蓝牙,不做定位\r
if (runtime.bleInfo.is_in_area == false ) {\r
runtime.updateFZDDevStatusEscape(true);\r
ICLogger.i("BT 不在区域内");\r
//只有上一次在区域内,这次出区域才需要报警\r
ICLogger.i("BT 不在区域内,且上次在区域内,报警!");\r
//如果需要报警定位,则强制进行sos定位,不能通过triggerSOS,因为函数中调用了BLEScan会造成循环调用\r
- if (donotScanWiFi){\r
+\r
StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
DeliverMessage(AL_CMD);\r
- }else {\r
- startSOSLocation = true;//启动SOS定位,为了快速响应,只要wifi定位即可。\r
- forceLocation = 1;\r
- startLocationProcess(ICLocation.NORMAL_MOD);\r
- }\r
+\r
\r
}\r
}else{\r
runtime.updateFZDDevStatusEscape(false);\r
}\r
}else {\r
+ //定位前的蓝牙扫描\r
if (runtime.bleInfo.is_in_area == false) {\r
ICLogger.i("BT 不在区域内,开启定位流程");\r
runtime.updateFZDDevStatusEscape(true);\r
if ( runtime.bleInfo.last_is_in_area==true) {\r
//只有上一次在区域内,这次出区域才需要报警\r
ICLogger.i("BT 不在区域内,且上次在区域内,报警!");\r
- if (donotScanWiFi){\r
+\r
StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
DeliverMessage(AL_CMD);\r
startSOSLocation=false;\r
- }else {\r
- //如果需要报警定位,则强制进行sos定位,不能通过triggerSOS,因为函数中调用了BLEScan会造成循环调用\r
- startSOSLocation = true;//启动SOS定位,为了快速响应,只要wifi定位即可。\r
- forceLocation = 1;\r
- startLocationProcess(ICLocation.NORMAL_MOD);\r
- }\r
+\r
}else {\r
\r
if (startSOSLocation) {\r
- if (donotScanWiFi) {\r
+\r
StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
DeliverMessage(AL_CMD);\r
startSOSLocation=false;\r
- } else {\r
- startLocationProcess(ICLocation.NORMAL_MOD);\r
- }\r
+\r
} else {\r
startLocationProcess(runtime.getLocationInstance().getWorkingMod());\r
}\r
mhandler.sendEmptyMessage(msgWhat_StartBLEProcess);\r
}\r
\r
- private static boolean donotScanWiFi=true;\r
public void triggerSOSLocationProcess(){\r
\r
\r
- if (donotScanWiFi){\r
- updateCellInfo();\r
- if (runtime.bleInfo.btMacList.size() > 0) {\r
- //有蓝牙搜索要求则 先进行蓝牙扫描\r
- startSOSLocation=true;//启动SOS定位,为了快速响应,只要wifi定位即可。\r
- forceLocation=1;\r
- if (needLocationForBT())\r
- btHelper.scanBLE();\r
- } else {\r
- try{\r
- Thread.sleep(1000);\r
- }catch (Exception e){}\r
- StringMessage waningmsg=protocolAPIHelper.getWarningMSG(runtime);\r
- DeliverMessage(waningmsg);\r
- }\r
\r
- }else {\r
- mhandler.sendEmptyMessage(msgWhat_StartSOSLocationProcess);\r
- }\r
+ (new Thread(new Runnable() {\r
+ public void run() {\r
+\r
+ if (runtime !=null) {\r
+ //更新lbs信息\r
+ CellInfoUtil.getCellInfo(runtime.getContextProxy().getTelephonyManager(),runtime);\r
+\r
+ if (runtime.bleInfo.btMacList.size() > 0) {\r
+ //有蓝牙搜索要求则 先进行蓝牙扫描\r
+ startSOSLocation=true;//启动SOS定位,为了快速响应,只要wifi定位即可。\r
+ forceLocation=1;\r
+ if (needLocationForBT())\r
+ btHelper.scanBLE();\r
+ } else {\r
+ try{\r
+ Thread.sleep(1000);\r
+ }catch (Exception e){}\r
+ StringMessage waningmsg=protocolAPIHelper.getWarningMSG(runtime);\r
+ DeliverMessage(waningmsg);\r
+ }\r
+ }\r
+\r
+ }\r
+ })).start();\r
+\r
+\r
+// mhandler.sendEmptyMessage(msgWhat_StartSOSLocationProcess);\r
+\r
}\r
\r
private static int checktimes=0;\r
if ( ( forceLocation != 1 ) &&\r
(Config.forceMoveCheck==true) &&\r
(NoMoveTimeout) && (skipMoveCheck ==false )){\r
- ICLogger.i("No Move ,skip location!");\r
+ ICLogger.i("No Move ,skip BT location!");\r
return false;\r
}\r
return true;\r
\r
runtime.setLastStepCount(runtime.getTotalStepCount());\r
updateCellInfo();\r
- startWifiScan();\r
+ if(!Config.disableWiFiScan) startWifiScan();\r
switch(mod){\r
case ICLocation.CUSTOM_MOD:\r
case ICLocation.CUSTOM_MOD8_GPS:\r