优化SOS和定位扫描逻辑。
authorsnickersun <snickersun@qq.com>
Sun, 15 Nov 2020 00:37:37 +0000 (08:37 +0800)
committersnickersun <snickersun@qq.com>
Sun, 15 Nov 2020 00:43:36 +0000 (08:43 +0800)
1、BLE扫描 protocol 0 时,第一次进入,或者第一次走出 绑定ble圈都上报一次报警
2、BLE ScanOnly,SOSLocation,NormalLocation 尝试分开处理。

app/src/main/java/com/enqualcomm/support/LocationClient.java

index 5eda9bc..3d72341 100644 (file)
@@ -115,6 +115,8 @@ public class LocationClient {
   private NMEAListener nmeaListener;\r
 \r
   private boolean startSOSLocation=false;\r
+  private boolean startNomalLocation=false;\r
+\r
   private int preLbsCid;\r
   \r
   int preNetworkTypeNomber;\r
@@ -139,19 +141,19 @@ public class LocationClient {
   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
@@ -183,87 +185,102 @@ public class LocationClient {
             }\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
@@ -271,7 +288,7 @@ public class LocationClient {
     });\r
 \r
     btHelper.setBLEScanTimeout(OneBLEScanTimeOUT);\r
-    gLocationCline=this;\r
+    gLocationCline = this;\r
     //GPS 监听管理初始化\r
     this.nmeaListener = new NMEAListener(paramRuntime.getContextProxy().getLocationManager(), paramRuntime);\r
     // 初始化同时开启计步(硬件计步器,比较省电,全程开启计步功能)\r
@@ -446,6 +463,7 @@ public class LocationClient {
               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
@@ -487,7 +505,6 @@ public class LocationClient {
             }\r
           }else if (msg.what == msgWhat_StartSOSLocationProcess){\r
 \r
-\r
             if (runtime !=null) {\r
               //更新lbs信息\r
               CellInfoUtil.getCellInfo(runtime.getContextProxy().getTelephonyManager(),runtime);\r
@@ -591,8 +608,10 @@ public class LocationClient {
                 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
@@ -665,8 +684,9 @@ public class LocationClient {
                 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