add fzd weather aidl files.
authorTrillGates <williamtrillgates@gmail.com>
Fri, 16 Apr 2021 06:49:27 +0000 (14:49 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Fri, 16 Apr 2021 06:49:27 +0000 (14:49 +0800)
app/src/main/AndroidManifest.xml
app/src/main/aidl/com/ic/fzd/weather/IFZDWeatherCallback.aidl
app/src/main/aidl/com/ic/fzd/weather/IFZDWeatherService.aidl
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/ic/fzd/weather/FZDWeatherInfo.java
app/src/main/java/com/ic/protocols/protocol_fzd.java

index bf90595..50528cc 100644 (file)
                 <action android:name="com.enqualcomm.support.OTHER_ALARM_END" />
                 <action android:name="com.enqualcomm.support.OTHER_ALARM_START" />
                 <action android:name="com.ic.action.VIDEO_CALL" />
+                <action android:name="com.ic.fzd.action.WEATHER" />
                 <action android:name="com.ic.power.ACTION_ALARM_POWER_OFF" />
             </intent-filter>
         </service>
index 56cf468..95ed6f3 100644 (file)
@@ -1,6 +1,7 @@
 
 package com.ic.fzd.weather;
+import com.ic.fzd.weather.FZDWeatherInfo;
 
 interface IFZDWeatherCallback {
-    void onWeatherInfoLoaded();
+    void onWeatherInfoLoaded(in FZDWeatherInfo fzdWeatherInfo);
 }
\ No newline at end of file
index 8ceac13..66af755 100644 (file)
@@ -1,8 +1,10 @@
 
 package com.ic.fzd.weather;
+import com.ic.fzd.weather.IFZDWeatherCallback;
+
 
 interface IFZDWeatherService {
-    void registerCallback();
-    void unRegisterCallback();
-    void loadWeahterInfo();
+    void registerCallback(IFZDWeatherCallback callback);
+    void unRegisterCallback(IFZDWeatherCallback callback);
+    void loadWeatherInfo();
 }
\ No newline at end of file
index d122589..0615649 100644 (file)
@@ -60,6 +60,8 @@ import com.enqualcomm.support.utils.Util;
 import com.enqualcomm.support.utils.VibrateUtil;
 import com.enqualcomm.support.utils.WakeLockUtil;
 import com.enqualcomm.support.utils.mqttConnection;
+import com.ic.fzd.weather.IFZDWeatherCallback;
+import com.ic.fzd.weather.IFZDWeatherService;
 import com.ic.jni.ICJniUtils;
 import com.ic.protocols.protocolAPIHelper;
 import com.ic.protocols.protocol_fzd;
@@ -1699,6 +1701,8 @@ public class CoreService extends Service {
                 e.printStackTrace();
             }
             return mFZDService;
+        } else if ("com.ic.fzd.action.WEATHER".equals(action)) {
+            return mFZDWeatherService;
         }
         return this.mMessenger.getBinder();
     }
@@ -1707,6 +1711,30 @@ public class CoreService extends Service {
         this.connection.close();
     }
 
+    private final IFZDWeatherService.Stub mFZDWeatherService = new IFZDWeatherService.Stub() {
+        @Override
+        public void registerCallback(IFZDWeatherCallback callback) {
+            //只有一个接口,设置到runtime里即可
+            runtime.setFZDWeatherCallback(callback);
+        }
+
+        @Override
+        public void unRegisterCallback(IFZDWeatherCallback callback) {
+            //只有一个接口,设置到runtime里置空
+            runtime.setFZDWeatherCallback(null);
+        }
+
+        @Override
+        public void loadWeatherInfo() {
+            //获取天气信息
+            StringMessage wt = protocol_fzd.WT(runtime);
+            connection.send(wt);
+            StringMessage wt2 = protocol_fzd.WT2(runtime);
+            connection.send(wt2);
+        }
+    };
+
+
     private final IFZDService.Stub mFZDService = new IFZDService.Stub() {
         @Override
         public void registerCallback(IFZDCallback callback) {
@@ -1727,7 +1755,7 @@ public class CoreService extends Service {
             //获取联系人
             StringMessage cmdmMembers = protocol_fzd.MEMBERS();
             //获取佰锐ID
-            Deliver.sendLocationMSG(cmdmMembers);
+            connection.send(cmdmMembers);
             ICLogger.d("get contacts...");
         }
 
@@ -1735,7 +1763,7 @@ public class CoreService extends Service {
         public void getBRId() {
             StringMessage cmdBREG = protocol_fzd.BRREG();
             //获取佰锐ID
-            Deliver.sendLocationMSG(cmdBREG);
+            connection.send(cmdBREG);
             ICLogger.d("get bairui id..");
         }
 
@@ -1744,7 +1772,7 @@ public class CoreService extends Service {
         public void rejectCallInCome(String remoteId, int type) {
             //拒绝来电
             StringMessage rejectMsg = protocol_fzd.RCALLING(remoteId, type);
-            Deliver.sendLocationMSG(rejectMsg);
+            connection.send(rejectMsg);
             ICLogger.d("reject remote call request..." + remoteId + "..." + type);
         }
 
@@ -1752,7 +1780,7 @@ public class CoreService extends Service {
         public void requireCall(int type, int remoteUserId) {
             //请求与对方通话
             StringMessage talk = protocol_fzd.TALK(type, remoteUserId);
-            Deliver.sendLocationMSG(talk);
+            connection.send(talk);
             ICLogger.d("require call == > type is " + type + " remote user id is == > " + remoteUserId);
         }
 
@@ -1785,14 +1813,14 @@ public class CoreService extends Service {
             ICLogger.d("unbindFriends == > " + remoteFriendId);
             StringMessage ppr = protocol_fzd.PPR(remoteFriendId);
             //解除朋友
-            Deliver.sendLocationMSG(ppr);
+            connection.send(ppr);
         }
 
         @Override
         public void getFriendsList() {
             ICLogger.d("get friends list...");
             StringMessage ppq = protocol_fzd.PPQ();
-            Deliver.sendLocationMSG(ppq);
+            connection.send(ppq);
         }
     };
 
index 1db8b58..a27eb51 100644 (file)
@@ -12,6 +12,7 @@ import com.enqualcomm.support.utils.DBHelper;
 import com.enqualcomm.support.utils.DnsUtil;
 import com.enqualcomm.support.utils.ICLogger;
 import com.enqualcomm.support.utils.LanguageUtils;
+import com.ic.fzd.weather.IFZDWeatherCallback;
 
 import java.io.File;
 
@@ -118,7 +119,7 @@ public class Runtime {
     }
 
     public boolean isServerProtocolConnected() {
-       // ICLogger.d("ServerHeartBeadReceived == > " + ServerHeartBeadReceived);
+        // ICLogger.d("ServerHeartBeadReceived == > " + ServerHeartBeadReceived);
         return ServerHeartBeadReceived;
     }
 
@@ -206,6 +207,13 @@ public class Runtime {
         fzdCallbackList.unregister(callback);
     }
 
+    public IFZDWeatherCallback mFZDWeatherCallback = null;
+
+    public void setFZDWeatherCallback(IFZDWeatherCallback callback) {
+        this.mFZDWeatherCallback = callback;
+    }
+
+
     public enum AlarmType {
         ALARM_SOS, //sos
         ALARM_LOWBATTERY, //低电
index 798b95b..2dae509 100644 (file)
@@ -8,15 +8,30 @@ import android.os.Parcelable;
  * 时间,天气描述,天气编号,当前温度,最低温度,最高温度,城市名称,风向,风多少级
  */
 public class FZDWeatherInfo implements Parcelable {
+    public FZDWeatherInfo(String weatherText, String code,
+                          String currentTempe, String lowTemp, String highTemp,
+                          String cityName, String windDirection,
+                          String windLev, String dateTime) {
+        this.weatherText = weatherText;
+        this.code = code;
+        this.currentTempe = currentTempe;
+        this.lowTemp = lowTemp;
+        this.highTemp = highTemp;
+        this.cityName = cityName;
+        this.windDirection = windDirection;
+        this.windLev = windLev;
+        this.dateTime = dateTime;
+    }
+
     private String weatherText;
     //0表示晴,1表示阴,2表示雨,3表示雪
-    private int code;
+    private String code;
     //当前温度
-    private int currentTempe;
+    private String currentTempe;
     //
-    private int lowTemp;
+    private String lowTemp;
     //
-    private int highTemp;
+    private String highTemp;
     //城市名称
     private String cityName;
     //风向
@@ -34,35 +49,35 @@ public class FZDWeatherInfo implements Parcelable {
         this.weatherText = weatherText;
     }
 
-    public int getCode() {
+    public String getCode() {
         return code;
     }
 
-    public void setCode(int code) {
+    public void setCode(String code) {
         this.code = code;
     }
 
-    public int getCurrentTempe() {
+    public String getCurrentTempe() {
         return currentTempe;
     }
 
-    public void setCurrentTempe(int currentTempe) {
+    public void setCurrentTempe(String currentTempe) {
         this.currentTempe = currentTempe;
     }
 
-    public int getLowTemp() {
+    public String getLowTemp() {
         return lowTemp;
     }
 
-    public void setLowTemp(int lowTemp) {
+    public void setLowTemp(String lowTemp) {
         this.lowTemp = lowTemp;
     }
 
-    public int getHighTemp() {
+    public String getHighTemp() {
         return highTemp;
     }
 
-    public void setHighTemp(int highTemp) {
+    public void setHighTemp(String highTemp) {
         this.highTemp = highTemp;
     }
 
@@ -104,16 +119,34 @@ public class FZDWeatherInfo implements Parcelable {
 
     protected FZDWeatherInfo(Parcel in) {
         weatherText = in.readString();
-        code = in.readInt();
-        currentTempe = in.readInt();
-        lowTemp = in.readInt();
-        highTemp = in.readInt();
+        code = in.readString();
+        currentTempe = in.readString();
+        lowTemp = in.readString();
+        highTemp = in.readString();
         cityName = in.readString();
         windDirection = in.readString();
         windLev = in.readString();
         dateTime = in.readString();
     }
 
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(weatherText);
+        dest.writeString(code);
+        dest.writeString(currentTempe);
+        dest.writeString(lowTemp);
+        dest.writeString(highTemp);
+        dest.writeString(cityName);
+        dest.writeString(windDirection);
+        dest.writeString(windLev);
+        dest.writeString(dateTime);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
     public static final Creator<FZDWeatherInfo> CREATOR = new Creator<FZDWeatherInfo>() {
         @Override
         public FZDWeatherInfo createFromParcel(Parcel in) {
@@ -125,22 +158,4 @@ public class FZDWeatherInfo implements Parcelable {
             return new FZDWeatherInfo[size];
         }
     };
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeString(weatherText);
-        dest.writeInt(code);
-        dest.writeInt(currentTempe);
-        dest.writeInt(lowTemp);
-        dest.writeInt(highTemp);
-        dest.writeString(cityName);
-        dest.writeString(windDirection);
-        dest.writeString(windLev);
-        dest.writeString(dateTime);
-    }
 }
index 76b4351..e7f44d4 100644 (file)
@@ -52,6 +52,7 @@ import com.enqualcomm.support.utils.TimeUtil;
 import com.enqualcomm.support.utils.Util;
 import com.enqualcomm.support.utils.WifiSupport;
 import com.enqualcomm.support.utils.regexUtil;
+import com.ic.fzd.weather.FZDWeatherInfo;
 import com.sina.util.dnscache.AppConfigUtil;
 
 import java.io.ByteArrayOutputStream;
@@ -86,14 +87,14 @@ import static java.lang.Math.abs;
  */
 public class protocol_fzd {
     private static final String TAG = "ICSrv." + protocol_fzd.class.getSimpleName();
-    private static final String PrivKEY = "XMQcHi0lGIdru6xzW7lygBwBT8N0c09P";
-    private static final String CMDHEADER = "[";
-    private static final String CMDCOMPANY = "IC";
-    private static final String CMDEND = "]";
-    private static final String CMDHEADERSPLIT = "*";
-    private static final String CMDSPLIT = ",";
+    private static final String PRIVATE_KEY = "XMQcHi0lGIdru6xzW7lygBwBT8N0c09P";
+    private static final String CMD_HEADER = "[";
+    private static final String CMD_COMPANY = "IC";
+    private static final String CMD_END = "]";
+    private static final String CMD_HEADER_SPLIT = "*";
+    private static final String CMD_SPLIT = ",";
     private static final boolean doEncryption = Util.getSystemProperties("persist.sys.encrypt_fzd", "true").equals("true");
-    public static final String defaultServerIP = "fzd.xcloudtech.com";
+    public static final String defaultServerIP = "api.xcloudtech.com";
     public static final int defaultServerPort = 9000;
     private final SharedPreferences sharedPreferences;
     private final Handler mHandler;
@@ -149,18 +150,18 @@ public class protocol_fzd {
                     StringBuilder sb = new StringBuilder();
                     if (doEncryption) {
                         String keyHeader = keyheader(cmd, tkLength);
-                        sb.append(CMDHEADER).append(keyHeader).append(header);
+                        sb.append(CMD_HEADER).append(keyHeader).append(header);
                     } else {
-                        sb.append(CMDHEADER).append(header);
+                        sb.append(CMD_HEADER).append(header);
                     }
                     //头部构造好了,添加逗号
-                    sb.append(CMDSPLIT);
+                    sb.append(CMD_SPLIT);
                     //转成byte
                     bos.write(sb.toString().getBytes());
                     //追加数据
                     bos.write(result);
                     //追加结尾
-                    bos.write(CMDEND.getBytes());
+                    bos.write(CMD_END.getBytes());
                 } else {
                     //单聊
                     cmd = cmdMap.get(CMD_TYPE.TKOne);
@@ -169,25 +170,25 @@ public class protocol_fzd {
                     StringBuilder sb = new StringBuilder();
                     if (doEncryption) {
                         String keyHeader = keyheader(cmd, tkLength);
-                        sb.append(CMDHEADER).append(keyHeader).append(header);
+                        sb.append(CMD_HEADER).append(keyHeader).append(header);
                     } else {
-                        sb.append(CMDHEADER).append(header);
+                        sb.append(CMD_HEADER).append(header);
                     }
                     //头部构造好了,添加逗号
-                    sb.append(CMDSPLIT);
+                    sb.append(CMD_SPLIT);
                     //添加APP账号
                     sb.append(remoteNum);
-                    sb.append(CMDSPLIT);
+                    sb.append(CMD_SPLIT);
                     //秒数
                     ICLogger.d("duration == > " + duration);
                     sb.append(duration);
-                    sb.append(CMDSPLIT);
+                    sb.append(CMD_SPLIT);
                     //加入数据
                     bos.write(sb.toString().getBytes());
                     //数据包数据
                     bos.write(result);
                     //结尾数据
-                    bos.write(CMDEND.getBytes());
+                    bos.write(CMD_END.getBytes());
                 }
                 //发送数据
                 mConnection.send(cmd, bos.toByteArray());
@@ -308,32 +309,32 @@ public class protocol_fzd {
                 //发送消息
                 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMddHHmmss");
                 String timeFormat = simpleDateFormat.format(System.currentTimeMillis());
-                int cmdLength = cmd.length() + CMDSPLIT.length() + "5".length() + CMDSPLIT.length()
-                        + timeFormat.length() + CMDSPLIT.length() + result.length;
+                int cmdLength = cmd.length() + CMD_SPLIT.length() + "5".length() + CMD_SPLIT.length()
+                        + timeFormat.length() + CMD_SPLIT.length() + result.length;
 
                 ICLogger.d("cmdLength == > " + cmdLength);
                 String header = genHeader(cmdLength, cmd);
                 StringBuilder sb = new StringBuilder();
                 if (doEncryption) {
                     String keyHeader = keyheader(cmd, cmdLength);
-                    sb.append(CMDHEADER).append(keyHeader).append(header);
+                    sb.append(CMD_HEADER).append(keyHeader).append(header);
                 } else {
-                    sb.append(CMDHEADER).append(header);
+                    sb.append(CMD_HEADER).append(header);
                 }
                 //头部构造好了,添加逗号
-                sb.append(CMDSPLIT);
+                sb.append(CMD_SPLIT);
                 //追加x
                 sb.append("5");
-                sb.append(CMDSPLIT);
+                sb.append(CMD_SPLIT);
                 //追加Y
                 sb.append(timeFormat);
-                sb.append(CMDSPLIT);
+                sb.append(CMD_SPLIT);
                 //转成byte
                 bos.write(sb.toString().getBytes());
                 //追加数据Z
                 bos.write(result);
                 //追加结尾
-                bos.write(CMDEND.getBytes());
+                bos.write(CMD_END.getBytes());
                 //发送数据
                 mConnection.send(cmd, bos.toByteArray());
                 bos.reset();
@@ -547,17 +548,17 @@ public class protocol_fzd {
      */
     public static String isCmdStr(String msg) {
         String cmd_msgbuf = msg;
-        int cmdindex = cmd_msgbuf.indexOf(CMDCOMPANY + CMDHEADERSPLIT);
+        int cmdindex = cmd_msgbuf.indexOf(CMD_COMPANY + CMD_HEADER_SPLIT);
         if (cmdindex > 0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据
             String cmd = cmd_msgbuf.substring(cmdindex);
             cmd_msgbuf = cmd;
         }
-        cmdindex = cmd_msgbuf.indexOf(CMDEND);
+        cmdindex = cmd_msgbuf.indexOf(CMD_END);
         if (cmdindex > 0) {
             String cmd = cmd_msgbuf.substring(0, cmdindex);
             cmd_msgbuf = cmd;
         }
-        cmdindex = cmd_msgbuf.indexOf(CMDSPLIT);
+        cmdindex = cmd_msgbuf.indexOf(CMD_SPLIT);
         if (cmdindex > 0) {
             String cmd = cmd_msgbuf.substring(0, cmdindex);
             cmd_msgbuf = cmd;
@@ -613,7 +614,7 @@ public class protocol_fzd {
         //by TrillGates
         ICLogger.d("添加第" + dataPart + "部分数据.");
         dataPart++;
-        if (dataStr.startsWith(CMDHEADER + CMDCOMPANY + CMDHEADERSPLIT)) {
+        if (dataStr.startsWith(CMD_HEADER + CMD_COMPANY + CMD_HEADER_SPLIT)) {
             ICLogger.d("头部数据,开始接收数据了...");
             //命令开始,准备好容器,开始保存数据
             dataPart = 1;
@@ -623,20 +624,20 @@ public class protocol_fzd {
             totalByte = byteMerger(totalByte, bytes);
         }
         //命令结束,开始处理内容
-        if (dataStr.endsWith(CMDEND)) {
+        if (dataStr.endsWith(CMD_END)) {
             ICLogger.d("数据接收结束..开始处理数据." + totalByte.length);
             //处理数据了
             //获取指令
             String content = new String(totalByte);
             ICLogger.d("total content == > " + content);
             //切割出指令
-            int cmdIndex = content.indexOf(CMDSPLIT);
+            int cmdIndex = content.indexOf(CMD_SPLIT);
             ICLogger.d("cmdIndex == > " + cmdIndex);
             //指令带数据的
             String cmd = null;
             if (cmdIndex > 0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据
                 cmd = content.substring(1, cmdIndex);
-            } else if (content.startsWith(CMDHEADER) && content.endsWith(CMDEND)) {
+            } else if (content.startsWith(CMD_HEADER) && content.endsWith(CMD_END)) {
                 //纯指令的:[IC*860314001009830*0002*LK],没有逗号的
                 cmd = content.replace("[", "").replace("]", "");
             }
@@ -653,8 +654,8 @@ public class protocol_fzd {
                     } else if (key == CMD_TYPE.TKIMG) {
                         handleImage(totalByte);
                     } else {
-                        String data = content.replace(CMDHEADER, "").replace(cmd, "").replace(CMDEND, "");
-                        if (data.startsWith(CMDSPLIT)) {
+                        String data = content.replace(CMD_HEADER, "").replace(cmd, "").replace(CMD_END, "");
+                        if (data.startsWith(CMD_SPLIT)) {
                             data = data.substring(1);
                         }
                         handleCmd(key, cmd, data);
@@ -860,14 +861,14 @@ public class protocol_fzd {
         }
 
         String imei = CoreService.getInstance().getRuntime().IMEI();
-        return new StringBuilder().append(CMDCOMPANY).append(CMDHEADERSPLIT)
-                .append(imei).append(CMDHEADERSPLIT)
-                .append(getHexLen(len)).append(CMDHEADERSPLIT).append(cmd).toString();
+        return new StringBuilder().append(CMD_COMPANY).append(CMD_HEADER_SPLIT)
+                .append(imei).append(CMD_HEADER_SPLIT)
+                .append(getHexLen(len)).append(CMD_HEADER_SPLIT).append(cmd).toString();
     }
 
     private static String keyheader(String cmd, int len) {
         String header = genHeader(len, cmd);
-        String key = MD5.getCMDStringMD5(header + PrivKEY);
+        String key = MD5.getCMDStringMD5(header + PRIVATE_KEY);
         return key;
     }
 
@@ -877,9 +878,9 @@ public class protocol_fzd {
         String header = genHeader(len, CMD);
         if (doEncryption) {
             String keyheader = keyheader(CMD, len);
-            sb.append(CMDHEADER).append(keyheader).append(header).append(CMDEND);
+            sb.append(CMD_HEADER).append(keyheader).append(header).append(CMD_END);
         } else {
-            sb.append(CMDHEADER).append(header).append(CMDEND);
+            sb.append(CMD_HEADER).append(header).append(CMD_END);
         }
         return genStringMessage(CMD, sb.toString());
     }
@@ -887,14 +888,14 @@ public class protocol_fzd {
 
     public static StringMessage genFZDCMD(String CMD, String data) {
         StringBuilder sb = new StringBuilder();
-        String data_buf = CMD + CMDSPLIT + data;
+        String data_buf = CMD + CMD_SPLIT + data;
         int data_buf_len = data_buf.length();
         String header = genHeader(data_buf_len, CMD);
         if (doEncryption) {
             String keyheader = keyheader(CMD, data_buf_len);//计算header md5值
-            sb.append(CMDHEADER).append(keyheader).append(header).append(CMDSPLIT).append(data).append(CMDEND);
+            sb.append(CMD_HEADER).append(keyheader).append(header).append(CMD_SPLIT).append(data).append(CMD_END);
         } else {
-            sb.append(CMDHEADER).append(header).append(CMDSPLIT).append(data).append(CMDEND);
+            sb.append(CMD_HEADER).append(header).append(CMD_SPLIT).append(data).append(CMD_END);
         }
         return genStringMessage(CMD, sb.toString());
     }
@@ -1031,9 +1032,9 @@ public class protocol_fzd {
     public static StringMessage KA(Runtime runtime) {
         StringBuilder sb = new StringBuilder();
         String cmd = cmdMap.get(CMD_TYPE.KA);
-        sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
-                .append(runtime.getTotalStepCount()).append(CMDSPLIT)
-                .append(runtime.getRolltimes()).append(CMDSPLIT)
+        sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMD_SPLIT)
+                .append(runtime.getTotalStepCount()).append(CMD_SPLIT)
+                .append(runtime.getRolltimes()).append(CMD_SPLIT)
                 .append(runtime.getBattery());
         return genFZDCMD(cmd, sb.toString());
     }
@@ -1074,7 +1075,7 @@ public class protocol_fzd {
      */
     public void handleSILENCETIME2(Connection connection, Runtime runtime, String cmd, String data) {
         connection.send(SILENCETIME2(runtime));
-        String[] silent_items = data.split(CMDSPLIT);
+        String[] silent_items = data.split(CMD_SPLIT);
         ArrayList<Silent> slist = new ArrayList<>();
         if (silent_items.length > 0) {
             for (String si : silent_items) {
@@ -1111,7 +1112,7 @@ public class protocol_fzd {
      *  实例: [XT*1234567890*001D*LGZONE,+8,08:00:00,2016-01-12]
      */
     public void handleLGZONE(Runtime runtime, String data) {
-        String[] list = data.split(CMDSPLIT);
+        String[] list = data.split(CMD_SPLIT);
         if (list.length == 3) {
             String timeZone = list[0].trim();
             String date = list[2].trim();
@@ -1190,15 +1191,15 @@ public class protocol_fzd {
      */
     private static String getLocationData(Runtime runtime) {
         StringBuilder sb = new StringBuilder();
-        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(runtime)).append(CMDSPLIT)
-                .append(runtime.getFZDLBSMultiStationData()).append(CMDSPLIT)
+        sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMD_SPLIT)
+                .append(TimeUtil.getSystemTimeHHmmss()).append(CMD_SPLIT)
+                .append(runtime.getFZDGPSData()).append(CMD_SPLIT)
+                .append(String.format("%03d", abs(runtime.getSignalStrength()))).append(CMD_SPLIT)
+                .append(runtime.getBattery()).append(CMD_SPLIT)
+                .append(runtime.getTotalStepCount()).append(CMD_SPLIT)
+                .append(runtime.getRolltimes()).append(CMD_SPLIT)
+                .append(runtime.getFZDDevStatus(runtime)).append(CMD_SPLIT)
+                .append(runtime.getFZDLBSMultiStationData()).append(CMD_SPLIT)
                 .append(runtime.getFZDWifiData());
         return sb.toString();
     }
@@ -1214,15 +1215,15 @@ public class protocol_fzd {
     public static StringMessage AL(Runtime runtime) {
         StringBuilder sb = new StringBuilder();
         String cmd = cmdMap.get(CMD_TYPE.AL);
-        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(runtime)).append(CMDSPLIT)
-                .append(runtime.getFZDLBSMultiStationData()).append(CMDSPLIT)
+        sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMD_SPLIT)
+                .append(TimeUtil.getSystemTimeHHmmss()).append(CMD_SPLIT)
+                .append(runtime.getFZDGPSData()).append(CMD_SPLIT)
+                .append(String.format("%03d", abs(runtime.getSignalStrength()))).append(CMD_SPLIT)
+                .append(runtime.getBattery()).append(CMD_SPLIT)
+                .append(runtime.getTotalStepCount()).append(CMD_SPLIT)
+                .append(runtime.getRolltimes()).append(CMD_SPLIT)
+                .append(runtime.getFZDDevStatus(runtime)).append(CMD_SPLIT)
+                .append(runtime.getFZDLBSMultiStationData()).append(CMD_SPLIT)
                 .append(runtime.getFZDWifiData());
 
         return genFZDCMD(cmd, sb.toString());
@@ -1259,7 +1260,7 @@ public class protocol_fzd {
     }
 
     public static StringMessage blood(int pbl, int pbh) {
-        String data = pbh + CMDSPLIT + pbl;
+        String data = pbh + CMD_SPLIT + pbl;
         return genFZDCMD(cmdMap.get(CMD_TYPE.blood), data);
     }
 
@@ -1335,7 +1336,7 @@ public class protocol_fzd {
         connection.send(SOS());
         //TODO:保存到fzd的联系人里,类型为SOS
         if (data != null && data.length() > 0) {
-            String[] list = data.split(CMDSPLIT);
+            String[] list = data.split(CMD_SPLIT);
             ArrayList<Contact> contactArray = new ArrayList<Contact>();
             ContentValues contentValues = new ContentValues();
             contentValues.put(FZDDatabaseHelper.fType, FZDDatabaseHelper.MemberType.SOS);
@@ -1405,7 +1406,7 @@ public class protocol_fzd {
      * 终端回复:[IC*334588000000156*0003*PHL]
      */
     public void handlePHL(Connection connection, Runtime runtime, String cmd, String data) {
-        String list[] = data.split(CMDSPLIT);
+        String list[] = data.split(CMD_SPLIT);
         int listLen = list.length;
         boolean isPared = ((listLen >= 0) && (listLen % 2 == 0));
         if (isPared) {
@@ -1767,7 +1768,7 @@ public class protocol_fzd {
     private void handlerPPQ(String data, Runtime mRuntime) {
         ICLogger.d("PPQ data ====> " + data);
         //解析数据,三个为一组
-        String[] split = data.split(CMDSPLIT);
+        String[] split = data.split(CMD_SPLIT);
         if (split.length % 3 == 0) {
             //1,2,3,4,5,6,7
             for (int i = 0; i < split.length - 2; i += 3) {
@@ -1835,7 +1836,7 @@ public class protocol_fzd {
         //第一种情况[XT*8800000015*000A*PP, 5F204E0,555]
         //另外一种情况 情况[XT*8800000015*0001*PP,1]/[XT*8800000015*0002*PP,2]
         //
-        boolean contains = data.contains(CMDSPLIT);
+        boolean contains = data.contains(CMD_SPLIT);
         int result = 0;
         String friendName = "";
         String friendId = "";
@@ -1843,7 +1844,7 @@ public class protocol_fzd {
         if (contains) {
             result = 0;
             //成功的结果
-            String[] split = data.split(CMDSPLIT);
+            String[] split = data.split(CMD_SPLIT);
             friendId = split[0];
             friendName = Util.decodeUnicode2Utf8(split[1]);
             if (split.length == 3) {
@@ -1922,7 +1923,7 @@ public class protocol_fzd {
     private void handleWIFISET(String cmd, String data, Runtime mRuntime) {
         ICLogger.d("WIFISET == > " + data);
         //解析数据
-        String[] split = data.split(CMDSPLIT);
+        String[] split = data.split(CMD_SPLIT);
         ICLogger.d("length == > " + split.length);
         Context context = mRuntime.getContextProxy()
                 .context;
@@ -1971,7 +1972,7 @@ public class protocol_fzd {
      */
     private void handleBOOTOFF(String cmd, String data, Runtime mRuntime) {
         //解析数据
-        String[] split = data.split(CMDSPLIT);
+        String[] split = data.split(CMD_SPLIT);
         if (split.length == 3) {
             try {
                 //3部分内容
@@ -2187,7 +2188,7 @@ public class protocol_fzd {
      */
     private void handleSettingsInfo(String data) {
         //对数据进行切割
-        String[] split = data.split(CMDSPLIT);
+        String[] split = data.split(CMD_SPLIT);
         //长度肯定是双数的,所以-1吧,
         for (int i = 0; i < split.length - 1; i += 2) {
             //每2个为一组
@@ -2291,7 +2292,7 @@ public class protocol_fzd {
      */
     private void handleWG(String data) {
         //先切割,再解码
-        String[] split = data.split(CMDSPLIT);
+        String[] split = data.split(CMD_SPLIT);
         if (split.length == 4) {
             String latitude = split[0];
             String longitude = split[1];
@@ -2321,22 +2322,34 @@ public class protocol_fzd {
         //转码
         String result = Util.decodeUnicode2Utf8(data);
         ICLogger.d("data ==> " + result);
-        String[] split = result.split(CMDSPLIT);
+        String[] split = result.split(CMD_SPLIT);
         if (split.length == 7) {
-            String city = split[0];
-            String wtDesc = split[1];
-            String temperature = split[2];
-            String windDirection = split[3];
-            String windLev = split[4];
-            String date = split[5];
-            String time = split[6];
-            ICLogger.d("city == > " + city);
-            ICLogger.d("wtDesc == > " + wtDesc);
-            ICLogger.d("temperature == > " + temperature);
-            ICLogger.d("windDirection == > " + windDirection);
-            ICLogger.d("windLev == > " + windLev);
-            ICLogger.d("date == > " + date);
-            ICLogger.d("time == > " + time);
+            try {
+                String city = split[0];
+                String wtDesc = split[1];
+                String temperature = split[2];
+                String windDirection = split[3];
+                String windLev = split[4];
+                String date = split[5];
+                String time = split[6];
+                ICLogger.d("city == > " + city);
+                ICLogger.d("wtDesc == > " + wtDesc);
+                ICLogger.d("temperature == > " + temperature);
+                ICLogger.d("windDirection == > " + windDirection);
+                ICLogger.d("windLev == > " + windLev);
+                ICLogger.d("date == > " + date);
+                ICLogger.d("time == > " + time);
+                FZDWeatherInfo fzdWeatherInfo = new FZDWeatherInfo(
+                        wtDesc, "-1", temperature, temperature,
+                        temperature, city, windDirection,
+                        windLev, date + " " + time
+                );
+                if (mRuntime.mFZDWeatherCallback != null) {
+                    mRuntime.mFZDWeatherCallback.onWeatherInfoLoaded(fzdWeatherInfo);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         } else {
             ICLogger.d("data -WT2- > split size " + split.length);
             ICLogger.d("parse data error..." + data);
@@ -2345,32 +2358,42 @@ public class protocol_fzd {
 
     /**
      * 处理天气结果,后面得通知到远程
-     * //TODO:
      * 年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,城 市名
      * 21-04-07,11:08:10,b6e0d4c6,1,23,-1,40,6DF157335E02
      *
      * @param data
      */
     private void handleWT(String data) {
-        String[] split = data.split(CMDSPLIT);
+        String[] split = data.split(CMD_SPLIT);
         if (split.length == 8) {
-            //获取数据
-            String date = split[0];
-            String time = split[1];
-            String wtDesc = Util.UrlGB2312ToUTF8(split[2]);
-            String wtCode = split[3];
-            String currentTemp = split[4];
-            String lowTemp = split[5];
-            String highTemp = split[6];
-            String cityName = Util.decodeUnicode2Utf8(split[7]);
-            ICLogger.d("date == > " + date);
-            ICLogger.d("time == > " + time);
-            ICLogger.d("wtDesc == > " + wtDesc);
-            ICLogger.d("wtCode == > " + wtCode);
-            ICLogger.d("currentTemp == > " + currentTemp);
-            ICLogger.d("lowTemp == > " + lowTemp);
-            ICLogger.d("highTemp == > " + highTemp);
-            ICLogger.d("cityName == > " + cityName);
+            try {
+                //获取数据
+                String date = split[0];
+                String time = split[1];
+                String wtDesc = Util.UrlGB2312ToUTF8(split[2]);
+                String wtCode = split[3];
+                String currentTemp = split[4];
+                String lowTemp = split[5];
+                String highTemp = split[6];
+                String cityName = Util.decodeUnicode2Utf8(split[7]);
+                ICLogger.d("date == > " + date);
+                ICLogger.d("time == > " + time);
+                ICLogger.d("wtDesc == > " + wtDesc);
+                ICLogger.d("wtCode == > " + wtCode);
+                ICLogger.d("currentTemp == > " + currentTemp);
+                ICLogger.d("lowTemp == > " + lowTemp);
+                ICLogger.d("highTemp == > " + highTemp);
+                ICLogger.d("cityName == > " + cityName);
+                FZDWeatherInfo fzdWeatherInfo = new FZDWeatherInfo(
+                        null, wtCode, currentTemp, lowTemp,
+                        highTemp, cityName, null, null, date + " " + time
+                );
+                if (mRuntime.mFZDWeatherCallback != null) {
+                    mRuntime.mFZDWeatherCallback.onWeatherInfoLoaded(fzdWeatherInfo);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         } else {
             ICLogger.d("data -WT- > split size " + split.length);
             ICLogger.d("parse data error..." + data);
@@ -2471,7 +2494,7 @@ public class protocol_fzd {
      * @param data
      */
     private void handleCallRequest(Connection mConnection, Runtime mRuntime, String data) {
-        String[] split = data.split(CMDSPLIT);
+        String[] split = data.split(CMD_SPLIT);
         if (split.length == 3) {
             needResponseCalling = true;
             //1、准备数据:对方的id,来电类型
@@ -2515,7 +2538,7 @@ public class protocol_fzd {
         int i = fzdCallback.beginBroadcast();
         try {
             ICLogger.d("data == > " + data);
-            String[] split = data.split(CMDSPLIT);
+            String[] split = data.split(CMD_SPLIT);
             while (i > 0) {
                 i--;
                 if (split.length == 3) {
@@ -2541,7 +2564,7 @@ public class protocol_fzd {
      */
     public static StringMessage TALK(int type, int remoteAccount) {
         //准备数据
-        String data = type + CMDSPLIT + remoteAccount + CMDSPLIT;
+        String data = type + CMD_SPLIT + remoteAccount + CMD_SPLIT;
         ICLogger.d("request talk == > " + data);
         return genFZDCMD(cmdMap.get(CMD_TYPE.TALK), data);
     }
@@ -2632,7 +2655,7 @@ public class protocol_fzd {
             String str = Util.decodeUnicode2Utf8(data);
             ICLogger.d("members result == > " + str);
             //对数据进行切割
-            String[] split = str.split(CMDSPLIT);
+            String[] split = str.split(CMD_SPLIT);
             //每3个为一组
             ICLogger.d("split.length = > " + split.length);
             if (split.length % 3 != 0) {