release V463
authorsnickersun <scy@incartech.cn>
Wed, 29 Jul 2020 13:21:30 +0000 (21:21 +0800)
committersnickersun <scy@incartech.cn>
Wed, 29 Jul 2020 13:21:30 +0000 (21:21 +0800)
protocol_fzd 添加PING,UD,CR,PHL协议
解决绑定、位置上传、立即定位、通讯录功能

12 files changed:
app/release/ICSer_V463_2007292110_release.apk [moved from app/release/ICSer_V462_2007281030_release.apk with 79% similarity]
app/release/output.json
app/src/main/java/com/enqualcomm/support/adapter/LBSHelper.java
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/enqualcomm/support/service/KeepAlive.java
app/src/main/java/com/enqualcomm/support/utils/CellInfoUtil.java
app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java
app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java
app/src/main/java/com/enqualcomm/support/utils/regexUtil.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_fzd.java
app/version_code.properties

similarity index 79%
rename from app/release/ICSer_V462_2007281030_release.apk
rename to app/release/ICSer_V463_2007292110_release.apk
index c977aec..3b7de6d 100644 (file)
Binary files a/app/release/ICSer_V462_2007281030_release.apk and b/app/release/ICSer_V463_2007292110_release.apk differ
index 95f4bda..e1254de 100644 (file)
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":462,"versionName":"2007281030","enabled":true,"outputFile":"ICSer_V462_2007281030_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V462_2007281030_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":463,"versionName":"2007292110","enabled":true,"outputFile":"ICSer_V463_2007292110_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V463_2007292110_release.apk","properties":{}}]
\ No newline at end of file
index 000629c..44814e7 100644 (file)
@@ -187,7 +187,6 @@ public class LBSHelper {
         } else {\r
             this.sortByLevel(aplist);\r
             StringBuilder sb = new StringBuilder("");\r
-            StringBuilder sbAP02 = new StringBuilder("");\r
             StringBuilder sblog = new StringBuilder("");\r
             Iterator it = aplist.iterator();\r
             int count = 0;\r
index e46d1cb..c3c207a 100644 (file)
@@ -514,17 +514,79 @@ public class Runtime {
     return sb.toString();\r
   }\r
 \r
+    public String getFZDGPSData(){\r
+\r
+/***\r
+ * A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6\r
+ * A,gps 定位有效\r
+ * 22.570733,纬度 N,\r
+ * 113.8626083,经度 E,\r
+ * 0.00,速度\r
+ * 249.5,方向\r
+ * 0.0,海拔\r
+ * 6,卫星个数\r
+ */\r
+        StringBuilder sb=new StringBuilder();\r
+        int speedi=(int)gpsp.getLocation().speed;\r
+        int speedl=(int) ((gpsp.getLocation().speed - speedi)*100);\r
+        String latStr=gpsp.getLocation().latGPSStr;\r
+        String lonStr=gpsp.getLocation().lonGPSStr;\r
+        String heading=String.valueOf(gpsp.getLocation().heading);\r
+        int starcount=gpsp.getLocation().used_gps_numbs;\r
+        if (isGPSFixed())\r
+        {\r
+            String gpsStr = String.format(",%s,N,%s,E,%d.%02d,%s,0.0,%d", latStr, lonStr, speedi, speedl,heading,starcount);\r
+            sb.append("A").append(gpsStr);\r
+\r
+        }else{\r
+            String gpsStr=String.format(",0.000,N,0.000,E,0.0,0.0,0.0,0");\r
+            sb.append("V").append(gpsStr);\r
+        }\r
+\r
+\r
+        return sb.toString();\r
+    }\r
+\r
+    public String getFZDDevStatus(){\r
+      return "00000000";\r
+    }\r
   public String getGPSHeading(){\r
     int headingi=(int)gpsp.getLocation().heading;\r
     int headingl=(int) ((gpsp.getLocation().heading - headingi)*100);\r
     String gpsStr=String.format("%03d.%02d",headingi,headingl);\r
     return gpsStr;\r
   }\r
+    public String getFZDLBSMultiStationData(){\r
+        return mFZDLBSMultiStationData;\r
+    }\r
+\r
+    public String getFZDWifiData(){\r
 \r
+        int apsum=0;\r
+        String wifiinfo=getWifiInfo();\r
+        if (!wifiinfo.isEmpty()) {\r
+            String[] list = wifiinfo.split("&");\r
+            apsum = list.length;\r
+        }\r
+        StringBuffer sb=new StringBuffer();\r
+        if (apsum==0){\r
+            sb.append(apsum);\r
+        }else{\r
+            sb.append(apsum).append(",");\r
+            wifiinfo=wifiinfo.replace("&",",").replace("|",",");\r
+            sb.append(wifiinfo);\r
+        }\r
+        return sb.toString();\r
+    }\r
   private static String mLBSMultiStationData="";\r
   public void setLBSMultiStationData(String data){\r
       mLBSMultiStationData=data;\r
   }\r
+\r
+    private static String mFZDLBSMultiStationData="";\r
+    public void setFZDLBSMultiStationData(String data){\r
+        mFZDLBSMultiStationData=data;\r
+    }\r
   //AP03 用的多基站定位数据\r
   public String getLBSMultiStationData(){\r
       //        7: 表示共有7组基站\r
index d16deb7..69b711c 100644 (file)
@@ -110,8 +110,15 @@ public class KeepAlive extends AbstractConnectionService {
           //更新系统的IMEI\r
           boolean ret=DeviceInfoUtil.updateImei(mRuntime);\r
           ICLogger.i("Update IMEI "+ret);\r
-          if (is_login_send_success)\r
-            connection.send(protocolAPIHelper.genStringMessage("heartbeat", protocolAPIHelper.getHeartbeatMSG(mRuntime)));\r
+          if (is_login_send_success) {\r
+              connection.send(protocolAPIHelper.genStringMessage("heartbeat", protocolAPIHelper.getHeartbeatMSG(mRuntime)));\r
+              Observable.timer(1000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+                  public void call(Long param1Long) {\r
+                      connection.send(protocolAPIHelper.genStringMessage("binding", protocolAPIHelper.getBindingMSG()));\r
+\r
+                  }\r
+              });\r
+          }\r
           else\r
             connection.send(protocolAPIHelper.genStringMessage("heartbeat", protocolAPIHelper.getLoginMSG(mRuntime)));\r
 \r
@@ -256,7 +263,7 @@ public class KeepAlive extends AbstractConnectionService {
     is_login_send_success=false;\r
     Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
       public void call(Long param1Long) {\r
-        connection.send(protocolAPIHelper.genStringMessage("AP00",protocolAPIHelper.getLoginMSG(paramRuntime)));\r
+        connection.send(protocolAPIHelper.genStringMessage("login",protocolAPIHelper.getLoginMSG(paramRuntime)));\r
 \r
       }\r
     });\r
@@ -288,6 +295,12 @@ public class KeepAlive extends AbstractConnectionService {
     //发送心跳包\r
     connection.send(protocolAPIHelper.genStringMessage("heartbeat",protocolAPIHelper.getHeartbeatMSG(paramRuntime)));\r
         //发送完心跳后,开始检查服务器响应\r
+      Observable.timer(1000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+          public void call(Long param1Long) {\r
+              connection.send(protocolAPIHelper.genStringMessage("binding", protocolAPIHelper.getBindingMSG()));\r
+\r
+          }\r
+      });\r
     startResponseCheckTimer();\r
 \r
 \r
@@ -329,6 +342,12 @@ public class KeepAlive extends AbstractConnectionService {
           mRuntime.setServerProtocolConnected(false);\r
           connection.send(protocolAPIHelper.genStringMessage("heartbeat",protocolAPIHelper.getHeartbeatMSG(paramRuntime)));\r
           //发送完心跳后,开始检查服务器响应\r
+            Observable.timer(1000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+                public void call(Long param1Long) {\r
+                    connection.send(protocolAPIHelper.genStringMessage("binding", protocolAPIHelper.getBindingMSG()));\r
+\r
+                }\r
+            });\r
           startResponseCheckTimer();\r
         }\r
       });\r
