fixed some response handler of anan protocol.
authorTrillGates <williamtrillgates@gmail.com>
Wed, 28 Apr 2021 02:53:57 +0000 (10:53 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Wed, 28 Apr 2021 02:53:57 +0000 (10:53 +0800)
app/src/main/java/com/enqualcomm/support/LocationClient.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_anan.java

index 6bf6023..46d14ce 100644 (file)
@@ -9,6 +9,7 @@ import android.os.HandlerThread;
 import android.os.Message;
 import android.os.PowerManager;
 import android.os.SystemClock;
+import android.text.TextUtils;
 
 import com.enqualcomm.support.adapter.BTHelper;
 import com.enqualcomm.support.adapter.LBSHelper;
@@ -192,12 +193,12 @@ public class LocationClient {
                     }
                     ICLogger.i("Bt Dev Is in Area " + runtime.bleInfo.is_in_area);
 
-                    if (scanBLEOnly == true) {
+                    if (scanBLEOnly) {
                         //只扫描蓝牙,不做定位
-                        if (runtime.bleInfo.is_in_area == false) {
+                        if (!runtime.bleInfo.is_in_area) {
                             runtime.updateFZDDevStatusEscape(true);
                             ICLogger.i("BT 不在区域内");
-                            if (runtime.bleInfo.last_is_in_area == true) {
+                            if (runtime.bleInfo.last_is_in_area) {
                                 //只有上一次在区域内,这次出区域才需要报警
                                 ICLogger.i("BT 不在区域内,且上次在区域内,报警!");
                                 //如果需要报警定位,则强制进行sos定位,不能通过triggerSOS,因为函数中调用了BLEScan会造成循环调用
@@ -207,7 +208,7 @@ public class LocationClient {
                         } else {
                             ICLogger.i("BT 在区域内!");
                             runtime.updateFZDDevStatusEscape(false);
-                            if (runtime.bleInfo.last_is_in_area == false) {
+                            if (!runtime.bleInfo.last_is_in_area) {
                                 //上一次不在区域内,这次进区域要报警
                                 ICLogger.i("BT 进入区域内,且上次不在区域内,报警!");
                                 if (!Config.noBLE_RelaseEscapeAlarm) {
@@ -268,12 +269,13 @@ public class LocationClient {
                                 //已经通过蓝牙定位,则清除 forceLocation=0
                                 forceLocation = 0;
                                 startNomalLocation = false; //蓝牙定位,直接发GPS坐标
-                                StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);
-                                DeliverMessage(AP01_CMD);
+                                if (!TextUtils.isEmpty(runtime.getWifiInfo())) {
+                                    StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);
+                                    DeliverMessage(AP01_CMD);
+                                }
                             }
                         }
                     }
-
                     //处理过此次数据后,把当前状态赋值给上次检测状态
                     runtime.bleInfo.last_is_in_area = runtime.bleInfo.is_in_area;
                     //扫描结束就清掉scanBLEOnly,保证下次不会被误操作。
@@ -551,13 +553,13 @@ public class LocationClient {
                                 btHelper.scanBLE();
                         }
                     } else {
-                       // Util.mSleep(1000);
+                        // Util.mSleep(1000);
                         StringMessage waningmsg = protocolAPIHelper.getWarningMSG(runtime);
-                        if(Config.sendSOSAtOnce){
+                        if (Config.sendSOSAtOnce) {
                             //客户ZSH因网络较差,经常缓存过多消息造成无法及时发送
                             //要求直接发送SOS信息,不做缓存。
                             connection.send(waningmsg);
-                        }else {
+                        } else {
                             DeliverMessage(waningmsg);
                         }
                     }
@@ -654,8 +656,10 @@ public class LocationClient {
                     if (startNomalLocation = true) {
                         startNomalLocation = false;
                         if (gps_ok) {
-                            StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);
-                            DeliverMessage(AP01_CMD);
+                            if (!TextUtils.isEmpty(runtime.getWifiInfo())) {
+                                StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);
+                                DeliverMessage(AP01_CMD);
+                            }
                         } else {
                             StringMessage AP02_CMD = protocolAPIHelper.getLBSLocationMSG(runtime);
                             DeliverMessage(AP02_CMD);
@@ -859,7 +863,7 @@ public class LocationClient {
     public PowerManager.WakeLock getLocationWakeLock() {
         PowerManager.WakeLock wakeLock = ((PowerManager) (runtime.getContextProxy())
                 .context.getSystemService(Context.POWER_SERVICE)).newWakeLock(
-                        PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getSimpleName());
+                PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getSimpleName());
         wakeLock.acquire(1000L);
         return wakeLock;
     }
index a28b315..63b33d9 100644 (file)
@@ -1,5 +1,7 @@
 package com.ic.protocols;
 
+import android.text.TextUtils;
+
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.bean.Runtime;
@@ -258,6 +260,9 @@ public class protocolAPIHelper {
                 ret = protocol_mqtt.AL(runtime);
                 break;
             case PROTOCOL_ANAN:
+                if (TextUtils.isEmpty(runtime.getWifiInfo())) {
+                    return null;
+                }
                 ret = protocol_anan.AP10(runtime);
                 break;
         }
@@ -361,6 +366,9 @@ public class protocolAPIHelper {
             case Config.PROTOCOL_MQTT:
                 ret = protocol_mqtt.UD(runtime);
                 break;
+            case PROTOCOL_ANAN:
+                ret = protocol_anan.AP02(runtime);
+                break;
         }
         return ret;
     }
@@ -592,7 +600,7 @@ public class protocolAPIHelper {
                 ret = null;
                 break;
             case PROTOCOL_ANAN:
-                ret = protocol_anan.APTQ(runtime);
+                //ret = protocol_anan.APTQ(runtime);
                 break;
         }
         return ret;
index 0b565d8..de9685a 100644 (file)
@@ -13,8 +13,10 @@ import android.net.Uri;
 import android.os.Environment;
 import android.support.v4.app.ActivityCompat;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 
 import com.enqualcomm.support.Config;
+import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.R;
 import com.enqualcomm.support.bean.Alarm;
@@ -36,6 +38,7 @@ import com.enqualcomm.support.utils.Util;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Locale;
 
@@ -65,7 +68,7 @@ public class protocol_anan {
     public protocol_anan(Connection connect, Runtime runtime) {
         mConnection = connect;
         mRuntime = runtime;
-        getPhoneStatus();
+        getPhoneStatus(runtime);
         //注册佩戴状态改变的监听
         registerWearStateReceiver();
     }
@@ -75,6 +78,46 @@ public class protocol_anan {
     public static final int STATE_ANTI_ON = 0;
     public static final int STATE_ANTI_OFF = 1;
 
+
+    /*LBS+WiFi混合定位*/
+    public static StringMessage AP02(Runtime ds) {
+        //示例数据:IWAP02,
+        // zh_cn,
+        // 0,
+        // 7,
+        // 460,0,
+        // 9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7,
+        // 4,
+        // 1|D8-24-BD-79-FA-1F|59&2|3C-46-D8-6D-CE-01|81&3|0C-4C-39-1A-7C-65|69&4|70-A8-E3-5D-D7-C0|65#
+//        IW标识符
+//        AP02:命令字
+//        zh_cn: 语言标志
+//        0:回复标识,为0时不回复地址,为 1 时,服务器回复地址信息
+//        7: 表示共有7组基站
+//        460: MCC 国家码
+//        0: MNC运营商代码
+//        9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应  10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm)
+//        4: 表示WIFI组数,
+//                1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)
+
+        int apsum = 0;
+        String wifiinfo = ds.getWifiInfo();
+        if (!wifiinfo.isEmpty()) {
+            String[] list = wifiinfo.split("&");
+            apsum = list.length;
+        }
+
+        String wifiInfo = ds.getWifiInfo();
+        ICLogger.i("Wifi ap sum " + apsum);
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP02),
+                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP02)).append(CMDSPLIT)
+                        .append(ds.getLanguage()).append(CMDSPLIT)
+                        .append(0).append(CMDSPLIT) //为0时不回复地址
+                        .append(ds.getLBSMultiStationData()).append(CMDSPLIT)  //基站信息数据
+                        .append(apsum).append(TextUtils.isEmpty(wifiInfo) ? "" : CMDSPLIT).append(TextUtils.isEmpty(wifiInfo) ? "" : wifiInfo)
+                        .append(CMDEND).toString());  //wifi信息数据
+    }
+
     private void registerWearStateReceiver() {
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction("com.ic.ACTION_ANTIOFF");
@@ -184,6 +227,7 @@ public class protocol_anan {
         BP15/*GPRS定位数据上传时间间隔*/,
         BP68/*设置绑定状态*/,
         BP84/* 白名单开关*/,
+        BPTQ/* 天气数据来了*/,
         BPFD/*交好友响应*/,
         BP07/*语音上行响应*/,
         BP95/*语音上行给好友响应*/,
@@ -203,7 +247,14 @@ public class protocol_anan {
         AP32/*拨号上行*/,
         APSW/*定位开关上行*/,
         AP98/*计步目标设置上行*/,
-        BPHT/*心率血压上传结果*/
+        AP26,
+        BPHT/*心率血压上传结果*/,
+        BP10/*天气的回应*/,
+        AP02,
+        BP02,
+        BP01/*GPS的*/,
+        BP00/*登录包*/,
+        BP03/*心跳*/
     }
 
     private final static HashMap<CMD_TYPE, String> cmdMap;
@@ -243,11 +294,14 @@ public class protocol_anan {
         cmdMap.put(CMD_TYPE.BPXY, "BPXY");
         cmdMap.put(CMD_TYPE.BP98, "BP98");
         cmdMap.put(CMD_TYPE.BP84, "BP84");
+        cmdMap.put(CMD_TYPE.BPTQ, "BPTQ");
         cmdMap.put(CMD_TYPE.BPFD, "BPFD");
         cmdMap.put(CMD_TYPE.BP87, "BP87");
         cmdMap.put(CMD_TYPE.BPNT, "BPNT");
         cmdMap.put(CMD_TYPE.BP88, "BP88");
         cmdMap.put(CMD_TYPE.BP99, "BP99");
+        cmdMap.put(CMD_TYPE.AP02, "AP02");
+        cmdMap.put(CMD_TYPE.BP02, "BP02");
         cmdMap.put(CMD_TYPE.BPSW, "BPSW");
         cmdMap.put(CMD_TYPE.BP95, "BP95");
         cmdMap.put(CMD_TYPE.BP28, "BP28");
@@ -265,6 +319,9 @@ public class protocol_anan {
         cmdMap.put(CMD_TYPE.APXL, "APXL");
         cmdMap.put(CMD_TYPE.APSW, "APSW");
         cmdMap.put(CMD_TYPE.AP98, "AP98");
+        cmdMap.put(CMD_TYPE.BP00, "BP00");
+        cmdMap.put(CMD_TYPE.AP26, "AP26");
+        cmdMap.put(CMD_TYPE.BP03, "BP03");
     }
 
 
@@ -312,12 +369,19 @@ public class protocol_anan {
 
     /*登录*/
     public static StringMessage AP00(Runtime runTime) {
+        if (TextUtils.isEmpty(runTime.getIccid()) || TextUtils.isEmpty(runTime.getImsi())) {
+            String phoneStatus = getPhoneStatus(runTime);
+            ICLogger.d("phoneStatus == > " + phoneStatus);
+            return null;
+        }
         //示例数据:IWAP00102002020001871,898600A7189443197156,9460077731997156#
         return genStringMessage(cmdMap.get(CMD_TYPE.AP00),
                 new StringBuffer(CMDHEADER).append(
                         cmdMap.get(CMD_TYPE.AP00)
                 ).append(runTime.IMEI())
+                        .append(CMDSPLIT)
                         .append(runTime.getIccid())
+                        .append(CMDSPLIT)
                         .append(runTime.getImsi())
                         .append(CMDEND).toString());
     }
@@ -353,7 +417,7 @@ public class protocol_anan {
         if (!lang.contains("zh")) {
             language = 1;
         }
-        return genStringMessage("APTQ", new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_ic.CMD_TYPE.APTQ))
+        return genStringMessage("APTQ", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTQ))
                 .append(CMDSPLIT).append(runtime.getLocationInstance().getMCC())
                 .append(CMDSPLIT).append(runtime.getLocationInstance().getMNC())
                 .append(CMDSPLIT).append(runtime.getLocationInstance().getLAC())
@@ -386,12 +450,13 @@ public class protocol_anan {
          * zh-cn:设备语言
          * 00:第一个0:是否需要回复地址信息,0:不回复,1回复.
          */
+        String wifiInfo = ds.getWifiInfo();
         return genStringMessage(cmdMap.get(CMD_TYPE.AP10),
                 new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10))
                         .append(TimeUtil.getShortDate())
                         .append(ds.getGPSData())
-                        .append(TimeUtil.getShortTime())
                         .append(ds.getGPSHeading())
+                        .append(TimeUtil.getShortTime())
                         .append(String.format("%03d", abs(ds.getSignalStrength())))
                         .append(ds.getGPSLocationStarNums())
                         .append(ds.getBattery()).append("0")
@@ -400,9 +465,8 @@ public class protocol_anan {
                         .append(ds.getLBSData()).append(CMDSPLIT)
                         .append(ds.getAlarmType()).append(CMDSPLIT)
                         .append(ds.getLanguage()).append(CMDSPLIT)
-                        .append("00").append(CMDSPLIT)  //不回复地址
-                        .append(ds.getWifiInfo()).append(CMDEND).toString());
-
+                        .append("00").append(TextUtils.isEmpty(wifiInfo) ? "" : CMDSPLIT)  //不回复地址
+                        .append(TextUtils.isEmpty(wifiInfo) ? "" : wifiInfo.replace("AP","HOME")).append(CMDEND).toString());
     }
 
     public static StringMessage AP03(Runtime ds) {
@@ -428,6 +492,7 @@ public class protocol_anan {
         // 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,#
+        String wifiInfo = ds.getWifiInfo();
         return genStringMessage(cmdMap.get(CMD_TYPE.AP01),
                 new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01))
                         .append(TimeUtil.getShortDate())
@@ -439,8 +504,8 @@ public class protocol_anan {
                         .append(ds.getBattery()).append("0")
                         .append(ds.getProtection())
                         .append(ds.getWorkModeStr()).append(CMDSPLIT)
-                        .append(ds.getLBSData()).append(CMDSPLIT)
-                        .append(ds.getWifiInfo()).append(CMDEND).toString());
+                        .append(ds.getLBSData()).append(TextUtils.isEmpty(wifiInfo) ? "" : CMDSPLIT)
+                        .append(TextUtils.isEmpty(wifiInfo) ? "" : wifiInfo).append(CMDEND).toString());
     }
 
 
@@ -454,10 +519,16 @@ public class protocol_anan {
                         .append(runtime.getHRS().getBPL()/*收缩压*/)
                         .append(CMDSPLIT)
                         .append(runtime.getHRS().getBPL()/*舒张压*/)
+                        .append(CMDSPLIT)
+                        .append(0.0/*腕部温度*/)
+                        .append(CMDSPLIT)
+                        .append(0.0/*温度*/)
+                        .append(CMDSPLIT)
+                        .append(0/*采集编号*/)
                         .append(CMDEND).toString());
     }
 
-    public String getPhoneStatus() {
+    public static String getPhoneStatus(Runtime mRuntime) {
         TelephonyManager tm = (TelephonyManager) mRuntime
                 .getContextProxy().context.getSystemService(Context.TELEPHONY_SERVICE);
         String str = "";
@@ -612,6 +683,9 @@ public class protocol_anan {
                 handleBP84(cmd, mConnection);
                 ICLogger.i("收到服务器白名单命令");
                 break;
+            case BPTQ: //天气下发
+                handleBPTQ(mConnection, mRuntime, cmd);
+                break;
             case BP07:
                 //收到发送的语音包
                 handleBP07(cmd, mConnection);
@@ -632,13 +706,215 @@ public class protocol_anan {
                 ICLogger.d("收到计步目标指令..." + cmd);
                 handleBP98(cmd, mConnection);
                 break;
-            case BPHT:
-                ICLogger.d("服务器收到心率血压上传...");
-                break;
             case BP45:
                 ICLogger.d("收到静音开关指令--> " + cmd);
                 handleBP45(cmd, mConnection);
                 break;
+            case BP26:
+                ICLogger.d("收到了上课时间段静音的指令");
+                handleBP26(cmd, mConnection);
+                break;
+            case BP10:
+                //报警包
+                ICLogger.d("服务器收到报警包..");
+                mConnection.DeliverCMDMessageToSystem("AP10", cmd);//通知下面线程服务器收到指令
+                break;
+            case BP01: //gps定位包
+                ICLogger.i("服务器收到定位AP01");
+                mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程服务器收到指令
+                break;
+            case BPHT:
+                ICLogger.i("服务器收到上传的心率血压APHT");
+                mConnection.DeliverCMDMessageToSystem("APHT", cmd);//通知下面线程服务器收到指令
+                break;
+            case BP02:// wifi定位包
+                ICLogger.i("服务器收到定位AP02");
+                mConnection.DeliverCMDMessageToSystem("AP02", cmd);//通知下面线程服务器收到指令
+                break;
+            case BP00: //登录包
+                handleBP00(mRuntime, cmd);
+                ICLogger.i("服务器收到登录包AP00");
+                mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化
+                break;
+            case BP03: //心跳包
+                ICLogger.i("服务器收到心跳包AP03");
+                mConnection.DeliverCMDMessageToSystem("heartbeat", cmd);//通知下面线程状态变化
+                break;
+        }
+    }
+
+
+    public void handleBPTQ(Connection connection, Runtime runtime, String cmd) {
+        /***
+         *
+         * IWBPTQ,20-10-11,19:32:02,6674,32,27,22,30,20-10-12,19:32:02,6674,32,27,22,30,20-10-13,19:32:02,6674,32,27,22,30,53575C71533A
+         * IWBPTQ, 16-09-24,11:00:00,b6e0d4c6,2,-5,-12,22,16-09-25,11:00:00,b6e0d4c6,2,-5,-12,22,16-09-26,11:00:00,b6e0d4c6,2,-5,-12,22,316df15733#
+         * 年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,城市名
+         * 注:天气描述用Unicode编码,城市名使用Unicode编码, 第一组为当天,后2组依次为后续2天天气
+         * 如天气编号及描述对应如下(天气描述不需要发送括号内的白天晚上)
+         * 0:龙卷风
+         * 1:热带风暴
+         * 2:飓风
+         * 3:严重的雷暴
+         * 4:雷暴
+         * 5:混合雨雪
+         * 6:混合降雨和冰雹
+         * 7:混合雪和雨夹雪
+         * 8:冻结小雨
+         * 9:小雨
+         * 10:冻雨
+         * 11:阵雨
+         * 12:阵雨
+         * 13:雪飘雪
+         * 14:小雪阵雨
+         * 15:吹雪
+         * 16:雪
+         * 17:冰雹
+         * 18:雨夹雪
+         * 19:尘埃
+         * 20:雾
+         * 21:霾
+         * 22:黑烟
+         * 23:大风
+         * 24:风
+         * 25:低温
+         * 26:多云
+         * 27:多云(晚上)
+         * 28:多云(白天)
+         * 29:局部多云(晚上)
+         * 30:局部多云(天)
+         * 31:清爽(晚)
+         * 32:晴天
+         * 33:晴朗(晚)
+         * 34:晴朗(天)
+         * 35:混合雨和冰雹
+         * 36:热
+         * 37:局部地区性雷暴
+         * 38:零星雷暴
+         * 39:零星雷暴
+         * 40:零星阵雨
+         * 41:大雪
+         * 42:零星阵雪
+         * 43:大雪
+         * 44:多云
+         * 45:雷阵雨
+         * 46:阵雪
+         * 47:局部雷阵雨
+         */
+
+        ICLogger.d("BPTQ " + cmd);
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 23) {
+
+            StringBuilder sb = new StringBuilder();
+            StringBuilder msg = new StringBuilder();
+            for (int i = 0; i < 3; i++) {
+                String DayTime = cmdlist[1 + i * 7] + " " + cmdlist[2 + i * 7];
+                String date = "20" + cmdlist[1 + i * 7].trim();
+                String weather_name = Util.decodeUnicode2Utf8(cmdlist[3 + i * 7].trim());
+                String weather_id = cmdlist[4 + i * 7];
+                String temp_current = cmdlist[5 + i * 7];
+                String temp_high = cmdlist[6 + i * 7];
+                String temp_low = cmdlist[7 + i * 7];
+
+                sb.append(" " + DayTime);
+                sb.append(",天气:" + weather_name);
+                sb.append(",ID " + weather_id);
+                sb.append(",当前温度 " + temp_current);
+                sb.append(",最高温度 " + temp_high);
+                sb.append(",最低温度 " + temp_low);
+                sb.append("\n");
+
+                msg.append(date);
+                msg.append("," + weather_name);
+                msg.append("," + weather_id);
+                msg.append("," + temp_current);
+                msg.append("," + temp_high);
+                msg.append("," + temp_low);
+                msg.append(";");
+            }
+            String City = Util.decodeUnicode2Utf8(cmdlist[22]);
+
+            ICLogger.i(City + " \n" + sb.toString());
+
+            msg.insert(0, City + ";");
+            String weatherstr = msg.toString();
+            if (weatherstr.endsWith(";")) {
+                weatherstr = weatherstr.substring(0, weatherstr.lastIndexOf(";"));
+            }
+            Intent intent = new Intent(Constants.ACTION_WEATHER_RECEIVED);
+            intent.putExtra(Constants.KEY_Weather, weatherstr);
+            ICLogger.i("send Broadcast " + Constants.ACTION_WEATHER_RECEIVED + "\n" + weatherstr + "\n");
+            CoreService.getInstance().sendBroadcast(intent);
+
+        } else {
+            ICLogger.i(" BPTQ Format error!");
+        }
+    }
+
+
+    //处理 登录 BP00
+    public void handleBP00(Runtime runtime, String cmd) {
+        String[] msg = cmd.split(CMDSPLIT);
+//        get Msg :IWBP00,20191229171933,8# (size)24
+//        12-30 01:19:33.861 6492-6492/com.enqualcomm.support I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 ,  IWBP00,20191229171933,8
+
+        if (msg.length >= 3) {
+            ICLogger.d("handleBP00 Set Datetime " + msg[1]);
+            ICLogger.d("handleBP00 Set TimeZone " + msg[2]);
+
+            try {
+                Date datetime = TimeUtil.parseDatetiime(msg[1]);
+                int timezone = Integer.parseInt(msg[2]);
+                if (datetime != null) {
+                    ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
+                    TimeUtil.setTimeZone(runtime.getContextProxy().context, timezone);
+
+                    ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
+                    TimeUtil.setSysDateTime(runtime.getContextProxy().context, datetime, timezone, true);
+                    ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
+
+                }
+//            Set Datetime 20200505112734
+//            Set TimeZone 8
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
+            }
+        } else {
+            ICLogger.d("handleBP00 format Error");
+        }
+    }
+
+
+    /**
+     * 这个指令有点特殊,做协议的有点强行解释,不承认应用的APP做错了。那就按这个功能来吧。
+     * 这里本意是上课时间段静音,所以这个就做成静音了。其实是有静音的开关接口的。
+     *
+     * @param cmd
+     * @param mConnection
+     */
+    private void handleBP26(String cmd, Connection mConnection) {
+        String[] split = cmd.split(CMD_SPLIT);
+        //IWBP26,353456789012345,080835,1,2,123|0900@1145,456|1300@1600
+        try {
+            //1为开,0 为关
+            //修改情景模式
+            AudioManager audioManager =
+                    (AudioManager) mRuntime.getContextProxy()
+                            .context.getSystemService(Context.AUDIO_SERVICE);
+            String trigger = split[3];
+            ICLogger.d("trigger == > " + trigger);
+            if ("1".equals(trigger)) {
+                ProfileManager.ringModel(audioManager);
+            } else {
+                ProfileManager.ringAndVibrate(audioManager);
+            }
+            //回复服务器
+//            mConnection.send(
+//                    genStringMessage(cmdMap.get(CMD_TYPE.AP26),)
+//            );
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }