From: snickersun Date: Wed, 29 Jul 2020 13:21:30 +0000 (+0800) Subject: release V463 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=6efeca4f315875007634528e81e41e7cb6ea9add;p=protocol_srv.git release V463 protocol_fzd 添加PING,UD,CR,PHL协议 解决绑定、位置上传、立即定位、通讯录功能 --- diff --git a/app/release/ICSer_V462_2007281030_release.apk b/app/release/ICSer_V463_2007292110_release.apk similarity index 79% rename from app/release/ICSer_V462_2007281030_release.apk rename to app/release/ICSer_V463_2007292110_release.apk index c977aec3..3b7de6d0 100644 Binary files a/app/release/ICSer_V462_2007281030_release.apk and b/app/release/ICSer_V463_2007292110_release.apk differ diff --git a/app/release/output.json b/app/release/output.json index 95f4bda9..e1254de9 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -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 diff --git a/app/src/main/java/com/enqualcomm/support/adapter/LBSHelper.java b/app/src/main/java/com/enqualcomm/support/adapter/LBSHelper.java index 000629c6..44814e7e 100644 --- a/app/src/main/java/com/enqualcomm/support/adapter/LBSHelper.java +++ b/app/src/main/java/com/enqualcomm/support/adapter/LBSHelper.java @@ -187,7 +187,6 @@ public class LBSHelper { } else { this.sortByLevel(aplist); StringBuilder sb = new StringBuilder(""); - StringBuilder sbAP02 = new StringBuilder(""); StringBuilder sblog = new StringBuilder(""); Iterator it = aplist.iterator(); int count = 0; diff --git a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java index e46d1cb8..c3c207a5 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java +++ b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java @@ -514,17 +514,79 @@ public class Runtime { return sb.toString(); } + public String getFZDGPSData(){ + +/*** + * A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6 + * A,gps 定位有效 + * 22.570733,纬度 N, + * 113.8626083,经度 E, + * 0.00,速度 + * 249.5,方向 + * 0.0,海拔 + * 6,卫星个数 + */ + StringBuilder sb=new StringBuilder(); + int speedi=(int)gpsp.getLocation().speed; + int speedl=(int) ((gpsp.getLocation().speed - speedi)*100); + String latStr=gpsp.getLocation().latGPSStr; + String lonStr=gpsp.getLocation().lonGPSStr; + String heading=String.valueOf(gpsp.getLocation().heading); + int starcount=gpsp.getLocation().used_gps_numbs; + if (isGPSFixed()) + { + String gpsStr = String.format(",%s,N,%s,E,%d.%02d,%s,0.0,%d", latStr, lonStr, speedi, speedl,heading,starcount); + sb.append("A").append(gpsStr); + + }else{ + String gpsStr=String.format(",0.000,N,0.000,E,0.0,0.0,0.0,0"); + sb.append("V").append(gpsStr); + } + + + return sb.toString(); + } + + public String getFZDDevStatus(){ + return "00000000"; + } public String getGPSHeading(){ int headingi=(int)gpsp.getLocation().heading; int headingl=(int) ((gpsp.getLocation().heading - headingi)*100); String gpsStr=String.format("%03d.%02d",headingi,headingl); return gpsStr; } + public String getFZDLBSMultiStationData(){ + return mFZDLBSMultiStationData; + } + + public String getFZDWifiData(){ + int apsum=0; + String wifiinfo=getWifiInfo(); + if (!wifiinfo.isEmpty()) { + String[] list = wifiinfo.split("&"); + apsum = list.length; + } + StringBuffer sb=new StringBuffer(); + if (apsum==0){ + sb.append(apsum); + }else{ + sb.append(apsum).append(","); + wifiinfo=wifiinfo.replace("&",",").replace("|",","); + sb.append(wifiinfo); + } + return sb.toString(); + } private static String mLBSMultiStationData=""; public void setLBSMultiStationData(String data){ mLBSMultiStationData=data; } + + private static String mFZDLBSMultiStationData=""; + public void setFZDLBSMultiStationData(String data){ + mFZDLBSMultiStationData=data; + } //AP03 用的多基站定位数据 public String getLBSMultiStationData(){ // 7: 表示共有7组基站 diff --git a/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java b/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java index d16deb79..69b711cb 100644 --- a/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java +++ b/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java @@ -110,8 +110,15 @@ public class KeepAlive extends AbstractConnectionService { //更新系统的IMEI boolean ret=DeviceInfoUtil.updateImei(mRuntime); ICLogger.i("Update IMEI "+ret); - if (is_login_send_success) - connection.send(protocolAPIHelper.genStringMessage("heartbeat", protocolAPIHelper.getHeartbeatMSG(mRuntime))); + if (is_login_send_success) { + connection.send(protocolAPIHelper.genStringMessage("heartbeat", protocolAPIHelper.getHeartbeatMSG(mRuntime))); + Observable.timer(1000L, TimeUnit.MILLISECONDS).subscribe(new Action1() { + public void call(Long param1Long) { + connection.send(protocolAPIHelper.genStringMessage("binding", protocolAPIHelper.getBindingMSG())); + + } + }); + } else connection.send(protocolAPIHelper.genStringMessage("heartbeat", protocolAPIHelper.getLoginMSG(mRuntime))); @@ -256,7 +263,7 @@ public class KeepAlive extends AbstractConnectionService { is_login_send_success=false; Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1() { public void call(Long param1Long) { - connection.send(protocolAPIHelper.genStringMessage("AP00",protocolAPIHelper.getLoginMSG(paramRuntime))); + connection.send(protocolAPIHelper.genStringMessage("login",protocolAPIHelper.getLoginMSG(paramRuntime))); } }); @@ -288,6 +295,12 @@ public class KeepAlive extends AbstractConnectionService { //发送心跳包 connection.send(protocolAPIHelper.genStringMessage("heartbeat",protocolAPIHelper.getHeartbeatMSG(paramRuntime))); //发送完心跳后,开始检查服务器响应 + Observable.timer(1000L, TimeUnit.MILLISECONDS).subscribe(new Action1() { + public void call(Long param1Long) { + connection.send(protocolAPIHelper.genStringMessage("binding", protocolAPIHelper.getBindingMSG())); + + } + }); startResponseCheckTimer(); @@ -329,6 +342,12 @@ public class KeepAlive extends AbstractConnectionService { mRuntime.setServerProtocolConnected(false); connection.send(protocolAPIHelper.genStringMessage("heartbeat",protocolAPIHelper.getHeartbeatMSG(paramRuntime))); //发送完心跳后,开始检查服务器响应 + Observable.timer(1000L, TimeUnit.MILLISECONDS).subscribe(new Action1() { + public void call(Long param1Long) { + connection.send(protocolAPIHelper.genStringMessage("binding", protocolAPIHelper.getBindingMSG())); + + } + }); startResponseCheckTimer(); } }); diff --git a/app/src/main/java/com/enqualcomm/support/utils/CellInfoUtil.java b/app/src/main/java/com/enqualcomm/support/utils/CellInfoUtil.java index 03d4dd7f..1894b4e8 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/CellInfoUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/CellInfoUtil.java @@ -173,15 +173,14 @@ public class CellInfoUtil { return null; } else { StringBuilder gsmSb = new StringBuilder(mccmnc); + gsmSb.insert(3, ","); StringBuilder cdmaSB = new StringBuilder(); - gsmSb.insert(3, ","); runtime.setMccAndMnc(gsmSb.toString()); + if (celllocation instanceof GsmCellLocation) { GsmCellLocation gsmCell = (GsmCellLocation)celllocation; runtime.setCdmaInfo(null); - - //AP01 Single GSM Station gsmSb.append(","); gsmSb.append(gsmCell.getLac()); @@ -200,7 +199,10 @@ public class CellInfoUtil { List neighboringCell_list = telephonyManager.getNeighboringCellInfo(); //AP02 Multi GSM Station StringBuilder gsmSbMulti = new StringBuilder(); - int size=1; + + StringBuilder gsmSbMultiFZD = new StringBuilder(); + + int size=1; if (neighboringCell_list != null && !neighboringCell_list.isEmpty()) size +=neighboringCell_list.size(); StringBuilder mmcmnc1 = new StringBuilder(mccmnc); @@ -214,7 +216,21 @@ public class CellInfoUtil { gsmSbMulti.append(gsmCell.getCid()); gsmSbMulti.append("|"); gsmSbMulti.append(150-Math.abs(getSignal(telephonyManager,runtime))); - if (neighboringCell_list != null && !neighboringCell_list.isEmpty()) { + + + gsmSbMultiFZD.append(size); + gsmSbMultiFZD.append(","); + gsmSbMultiFZD.append(1); + gsmSbMultiFZD.append(","); + gsmSbMultiFZD.append(mmcmnc1); + gsmSbMultiFZD.append(","); + gsmSbMultiFZD.append(gsmCell.getLac()); + gsmSbMultiFZD.append(","); + gsmSbMultiFZD.append(gsmCell.getCid()); + gsmSbMultiFZD.append(","); + gsmSbMultiFZD.append(150-Math.abs(getSignal(telephonyManager,runtime))); + + if (neighboringCell_list != null && !neighboringCell_list.isEmpty()) { sortByRssi(neighboringCell_list); Iterator cell = neighboringCell_list.iterator(); @@ -231,6 +247,14 @@ public class CellInfoUtil { gsmSbMulti.append(mNeighboringCellInfo.getCid()); gsmSbMulti.append("|"); gsmSbMulti.append( 150-Math.abs(mNeighboringCellInfo.getRssi())); + + gsmSbMultiFZD.append(","); + gsmSbMultiFZD.append(mNeighboringCellInfo.getLac()); + gsmSbMultiFZD.append(","); + gsmSbMultiFZD.append(mNeighboringCellInfo.getCid()); + gsmSbMultiFZD.append(","); + gsmSbMultiFZD.append( 150-Math.abs(mNeighboringCellInfo.getRssi())); + maxstationCount ++; if (maxstationCount == 5) { // break; @@ -238,9 +262,12 @@ public class CellInfoUtil { } } ICLogger.i("LBS GsmCellLocation MultiStation "+ gsmSbMulti.toString()); - if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", gsmSbMulti.toString()); + ICLogger.i("FZD LBS GsmCellLocation MultiStation "+ gsmSbMultiFZD.toString()); + if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", "LBS GsmCellLocation MultiStation "+ gsmSbMulti.toString()); + if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", "FZD LBS GsmCellLocation MultiStation "+ gsmSbMultiFZD.toString()); - runtime.setLBSMultiStationData(gsmSbMulti.toString()); + runtime.setLBSMultiStationData(gsmSbMulti.toString()); + runtime.setFZDLBSMultiStationData(gsmSbMultiFZD.toString()); return gsmSb.toString(); } else if (celllocation instanceof CdmaCellLocation) { diff --git a/app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java b/app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java index cfae0923..564a43e3 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java +++ b/app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java @@ -300,6 +300,7 @@ public class NettyConnection implements Connection { public void send(StringMessage paramStringMessage) { sendMsg(paramStringMessage.isFromCache()); + ICLogger.logToFile("APILog",paramStringMessage.isFromCache()); ICLogger.i(paramStringMessage.isFromCache()); } diff --git a/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java b/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java index 7dd0cf28..ce5d3f4a 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java @@ -41,7 +41,9 @@ public class TimeUtil { public static String getSystemDateYYMMDD(){ return (new SimpleDateFormat("yyMMdd")).format(new Date(System.currentTimeMillis())); } - + public static String getSystemTimeHHmmss(){ + return (new SimpleDateFormat("HHmmss")).format(new Date(System.currentTimeMillis())); + } public static Date parseDatetiime(String datetimeStr){ SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH);//输入的被转化的时间格式 diff --git a/app/src/main/java/com/enqualcomm/support/utils/regexUtil.java b/app/src/main/java/com/enqualcomm/support/utils/regexUtil.java index d9e7fd7a..4a1f5106 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/regexUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/regexUtil.java @@ -13,7 +13,7 @@ import java.util.regex.Pattern; public class regexUtil { public static final Pattern PATTERN_FZD_CMD_HEADER= Pattern - .compile("\\[IC\\*\\d{15}\\*\\d*\\*[a-zA-Z0-9]+$"); + .compile("IC\\*\\d{15}\\*\\d*\\*[a-zA-Z0-9]+$"); /** * 车牌号码Pattern */ @@ -150,12 +150,11 @@ public class regexUtil { public static boolean isFZDCMD(String s){ - Matcher m = PLATE_NUMBER_PATTERN.matcher(s); - return m.matches(); + return Pattern.compile("IC\\*\\d{15}\\*[a-fA-F0-9]{4}\\*[a-zA-Z0-9]+$").matcher(s).matches(); } public static boolean isFZDCMD(String cmd, String s){ - return Pattern.compile("\\[IC\\*\\d{15}\\*\\d*\\*"+cmd).matcher(s).matches(); + return Pattern.compile("IC\\*\\d{15}\\*[a-fA-F0-9]{4}\\*"+cmd).matcher(s).matches(); } } diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index 62e9f1d5..8ee9c230 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -76,6 +76,27 @@ public class protocolAPIHelper { } return ret; } + + public static String getBindingMSG(){ + String ret=""; + switch(Config.protocol_no) + { + case Config.PROTOCOL_JIAI: + ret=""; + break; + case Config.PROTOCOL_BEEHOME: + ret=""; + break; + case Config.PROTOCOL_IC: + ret=""; + break; + case Config.PROTOCOL_FZD: + ret=protocol_fzd.PING(); + break; + } + return ret; + } + public static String getTemperatureMSG(double temp_adusted,double body_temp){ String ret=""; switch(Config.protocol_no) @@ -169,7 +190,7 @@ public class protocolAPIHelper { ret=protocol_ic.AP01(runtime); break; case Config.PROTOCOL_FZD: - ret=""; + ret=protocol_fzd.UD(runtime); break; } return ret; @@ -188,7 +209,7 @@ public class protocolAPIHelper { ret=protocol_ic.AP02(runtime); break; case Config.PROTOCOL_FZD: - ret=""; + ret=protocol_fzd.UD(runtime); break; } return ret; diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java index 0d95a139..bc544fe2 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -46,7 +46,7 @@ public class protocol_fzd { private static final String CMDHEADERSPLIT = "*"; private static final String CMDSPLIT = ","; - public static final String defaultServerIP="fzd.xcloudtech.com"; + public static final String defaultServerIP="api.xcloudtech.com"; public static final int defaultServerPort=9000; public enum CMD_TYPE { @@ -86,6 +86,7 @@ public class protocol_fzd { FIND,//找手表指令 REMIND,//闹钟设置指令 TK,//对讲功能(微聊发送语音) + PHL,//设置电话本+白名单(最多 50 条) UNKNOWN_CMD, } @@ -126,6 +127,7 @@ public class protocol_fzd { cmdMap.put(CMD_TYPE.FIND, "FIND"); cmdMap.put(CMD_TYPE.REMIND, "REMIND"); cmdMap.put(CMD_TYPE.TK, "TK"); + cmdMap.put(CMD_TYPE.PHL, "PHL"); } private NettyConnection mConnection=null; @@ -181,9 +183,26 @@ public class protocol_fzd { 否则返回 空字符串 */ public static String isCmdStr(String msg) { - if (regexUtil.isFZDCMD(msg)) { + String cmd_msgbuf=msg; + int cmdindex =cmd_msgbuf.indexOf(CMDCOMPANY+CMDHEADERSPLIT); + if (cmdindex>0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据 + String cmd=cmd_msgbuf.substring(cmdindex); + cmd_msgbuf=cmd; + } + cmdindex=cmd_msgbuf.indexOf(CMDEND); + if(cmdindex>0){ + String cmd=cmd_msgbuf.substring(0,cmdindex); + cmd_msgbuf=cmd; + } + cmdindex=cmd_msgbuf.indexOf(CMDSPLIT); + if(cmdindex>0){ + String cmd=cmd_msgbuf.substring(0,cmdindex); + cmd_msgbuf=cmd; + } + + if (regexUtil.isFZDCMD(cmd_msgbuf)) { for (CMD_TYPE key : cmdMap.keySet()) { - if (regexUtil.isFZDCMD(cmdMap.get(key), msg)) { //如果是FZD命令,则进行处理,否则保留数据动 + if (regexUtil.isFZDCMD(cmdMap.get(key), cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动 ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key)); return cmdMap.get(key); } @@ -203,7 +222,7 @@ public class protocol_fzd { log("bytes.size "+bytes.length); cmdbuf.append(cmd_msgbuf); log("cmdbuf.size "+cmdbuf.length() +" "+cmdbuf.toString()); - int cmdindex =cmd_msgbuf.indexOf(CMDHEADER+CMDCOMPANY+CMDHEADERSPLIT); + int cmdindex =cmd_msgbuf.indexOf(CMDCOMPANY+CMDHEADERSPLIT); if (cmdindex>0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据 String cmd=cmd_msgbuf.substring(cmdindex); cmd_msgbuf=cmd; @@ -225,8 +244,8 @@ public class protocol_fzd { for (CMD_TYPE key : cmdMap.keySet()) { // ICLogger.i("key "+cmdMap.get(key)+" cmdbuf "+cmd_msgbuf); if (regexUtil.isFZDCMD(cmdMap.get(key),cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动 - String data=cmdbuf.toString().replace(cmd_msgbuf,"").replace(CMDEND,""); - ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " , " + cmdbuf.toString() + " "+cmd_msgbuf + " data "+data ); + String data=cmdbuf.toString().replace(CMDHEADER,"").replace(cmd_msgbuf,"").replace(CMDEND,""); +// ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " , " + cmdbuf.toString() + " "+cmd_msgbuf + " data "+data ); // if (key == CMD_TYPE.TK) { // //如果是BP28则 后面的数据是音频,需要保留 // byte[] amrBuf; @@ -235,9 +254,7 @@ public class protocol_fzd { // handleCmd(key, cmdlist[i], bytes); // } // } else { - - - handleCmd(key, data); + handleCmd(key, cmd_msgbuf,data); cmdbuf.delete(0,cmdbuf.length());//处理后清空 // } } @@ -336,30 +353,61 @@ public class protocol_fzd { } + public void handleKA(Runtime runtime,String data){ + } /*LBS+GPS混合定位*/ - public static String AP01(Runtime ds) { - //示例数据:IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102, - // 460,0,9520,3671, - // 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# -// IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,# - return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.LK)).append(TimeUtil.getShortDate()) - .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength()))) - .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0") - .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT) - .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString(); - } + public static String UD(Runtime runtime) { + /*** + * [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 + * 29,21242,124,9529,21151,120,9529,63556,119,0] + * 说明: + * 数据内容: + * UD,命令号 + * 180916,日期(年月日)(0 时区),表示 0 时区的二零一八年九月十六号 + * + * 025723,时间(时分秒)(0 时区),表示 0 时区的两点五十七分二十三秒A,gps 定位有效 + * 22.570733,纬度 + * N,纬度表示113.8626083,经度 + * E,经度表示0.00,速度 + * 249.5,方向 + * 0.0,海拔 + * 6,卫星个数 + * + * 100,gsm 信号强度 + * 60,电量 + * 0,计步数 + * 0,翻转次数 + * 00000010,终端状态,数据为 16 进制,解析成二进制为 0000 0000 0000 0000 0000 0000 0001 0000 + * 前面 4 个字节表示状态,后面 4 个字节表示报警,数据中第 4 位为 1,对照文档最后的数据解析,表示手表静止状态。详细可参看文档最后部分。 + * 7,基站个数 + * 255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,126,9529,21242,124,9529, + * 21151,120,9529,63556,119,基站信息 + * 0,WiFi 个数 + * + */ - //处理 定位 BP01 - public void handleBP01(String cmd){ - log("BP01定位接收成功"); - } + StringBuilder sb=new StringBuilder(); + String cmd=cmdMap.get(CMD_TYPE.UD); + sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT) + .append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT) + .append(runtime.getFZDGPSData()).append(CMDSPLIT) + .append(String.format("%03d",abs(runtime.getSignalStrength()))).append(CMDSPLIT) + .append(runtime.getBattery()).append(CMDSPLIT) + .append(runtime.getTotalStepCount()).append(CMDSPLIT) + .append(runtime.getRolltimes()).append(CMDSPLIT) + .append(runtime.getFZDDevStatus()).append(CMDSPLIT) + .append(runtime.getFZDLBSMultiStationData()).append(CMDSPLIT) + .append(runtime.getFZDWifiData()); + + return genFZDCMD(cmd,sb.toString()); + } /*LBS+WiFi混合定位*/ - public static String AP02(Runtime ds) { + public static String UD2(Runtime ds) { //示例数据:IWAP02, // zh_cn, // 0, @@ -395,12 +443,57 @@ public class protocol_fzd { } //处理 定位 BP01 - public void handleBP02(String cmd){ + public void handleUD2(String cmd){ log("BP02定位接收成功"); } + public static String UPLOAD(){ + + return new StringBuffer("").toString(); + } + + public void handleUPLOAD(Connection connection,Runtime runtime,String cmd,String data){ + + } + + public static String PHL(){ + return genFZDCMD(cmdMap.get(CMD_TYPE.PHL)); + } + public void handlePHL(Connection connection,Runtime runtime,String cmd,String data){ + /*** + * [IC*334588000000156*len*PHL,号码,名字,号码,名字,号码,名字,号码,名字,号码,名字] len:发送长度 16 进制表示 占用 2 个字节 + * 号码:ascii 字符 名字:Unicode 编码 + * 该接口融合了白名单和电话本的功能,最多对应 50 组号码与名字,号码不超过 20 个 ascii 字符, 姓名不超过 10 个 Unicode 字符。 + * 示 例 : [IC*334588000000156*0010*PHL,110,5F204E09] + * 5F204E09--->张三,是使用 unicode 编码 + * 终端回复:[IC*334588000000156*0003*PHL] + */ + StringBuilder tmp=new StringBuilder(data); + if (tmp.toString().startsWith(CMDSPLIT)) tmp.deleteCharAt(0); + String list[]=tmp.toString().split(CMDSPLIT); + int listlen=list.length; + boolean ispared= (( listlen >0) && (listlen%2 == 0)); + if (ispared){ + ArrayList contactArray=new ArrayList(); + for(int i=0; i