index 03d4dd7..1894b4e 100644 (file)
@@ -173,15 +173,14 @@ public class CellInfoUtil {
         return null;\r
       } else {\r
         StringBuilder gsmSb = new StringBuilder(mccmnc);\r
+        gsmSb.insert(3, ",");\r
 \r
         StringBuilder cdmaSB = new StringBuilder();\r
-        gsmSb.insert(3, ",");\r
         runtime.setMccAndMnc(gsmSb.toString());\r
+\r
         if (celllocation instanceof GsmCellLocation) {\r
           GsmCellLocation gsmCell = (GsmCellLocation)celllocation;\r
             runtime.setCdmaInfo(null);\r
-\r
-\r
           //AP01 Single GSM Station\r
           gsmSb.append(",");\r
           gsmSb.append(gsmCell.getLac());\r
@@ -200,7 +199,10 @@ public class CellInfoUtil {
           List neighboringCell_list = telephonyManager.getNeighboringCellInfo();\r
             //AP02 Multi GSM Station\r
             StringBuilder gsmSbMulti = new StringBuilder();\r
-            int size=1;\r
+\r
+          StringBuilder gsmSbMultiFZD = new StringBuilder();\r
+\r
+          int size=1;\r
             if (neighboringCell_list != null && !neighboringCell_list.isEmpty())\r
                 size +=neighboringCell_list.size();\r
             StringBuilder mmcmnc1 = new StringBuilder(mccmnc);\r
@@ -214,7 +216,21 @@ public class CellInfoUtil {
             gsmSbMulti.append(gsmCell.getCid());\r
             gsmSbMulti.append("|");\r
             gsmSbMulti.append(150-Math.abs(getSignal(telephonyManager,runtime)));\r
-            if (neighboringCell_list != null && !neighboringCell_list.isEmpty()) {\r
+\r
+\r
+          gsmSbMultiFZD.append(size);\r
+          gsmSbMultiFZD.append(",");\r
+          gsmSbMultiFZD.append(1);\r
+          gsmSbMultiFZD.append(",");\r
+          gsmSbMultiFZD.append(mmcmnc1);\r
+          gsmSbMultiFZD.append(",");\r
+          gsmSbMultiFZD.append(gsmCell.getLac());\r
+          gsmSbMultiFZD.append(",");\r
+          gsmSbMultiFZD.append(gsmCell.getCid());\r
+          gsmSbMultiFZD.append(",");\r
+          gsmSbMultiFZD.append(150-Math.abs(getSignal(telephonyManager,runtime)));\r
+\r
+          if (neighboringCell_list != null && !neighboringCell_list.isEmpty()) {\r
               sortByRssi(neighboringCell_list);\r
 \r
               Iterator cell = neighboringCell_list.iterator();\r
@@ -231,6 +247,14 @@ public class CellInfoUtil {
                 gsmSbMulti.append(mNeighboringCellInfo.getCid());\r
                 gsmSbMulti.append("|");\r
                 gsmSbMulti.append( 150-Math.abs(mNeighboringCellInfo.getRssi()));\r
+\r
+              gsmSbMultiFZD.append(",");\r
+              gsmSbMultiFZD.append(mNeighboringCellInfo.getLac());\r
+              gsmSbMultiFZD.append(",");\r
+              gsmSbMultiFZD.append(mNeighboringCellInfo.getCid());\r
+              gsmSbMultiFZD.append(",");\r
+              gsmSbMultiFZD.append( 150-Math.abs(mNeighboringCellInfo.getRssi()));\r
+\r
                 maxstationCount ++;\r
               if (maxstationCount == 5) {\r
 //                break;\r
@@ -238,9 +262,12 @@ public class CellInfoUtil {
             }\r
           }\r
           ICLogger.i("LBS GsmCellLocation MultiStation "+ gsmSbMulti.toString());\r
-          if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", gsmSbMulti.toString());\r
+          ICLogger.i("FZD LBS GsmCellLocation MultiStation "+ gsmSbMultiFZD.toString());\r
+          if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", "LBS GsmCellLocation MultiStation "+ gsmSbMulti.toString());\r
+          if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", "FZD LBS GsmCellLocation MultiStation "+ gsmSbMultiFZD.toString());\r
 \r
-            runtime.setLBSMultiStationData(gsmSbMulti.toString());\r
+          runtime.setLBSMultiStationData(gsmSbMulti.toString());\r
+          runtime.setFZDLBSMultiStationData(gsmSbMultiFZD.toString());\r
 \r
           return gsmSb.toString();\r
         } else if (celllocation instanceof CdmaCellLocation) {\r
index cfae092..564a43e 100644 (file)
@@ -300,6 +300,7 @@ public class NettyConnection implements Connection {
   public void send(StringMessage paramStringMessage) {\r
 \r
       sendMsg(paramStringMessage.isFromCache());\r
+      ICLogger.logToFile("APILog",paramStringMessage.isFromCache());\r
       ICLogger.i(paramStringMessage.isFromCache());\r
 \r
   }\r
index 7dd0cf2..ce5d3f4 100644 (file)
@@ -41,7 +41,9 @@ public class TimeUtil {
   public static String getSystemDateYYMMDD(){\r
     return (new SimpleDateFormat("yyMMdd")).format(new Date(System.currentTimeMillis()));\r
   }\r
-\r
+  public static String getSystemTimeHHmmss(){\r
+    return (new SimpleDateFormat("HHmmss")).format(new Date(System.currentTimeMillis()));\r
+  }\r
   public static Date parseDatetiime(String datetimeStr){\r
 \r
     SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH);//输入的被转化的时间格式\r
index d9e7fd7..4a1f510 100644 (file)
@@ -13,7 +13,7 @@ import java.util.regex.Pattern;
 public class regexUtil {\r
 \r
         public static final Pattern PATTERN_FZD_CMD_HEADER= Pattern\r
-                .compile("\\[IC\\*\\d{15}\\*\\d*\\*[a-zA-Z0-9]+$");\r
+                .compile("IC\\*\\d{15}\\*\\d*\\*[a-zA-Z0-9]+$");\r
         /**\r
          * 车牌号码Pattern\r
          */\r
@@ -150,12 +150,11 @@ public class regexUtil {
 \r
 \r
         public static boolean isFZDCMD(String s){\r
-            Matcher m = PLATE_NUMBER_PATTERN.matcher(s);\r
-            return m.matches();\r
+            return Pattern.compile("IC\\*\\d{15}\\*[a-fA-F0-9]{4}\\*[a-zA-Z0-9]+$").matcher(s).matches();\r
         }\r
 \r
         public static boolean isFZDCMD(String cmd, String s){\r
-           return Pattern.compile("\\[IC\\*\\d{15}\\*\\d*\\*"+cmd).matcher(s).matches();\r
+           return Pattern.compile("IC\\*\\d{15}\\*[a-fA-F0-9]{4}\\*"+cmd).matcher(s).matches();\r
         }\r
 \r
 }\r
index 62e9f1d..8ee9c23 100644 (file)
@@ -76,6 +76,27 @@ public class protocolAPIHelper {
         }\r
         return ret;\r
     }\r
+\r
+    public static String getBindingMSG(){\r
+        String ret="";\r
+        switch(Config.protocol_no)\r
+        {\r
+            case Config.PROTOCOL_JIAI:\r
+                ret="";\r
+                break;\r
+            case Config.PROTOCOL_BEEHOME:\r
+                ret="";\r
+                break;\r
+            case Config.PROTOCOL_IC:\r
+                ret="";\r
+                break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret=protocol_fzd.PING();\r
+                break;\r
+        }\r
+        return ret;\r
+    }\r
+\r
     public static String getTemperatureMSG(double temp_adusted,double body_temp){\r
         String ret="";\r
         switch(Config.protocol_no)\r
@@ -169,7 +190,7 @@ public class protocolAPIHelper {
                 ret=protocol_ic.AP01(runtime);\r
                 break;\r
             case Config.PROTOCOL_FZD:\r
-                ret="";\r
+                ret=protocol_fzd.UD(runtime);\r
                 break;\r
         }\r
         return ret;\r
@@ -188,7 +209,7 @@ public class protocolAPIHelper {
                 ret=protocol_ic.AP02(runtime);\r
                 break;\r
             case Config.PROTOCOL_FZD:\r
-                ret="";\r
+                ret=protocol_fzd.UD(runtime);\r
                 break;\r
         }\r
         return ret;\r
index 0d95a13..bc544fe 100644 (file)
@@ -46,7 +46,7 @@ public class protocol_fzd {
     private static final String CMDHEADERSPLIT = "*";\r
     private static final String CMDSPLIT = ",";\r
 \r
-    public static final String defaultServerIP="fzd.xcloudtech.com";\r
+    public static final String defaultServerIP="api.xcloudtech.com";\r
     public static final int defaultServerPort=9000;\r
 \r
     public enum CMD_TYPE {\r
@@ -86,6 +86,7 @@ public class protocol_fzd {
         FIND,//找手表指令\r
         REMIND,//闹钟设置指令\r
         TK,//对讲功能(微聊发送语音)\r
+        PHL,//设置电话本+白名单(最多 50 条)\r
         UNKNOWN_CMD,\r
     }\r
 \r
@@ -126,6 +127,7 @@ public class protocol_fzd {
         cmdMap.put(CMD_TYPE.FIND, "FIND");\r
         cmdMap.put(CMD_TYPE.REMIND, "REMIND");\r
         cmdMap.put(CMD_TYPE.TK, "TK");\r
+        cmdMap.put(CMD_TYPE.PHL, "PHL");\r
     }\r
 \r
     private NettyConnection mConnection=null;\r
@@ -181,9 +183,26 @@ public class protocol_fzd {
     否则返回 空字符串\r
      */\r
     public static String isCmdStr(String msg) {\r
-        if (regexUtil.isFZDCMD(msg)) {\r
+        String cmd_msgbuf=msg;\r
+        int  cmdindex =cmd_msgbuf.indexOf(CMDCOMPANY+CMDHEADERSPLIT);\r
+        if (cmdindex>0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据\r
+            String cmd=cmd_msgbuf.substring(cmdindex);\r
+            cmd_msgbuf=cmd;\r
+        }\r
+        cmdindex=cmd_msgbuf.indexOf(CMDEND);\r
+        if(cmdindex>0){\r
+            String cmd=cmd_msgbuf.substring(0,cmdindex);\r
+            cmd_msgbuf=cmd;\r
+        }\r
+        cmdindex=cmd_msgbuf.indexOf(CMDSPLIT);\r
+        if(cmdindex>0){\r
+            String cmd=cmd_msgbuf.substring(0,cmdindex);\r
+            cmd_msgbuf=cmd;\r
+        }\r
+\r
+        if (regexUtil.isFZDCMD(cmd_msgbuf)) {\r
             for (CMD_TYPE key : cmdMap.keySet()) {\r
-                if (regexUtil.isFZDCMD(cmdMap.get(key), msg)) { //如果是FZD命令,则进行处理,否则保留数据动\r
+                if (regexUtil.isFZDCMD(cmdMap.get(key), cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动\r
                     ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key));\r
                     return cmdMap.get(key);\r
                 }\r
@@ -203,7 +222,7 @@ public class protocol_fzd {
         log("bytes.size "+bytes.length);\r
         cmdbuf.append(cmd_msgbuf);\r
         log("cmdbuf.size "+cmdbuf.length() +" "+cmdbuf.toString());\r
-        int  cmdindex =cmd_msgbuf.indexOf(CMDHEADER+CMDCOMPANY+CMDHEADERSPLIT);\r
+        int  cmdindex =cmd_msgbuf.indexOf(CMDCOMPANY+CMDHEADERSPLIT);\r
         if (cmdindex>0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据\r
             String cmd=cmd_msgbuf.substring(cmdindex);\r
             cmd_msgbuf=cmd;\r
@@ -225,8 +244,8 @@ public class protocol_fzd {
             for (CMD_TYPE key : cmdMap.keySet()) {\r
                // ICLogger.i("key "+cmdMap.get(key)+" cmdbuf "+cmd_msgbuf);\r
                 if (regexUtil.isFZDCMD(cmdMap.get(key),cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动\r
-                    String data=cmdbuf.toString().replace(cmd_msgbuf,"").replace(CMDEND,"");\r
-                    ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " ,  " + cmdbuf.toString() + "  "+cmd_msgbuf  + " data "+data );\r
+                    String data=cmdbuf.toString().replace(CMDHEADER,"").replace(cmd_msgbuf,"").replace(CMDEND,"");\r
+//                    ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " ,  " + cmdbuf.toString() + "  "+cmd_msgbuf  + " data "+data );\r
 //                    if (key == CMD_TYPE.TK) {\r
 //                        //如果是BP28则 后面的数据是音频,需要保留\r
 //                        byte[] amrBuf;\r
@@ -235,9 +254,7 @@ public class protocol_fzd {
 //                            handleCmd(key, cmdlist[i], bytes);\r
 //                        }\r
 //                    } else {\r
-\r
-\r
-                        handleCmd(key, data);\r
+                        handleCmd(key, cmd_msgbuf,data);\r
                         cmdbuf.delete(0,cmdbuf.length());//处理后清空\r
 //                    }\r
                 }\r
@@ -336,30 +353,61 @@ public class protocol_fzd {
     }\r
 \r
 \r
+    public void handleKA(Runtime runtime,String data){\r
 \r
+    }\r
 \r
     /*LBS+GPS混合定位*/\r
-    public static String AP01(Runtime ds) {\r
-        //示例数据:IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102,\r
-        // 460,0,9520,3671,\r
-        // Home|74-DE-2B-44-88-8C|97& Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97& Home3|74-DE-2B-44-88-8C|97#\r
-//        IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,#\r
-        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.LK)).append(TimeUtil.getShortDate())\r
-                .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength())))\r
-                .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")\r
-                .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)\r
-                .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString();\r
-    }\r
+    public static String UD(Runtime runtime) {\r
+        /***\r
+         * [IC*334588000000156*00CD*UD,180916,025723,A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6,100, 60,0,0,00000010,7,255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,126,95\r
+         * 29,21242,124,9529,21151,120,9529,63556,119,0]\r
+         * 说明:\r
+         * 数据内容:\r
+         * UD,命令号\r
+         * 180916,日期(年月日)(0 时区),表示 0 时区的二零一八年九月十六号\r
+         *\r
+         * 025723,时间(时分秒)(0 时区),表示 0 时区的两点五十七分二十三秒A,gps 定位有效\r
+         * 22.570733,纬度\r
+         * N,纬度表示113.8626083,经度\r
+         * E,经度表示0.00,速度\r
+         * 249.5,方向\r
+         * 0.0,海拔\r
+         * 6,卫星个数\r
+         *\r
+         * 100,gsm 信号强度\r
+         * 60,电量\r
+         * 0,计步数\r
+         * 0,翻转次数\r
+         * 00000010,终端状态,数据为 16 进制,解析成二进制为 0000 0000 0000 0000 0000 0000 0001 0000\r
+         * 前面 4 个字节表示状态,后面 4 个字节表示报警,数据中第 4 位为 1,对照文档最后的数据解析,表示手表静止状态。详细可参看文档最后部分。\r
+         * 7,基站个数\r
+         * 255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,126,9529,21242,124,9529,\r
+         * 21151,120,9529,63556,119,基站信息\r
+         * 0,WiFi 个数\r
+         *\r
+         */\r
 \r
-    //处理 定位 BP01\r
-    public void handleBP01(String cmd){\r
-        log("BP01定位接收成功");\r
-    }\r
 \r
+        StringBuilder sb=new StringBuilder();\r
+        String cmd=cmdMap.get(CMD_TYPE.UD);\r
+        sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)\r
+                .append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT)\r
+                .append(runtime.getFZDGPSData()).append(CMDSPLIT)\r
+                .append(String.format("%03d",abs(runtime.getSignalStrength()))).append(CMDSPLIT)\r
+                .append(runtime.getBattery()).append(CMDSPLIT)\r
+                .append(runtime.getTotalStepCount()).append(CMDSPLIT)\r
+                .append(runtime.getRolltimes()).append(CMDSPLIT)\r
+                .append(runtime.getFZDDevStatus()).append(CMDSPLIT)\r
+                .append(runtime.getFZDLBSMultiStationData()).append(CMDSPLIT)\r
+                .append(runtime.getFZDWifiData());\r
+\r
+        return genFZDCMD(cmd,sb.toString());\r
+    }\r
 \r
 \r
     /*LBS+WiFi混合定位*/\r
-    public static String AP02(Runtime ds) {\r
+    public static String UD2(Runtime ds) {\r
         //示例数据:IWAP02,\r
         // zh_cn,\r
         // 0,\r
@@ -395,12 +443,57 @@ public class protocol_fzd {
     }\r
 \r
     //处理 定位 BP01\r
-    public void handleBP02(String cmd){\r
+    public void handleUD2(String cmd){\r
         log("BP02定位接收成功");\r
     }\r
 \r
 \r
+    public static String UPLOAD(){\r
+\r
+        return new StringBuffer("").toString();\r
+    }\r
+\r
+    public void handleUPLOAD(Connection connection,Runtime runtime,String cmd,String data){\r
+\r
+    }\r
+\r
+    public static String PHL(){\r
+        return genFZDCMD(cmdMap.get(CMD_TYPE.PHL));\r
+    }\r
 \r
+    public void handlePHL(Connection connection,Runtime runtime,String cmd,String data){\r
+        /***\r
+         * [IC*334588000000156*len*PHL,号码,名字,号码,名字,号码,名字,号码,名字,号码,名字] len:发送长度 16 进制表示 占用 2 个字节\r
+         * 号码:ascii 字符 名字:Unicode 编码\r
+         * 该接口融合了白名单和电话本的功能,最多对应 50 组号码与名字,号码不超过 20 个 ascii 字符, 姓名不超过 10 个 Unicode 字符。\r
+         * 示 例 : [IC*334588000000156*0010*PHL,110,5F204E09]\r
+         * 5F204E09--->张三,是使用 unicode 编码\r
+         * 终端回复:[IC*334588000000156*0003*PHL]\r
+         */\r
+            StringBuilder tmp=new StringBuilder(data);\r
+            if (tmp.toString().startsWith(CMDSPLIT)) tmp.deleteCharAt(0);\r
+            String list[]=tmp.toString().split(CMDSPLIT);\r
+            int listlen=list.length;\r
+            boolean ispared=  (( listlen >0) && (listlen%2 == 0));\r
+            if (ispared){\r
+                ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
+                for(int i=0; i<listlen;i+=2){\r
+                    String phonem=list[i];\r
+                    String name = Util.decodeUnicode2Utf8(list[i+1]);\r
+                    ICLogger.i(i/2 +" 姓名 "+name+", 电话 "+phonem);\r
+                    contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));\r
+                }\r
+//            contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));\r
+//            contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));\r
+//            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));\r
+//            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));\r
+\r
+                runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false);\r
+            }else{\r
+                ICLogger.i("没有电话本!执行清除操作!");\r
+            }\r
+            connection.send(genStringMessage("PHL",PHL()));\r
+    }\r
 \r
     public void sendBroadcast(String cmd, Runtime dev) {\r
 \r
@@ -413,19 +506,18 @@ public class protocol_fzd {
         dev.getContextProxy().context.startActivity(intent);\r
     }\r
 \r
-    public boolean handleCmd(CMD_TYPE type, String cmd) {\r
+    public boolean handleCmd(CMD_TYPE type, String cmd , String data) {\r
 \r
         //普通非二进制命令用此函数处理\r
         boolean ret=true;\r
         ICLogger.i("handleCmd "+type.name() + " strLen="+cmd.length());\r
-        if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd);\r
+        if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd +" "+ data);\r
         switch (type){\r
             case LK: //登录包\r
                 ICLogger.i("服务器收到登录包LK");\r
                 mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化\r
                 break;\r
             case KA:\r
-//                                handleBP03(cmd);\r
                 ICLogger.i("服务器收到心跳包KA");\r
                 mConnection.DeliverCMDMessageToSystem("heartbeat",cmd);//通知下面线程状态变化\r
                 break;\r
@@ -434,27 +526,12 @@ public class protocol_fzd {
                 handlePing(mRuntime,cmd);\r
                 ICLogger.i("服务器返回Ping绑定信息");\r
                 break;\r
-//            case BP00: //登录包\r
-//                handleBP00(mRuntime,cmd);\r
-//                ICLogger.i("服务器收到登录包AP00");\r
-//                mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化\r
-//                break;\r
-//            case BP01: //gps定位包\r
-//                handleBP01(cmd);\r
-//                ICLogger.i("服务器收到定位AP01");\r
-//                mConnection.DeliverCMDMessageToSystem("AP01",cmd);//通知下面线程状态变化\r
-//                break;\r
-//            case BP02:// wifi定位包\r
-//                handleBP02(cmd);\r
-//                ICLogger.i("服务器收到定位AP02");\r
-//                mConnection.DeliverCMDMessageToSystem("AP02",cmd);//通知下面线程状态变化\r
-//                break;\r
-//            case BP03: //心跳包\r
-//                handleBP03(cmd);\r
-//                ICLogger.i("服务器收到心跳包AP03");\r
-//                mConnection.DeliverCMDMessageToSystem("heartbeat",cmd);//通知下面线程状态变化\r
-//                break;\r
-//\r
+            case CR:\r
+                //立即定位指令(长链接有效)\r
+                //handleBP16(mConnection,mRuntime,cmd);\r
+                mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化\r
+                break;\r
+\r
 //            case BP07:\r
 //                //收到发送的语音包\r
 //                handleBP07(cmd,mConnection);\r
@@ -486,11 +563,6 @@ public class protocol_fzd {
 //                handleBP34(mConnection,mRuntime,cmd);\r
 //                mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化\r
 //                break;\r
-//            case BP16:\r
-//                //立即定位指令(长链接有效)\r
-//                handleBP16(mConnection,mRuntime,cmd);\r
-//                mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化\r
-//                break;\r
 //\r
 ////                            case BP05: //L02服务器不适用\r
 ////                                //查询服务器语音 返回信息\r
@@ -502,11 +574,11 @@ public class protocol_fzd {
 //                handleBP12(mConnection,cmd,mRuntime);\r
 //                ICLogger.i("收到服务器设置SOS号码命令BP12");\r
 //                break;\r
-//            case BP14:\r
-//                //收到设置白名单号码\r
-//                handleBP14(mConnection,cmd,mRuntime);\r
-//                ICLogger.i("收到服务器设置白名单号码命令BP14");\r
-//                break;\r
+            case PHL:\r
+                //收到设置白名单号码\r
+                ICLogger.i("收到服务器设置白名单号码命令BP14");\r
+                handlePHL(mConnection,mRuntime,cmd,data);\r
+                break;\r
 //            case BP15:\r
 //                handleBP15(cmd,mConnection,mRuntime);\r
 //                ICLogger.i("收到服务器设置定位命令BP15");\r
index c035321..edfef73 100644 (file)
@@ -1,2 +1,2 @@
-#Tue Jul 28 10:30:36 CST 2020\r
-VERSION_CODE=462\r
+#Wed Jul 29 21:10:25 CST 2020\r
+VERSION_CODE=463\r