private NMEAListener nmeaListener;\r
\r
private boolean startSOSLocation=false;\r
+ private boolean startNomalLocation=false;\r
+\r
private int preLbsCid;\r
\r
int preNetworkTypeNomber;\r
public LocationClient(Connection paramNettyConnection, Runtime paramRuntime) {\r
connection = paramNettyConnection;\r
runtime = paramRuntime;\r
- btHelper=BTHelper.CreateInstance(paramRuntime, new BTHelper.BTScanCallback() {\r
+ btHelper = BTHelper.CreateInstance(paramRuntime, new BTHelper.BTScanCallback() {\r
@Override\r
public void OnScanFinished(ArrayList<String> btPairedScanResult, ArrayList<String> btNewScanResult) {\r
- if(Config.BLEScanProtocol==0) { //扫描并判定是否在区域内。\r
- if (btNewScanResult!=null && btNewScanResult.size() > 0) {\r
- StringBuilder sb=new StringBuilder();\r
- sb.append("found bt mac ").append(btNewScanResult.size() );\r
- sb.append(" bounding BeaconMacList ").append(runtime.bleInfo.btMacList.size() );\r
- runtime.bleInfo.btScanResult.clear();\r
- for(String mac:runtime.bleInfo.btMacList){\r
- sb.append(" ").append(mac);\r
- }\r
- ICLogger.i( sb.toString() );\r
+ if (Config.BLEScanProtocol == 0) { //扫描并判定是否在区域内。\r
+ if (btNewScanResult != null && btNewScanResult.size() > 0) {\r
+ StringBuilder sb = new StringBuilder();\r
+ sb.append("found bt mac ").append(btNewScanResult.size());\r
+ sb.append(" bounding BeaconMacList ").append(runtime.bleInfo.btMacList.size());\r
+ runtime.bleInfo.btScanResult.clear();\r
+ for (String mac : runtime.bleInfo.btMacList) {\r
+ sb.append(" ").append(mac);\r
+ }\r
+ ICLogger.i(sb.toString());\r
\r
\r
boolean in_area = false;\r
}\r
\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
- if ( runtime.bleInfo.last_is_in_area==true) {\r
- //只有上一次在区域内,这次出区域才需要报警\r
- ICLogger.i("BT 不在区域内,且上次在区域内,报警!");\r
- //如果需要报警定位,则强制进行sos定位,不能通过triggerSOS,因为函数中调用了BLEScan会造成循环调用\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
+ if (runtime.bleInfo.last_is_in_area == true) {\r
+ //只有上一次在区域内,这次出区域才需要报警\r
+ ICLogger.i("BT 不在区域内,且上次在区域内,报警!");\r
+ //如果需要报警定位,则强制进行sos定位,不能通过triggerSOS,因为函数中调用了BLEScan会造成循环调用\r
+ StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
+ DeliverMessage(AL_CMD);\r
+ }\r
+ } else {\r
+ ICLogger.i("BT 在区域内!");\r
+ runtime.updateFZDDevStatusEscape(false);\r
+ if (runtime.bleInfo.last_is_in_area == false) {\r
+ //上一次不在区域内,这次进区域要报警\r
+ ICLogger.i("BT 进入区域内,且上次不在区域内,报警!");\r
+ //如果需要报警定位,则强制进行sos定位,不能通过triggerSOS,因为函数中调用了BLEScan会造成循环调用\r
StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
DeliverMessage(AL_CMD);\r
+ }\r
}\r
- }else{\r
- ICLogger.i("BT 在区域内!");\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
+ } 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
\r
StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
DeliverMessage(AL_CMD);\r
- startSOSLocation=false;\r
-\r
- }else {\r
-\r
- if (startSOSLocation) {\r
+ startSOSLocation = false; //如果已经报警,后面就不用再报了\r
+ }\r
\r
- StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
- DeliverMessage(AL_CMD);\r
- startSOSLocation=false;\r
+ if (startSOSLocation) {\r
+ StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
+ DeliverMessage(AL_CMD);\r
+ startSOSLocation = false;\r
+ }\r
+ if (startNomalLocation) {\r
+ startLocationProcess(runtime.getLocationInstance().getWorkingMod());\r
+ }\r
\r
- } else {\r
- startLocationProcess(runtime.getLocationInstance().getWorkingMod());\r
- }\r
+ } else {\r
+ ICLogger.i("BT 在区域内,直接发送区域坐标即可!");\r
+ runtime.updateFZDDevStatusEscape(false);\r
+ if (runtime.bleInfo.last_is_in_area == false) {\r
+ //上一次不在区域内,这次进区域要报警\r
+ ICLogger.i("BT 进入区域内,且上次不在区域内,报警!");\r
+ //如果需要报警定位,则强制进行sos定位,不能通过triggerSOS,因为函数中调用了BLEScan会造成循环调用\r
+ StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
+ DeliverMessage(AL_CMD);\r
+ startSOSLocation = false;//如果已经报警,后面就不用再报了\r
+ }\r
\r
- }\r
- } else {\r
- ICLogger.i("BT 在区域内,直接发送区域坐标即可!");\r
- runtime.updateFZDDevStatusEscape(false);\r
- if(startSOSLocation) {\r
- StringMessage AP01_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
- DeliverMessage(AP01_CMD);\r
- startSOSLocation=false;\r
- }else {\r
+ if (startSOSLocation) {\r
+ StringMessage AP01_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
+ DeliverMessage(AP01_CMD);\r
+ startSOSLocation = false;\r
+ }\r
+ if (startNomalLocation) {\r
//已经通过蓝牙定位,则清除 forceLocation=0\r
- forceLocation=0;\r
+ forceLocation = 0;\r
+ startNomalLocation = false; //蓝牙定位,直接发GPS坐标\r
StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);\r
DeliverMessage(AP01_CMD);\r
+ }\r
}\r
}\r
- }\r
\r
- //处理过此次数据后,把当前状态赋值给上次检测状态\r
- runtime.bleInfo.last_is_in_area=runtime.bleInfo.is_in_area;\r
- //扫描结束就清掉scanBLEOnly,保证下次不会被误操作。\r
- scanBLEOnly=false;\r
- }else{\r
+ //处理过此次数据后,把当前状态赋值给上次检测状态\r
+ runtime.bleInfo.last_is_in_area = runtime.bleInfo.is_in_area;\r
+ //扫描结束就清掉scanBLEOnly,保证下次不会被误操作。\r
+ scanBLEOnly = false;\r
+ } else {\r
//Config.BLEScanProtocol == 1\r
- if (btNewScanResult!=null && btNewScanResult.size() > 0) {\r
+ if (btNewScanResult != null && btNewScanResult.size() > 0) {\r
StringBuilder sb = new StringBuilder();\r
sb.append("found bt mac ").append(btNewScanResult.size());\r
runtime.bleInfo.btScanResult.clear();\r
for (String mac : btNewScanResult) {\r
sb.append("\n").append(mac);\r
- runtime.bleInfo.btScanResult.add(mac.replace(":",""));\r
+ runtime.bleInfo.btScanResult.add(mac.replace(":", ""));\r
}\r
ICLogger.i(sb.toString());\r
Deliver.sendLocationMSG(protocolAPIHelper.getBLEScanResult(runtime));\r
- }else{\r
+ } else {\r
ICLogger.i("未搜到蓝牙设备!");\r
}\r
}\r
});\r
\r
btHelper.setBLEScanTimeout(OneBLEScanTimeOUT);\r
- gLocationCline=this;\r
+ gLocationCline = this;\r
//GPS 监听管理初始化\r
this.nmeaListener = new NMEAListener(paramRuntime.getContextProxy().getLocationManager(), paramRuntime);\r
// 初始化同时开启计步(硬件计步器,比较省电,全程开启计步功能)\r
public void call(Object param1Object) { waitAndSendLocation(); }\r
});\r
}else if (msg.what == msgWhat_StartLocationProcess) {\r
+ startNomalLocation=true;\r
if (Config.BLEScanProtocol == 0 && runtime.bleInfo.btMacList.size() > 0) {\r
if(scanBLEOnly && btHelper.isBtscanning()){\r
//如果正在进行独立蓝牙扫描,则强制切换为正常扫描。\r
}\r
}else if (msg.what == msgWhat_StartSOSLocationProcess){\r
\r
-\r
if (runtime !=null) {\r
//更新lbs信息\r
CellInfoUtil.getCellInfo(runtime.getContextProxy().getTelephonyManager(),runtime);\r
StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
DeliverMessage(AP10_CMD);\r
startSOSLocation=false;\r
- }else {\r
+ }\r
\r
+ if(startNomalLocation=true){\r
+ startNomalLocation=false;\r
if (gps_ok) {\r
StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);\r
DeliverMessage(AP01_CMD);\r
StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
DeliverMessage(AP10_CMD);\r
startSOSLocation=false;\r
-\r
- }else {\r
+ }\r
+ if(startNomalLocation=true){\r
+ startNomalLocation=false;\r
StringMessage AP02_CMD = protocolAPIHelper.getLBSLocationMSG(runtime);\r
DeliverMessage(AP02_CMD);\r
}\r