completed web sms cmd.
authorTrillGates <williamtrillgates@gmail.com>
Tue, 3 Aug 2021 09:47:03 +0000 (17:47 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Tue, 3 Aug 2021 09:47:03 +0000 (17:47 +0800)
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/utils/ICHttpUtil.java
app/src/main/java/com/ic/protocols/protocol_s123.java

index 6f7c1e9..e0557b3 100644 (file)
@@ -13,7 +13,6 @@ import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
 import android.os.HandlerThread;
-import android.os.Message;
 import android.os.SystemClock;
 import android.telephony.SmsMessage;
 import android.text.TextUtils;
@@ -75,11 +74,10 @@ public class ICSmsManager extends BroadcastReceiver {
     private static long preTimeMillis;
     private Context mContext = null;
     Runtime runtime;
-
     Handler mHandler;
 
-    ReplayLocation replayLocation = new ReplayLocation();
-    private boolean needshowToast = false;
+    static ReplayLocation replayLocation;
+    private static boolean needShowToast = false;
 
     @Override
     public void onReceive(Context context, Intent intent) {
@@ -103,7 +101,7 @@ public class ICSmsManager extends BroadcastReceiver {
         } else if (ACTION_SMSCMD_TEST.equals(action)) {
             String cmd = intent.getStringExtra("cmd");
             String arg = intent.getStringExtra("arg1");
-            handle_test_cmd(cmd, arg);
+            handle_test_cmd(runtime, mHandler, cmd, arg);
         } else if (ACTION_SMS_RECEIVED.equals(action)) {
             long currenttime = System.currentTimeMillis();
 //            if (currenttime - ICSmsManager.preTimeMillis > 30000L) {
@@ -203,6 +201,7 @@ public class ICSmsManager extends BroadcastReceiver {
     public ICSmsManager(Runtime _runtime) {
         this.runtime = _runtime;
         this.mContext = runtime.getContextProxy().context;
+        replayLocation = new ReplayLocation();
         IntentFilter intentfilter = new IntentFilter();
         intentfilter.addAction(ACTION_SMSCMD_Reply);
         intentfilter.addAction(ACTION_SMS_RECEIVED);
@@ -213,71 +212,72 @@ public class ICSmsManager extends BroadcastReceiver {
 //        registerSmsDatabaseChangeObserver(mContext);
         HandlerThread handlerThread = new HandlerThread("ic:SMS-thread");
         handlerThread.start();
-        mHandler = new Handler(handlerThread.getLooper(), new Handler.Callback() {
-            @Override
-            public boolean handleMessage(Message message) {
-                switch (message.what) {
-                    case 100: {
-                        Bundle param = message.getData();
-                        if (param != null) {
-                            String from = param.getString("SMSFrom");
-                            String smsmessage = param.getString("SMSData");
-                            long currenttime = System.currentTimeMillis();
-                            ICSmsManager.preTimeMillis = currenttime;
-                            (new Thread(new Runnable() {
-                                public void run() {
-                                    SystemClock.sleep(3000L);
-                                    ICLogger.i("收到" + from + "短信:" + smsmessage);
-                                    //以下是处理指令的
-                                    //判断是否要弹窗,强制读取
-                                    String forceReadMsg = Util.getSystemProperties("persist.sys.forcereadmsg");
-                                    ICLogger.d("forceReadMsg == > " + forceReadMsg);
-                                    if (!handleSMS_CMD(from, smsmessage)) {
-                                        //说明不是sms命令,提示短信接收。
-                                        if (!TextUtils.isEmpty(forceReadMsg)) {
-                                            WakeLockUtil.ScreenOnWakeLockTemperary(mContext);
-                                            ContextProxy.play_waning_notify(mContext);
-                                            VibrateUtil.getInstance(mContext).VibrateOnOnce(true);
-                                            Util.mSleep(2000);
-
-                                            MsgMustReadDialog instance = MsgMustReadDialog.getInstance();
-                                            instance.showMsgDialog();
-                                            List<String> list = new ArrayList<>();
-                                            list.add(smsmessage);
-                                            instance.addData(list);
-                                        } else {
-                                            ContextProxy.sendMsgBroadcast(mContext, smsmessage, 1);
-                                        }
+        mHandler = new Handler(handlerThread.getLooper(), message -> {
+            switch (message.what) {
+                case 100: {
+                    Bundle param = message.getData();
+                    if (param != null) {
+                        String from = param.getString("SMSFrom");
+                        String smsmessage = param.getString("SMSData");
+                        long currenttime = System.currentTimeMillis();
+                        ICSmsManager.preTimeMillis = currenttime;
+                        (new Thread(new Runnable() {
+                            public void run() {
+                                SystemClock.sleep(3000L);
+                                ICLogger.i("收到" + from + "短信:" + smsmessage);
+                                //以下是处理指令的
+                                //判断是否要弹窗,强制读取
+                                String forceReadMsg = Util.getSystemProperties("persist.sys.forcereadmsg");
+                                ICLogger.d("forceReadMsg == > " + forceReadMsg);
+                                if (!handleSMS_CMD(from, smsmessage)) {
+                                    //说明不是sms命令,提示短信接收。
+                                    if (!TextUtils.isEmpty(forceReadMsg)) {
+                                        WakeLockUtil.ScreenOnWakeLockTemperary(mContext);
+                                        ContextProxy.play_waning_notify(mContext);
+                                        VibrateUtil.getInstance(mContext).VibrateOnOnce(true);
+                                        Util.mSleep(2000);
+
+                                        MsgMustReadDialog instance = MsgMustReadDialog.getInstance();
+                                        instance.showMsgDialog();
+                                        List<String> list = new ArrayList<>();
+                                        list.add(smsmessage);
+                                        instance.addData(list);
+                                    } else {
+                                        ContextProxy.sendMsgBroadcast(mContext, smsmessage, 1);
                                     }
                                 }
-                            })).start();
-                        }
+                            }
+                        })).start();
                     }
-                    break;
-                    case 0:
-                        sendSMS(cell_number_to_reply, "Upload  Failed!");
-                        cell_number_to_reply = "";
-                        if (needshowToast) {
-                            Util.ShowToast(runtime, "Upload cmd  Failed!");
-                            needshowToast = false;
-                        }
-                        break;
-
-                    case 1:
-                        sendSMS(cell_number_to_reply, "Upload  success!");
-                        cell_number_to_reply = "";
-                        if (needshowToast) {
-                            Util.ShowToast(runtime, "Upload cmd  success!");
-                            needshowToast = false;
-                        }
-                        break;
                 }
-                return false;
+                break;
+                case 0:
+                    sendSMS(cell_number_to_reply, "Upload  Failed!");
+                    cell_number_to_reply = "";
+                    if (needShowToast) {
+                        Util.ShowToast(runtime, "Upload cmd  Failed!");
+                        needShowToast = false;
+                    }
+                    break;
+
+                case 1:
+                    sendSMS(cell_number_to_reply, "Upload  success!");
+                    cell_number_to_reply = "";
+                    if (needShowToast) {
+                        Util.ShowToast(runtime, "Upload cmd  success!");
+                        needShowToast = false;
+                    }
+                    break;
             }
+            return false;
         });
     }
 
-    public void sendSMS(String phoneNumber, String msg) {
+    public static void sendSMS(String phoneNumber, String msg) {
+        if (TextUtils.isEmpty(phoneNumber)) {
+            ICLogger.d("phone number is null...");
+            return;
+        }
         android.telephony.SmsManager smsManager = android.telephony.SmsManager.getDefault();
         Iterator msgit = smsManager.divideMessage(msg).iterator();
         while (msgit.hasNext()) {
@@ -294,7 +294,7 @@ public class ICSmsManager extends BroadcastReceiver {
         return true;
     }
 
-    private void broadCastStartFotaUpdate(Context context) {
+    private static void broadCastStartFotaUpdate(Context context) {
 
         Intent intent = new Intent();
         intent.setAction(ACTION_START_FOTA_UPDATE);
@@ -340,144 +340,169 @@ public class ICSmsManager extends BroadcastReceiver {
     /*
      *  return false表示不是命令, true表示是命令,且已经执行
      * */
-    public boolean handleSMS_CMD(String phonenumber, String sms) {
-        if (isAdminNumber(phonenumber)) {
-
-            String ENCRYPED_HEADER = Config.getSMSPwd(mContext);
-            if (ENCRYPED_HEADER.equals(Config.DefaultSMSPassword)) {
-                ENCRYPED_HEADER = "";
-            }
-
+    public boolean handleSMS_CMD(String phoneNumber, String sms) {
+        if (isAdminNumber(phoneNumber)) {
             if (sms == null || sms.trim().isEmpty()) return false;
-
             ICLogger.i("received SMSCMD " + sms);
             sms = sms.trim();
-            if (sms.equals(ENCRYPED_HEADER + "#logctl#=upload,all")) {
-                sms = ENCRYPED_HEADER + "#logctl#=upload,SDLog:Android/ic";
-            }
-            //$HX,SSER,OK,91.201.4.79,5018,C,589883
-            if (sms.startsWith(ENCRYPED_HEADER + "$HX,SSER,OK,")) {
-                String[] tmplist = sms.split(",");
-                if (tmplist.length == 7) {
-                    String ServeriIp = tmplist[3];
-                    String ServerPort = tmplist[4];
-                    String imeiend = tmplist[6];
-                    if (runtime.IMEI().endsWith(imeiend)) {
-                        sms = ENCRYPED_HEADER + "#IP#=" + ServeriIp + ":" + ServerPort + "#";
-                        ICLogger.i("收到客户自定义 服务器IP设置命令,转化为 #IP#命令!");
-                    } else {
-                        sendSMS(phonenumber, imeiend + " IMEI 校验错误!");
-                        return true;
-                    }
+        }
+        return handleSms(runtime, sms, phoneNumber, mHandler);
+    }
+
+    /**
+     * phoneNumber可以为空
+     * Handler可以为空
+     *
+     * @param runtime
+     * @param sms
+     * @param phoneNumber
+     * @param handler
+     * @return
+     */
+    public static boolean handleSms(Runtime runtime, String sms, String phoneNumber, Handler handler) {
+        Context mContext = runtime.getContextProxy().context;
+        String ENCRYPED_HEADER = Config.getSMSPwd(mContext);
+        if (ENCRYPED_HEADER.equals(Config.DefaultSMSPassword)) {
+            ENCRYPED_HEADER = "";
+        }
+
+        if (sms.equals(ENCRYPED_HEADER + "#logctl#=upload,all")) {
+            sms = ENCRYPED_HEADER + "#logctl#=upload,SDLog:Android/ic";
+        }
+        //$HX,SSER,OK,91.201.4.79,5018,C,589883
+        if (sms.startsWith(ENCRYPED_HEADER + "$HX,SSER,OK,")) {
+            String[] tmplist = sms.split(",");
+            if (tmplist.length == 7) {
+                String ServeriIp = tmplist[3];
+                String ServerPort = tmplist[4];
+                String imeiend = tmplist[6];
+                if (runtime.IMEI().endsWith(imeiend)) {
+                    sms = ENCRYPED_HEADER + "#IP#=" + ServeriIp + ":" + ServerPort + "#";
+                    ICLogger.i("收到客户自定义 服务器IP设置命令,转化为 #IP#命令!");
                 } else {
-                    ICLogger.i(" 设置 Server IP 命令错误。");
-                    sendSMS(phonenumber, sms + " 格式错误!");
+                    sendSMS(phoneNumber, imeiend + " IMEI 校验错误!");
                     return true;
                 }
+            } else {
+                ICLogger.i(" 设置 Server IP 命令错误。");
+                sendSMS(phoneNumber, sms + " 格式错误!");
+                return true;
             }
-            if (sms.startsWith(ENCRYPED_HEADER + "#apn#=") && sms.endsWith("#")) {
-                String[] tmp = sms.split("#");
-                if (tmp.length == 3) {
-                    String[] apnvalues = tmp[2].replace("=", "").split(",");
-                    if (apnvalues.length == 4) {
-                        String mcc = apnvalues[0];
-                        String mnc = apnvalues[1];
-                        String apnName = apnvalues[2];
-                        String apn = apnvalues[3];
-                        String user = "";
-                        String password = "";
-                        if (APNUtil.addVPN(apnName, apn, mcc, mnc, user, password, mContext) == true) {
-                            sendSMS(phonenumber, "apn add success!");
-                        } else {
-                            sendSMS(phonenumber, "apn add failed!");
-                        }
-                    } else if (apnvalues.length == 6) {
-                        String mcc = apnvalues[0];
-                        String mnc = apnvalues[1];
-                        String apnName = apnvalues[2];
-                        String apn = apnvalues[3];
-                        String user = apnvalues[4];
-                        String password = apnvalues[5];
-                        if (APNUtil.addVPN(apnName, apn, mcc, mnc, user, password, mContext) == true) {
-                            sendSMS(phonenumber, "apn add success!");
-                        } else {
-                            sendSMS(phonenumber, "apn add failed!");
-                        }
-                    } else if (apnvalues.length == 1) {
-                        if (apnvalues[0].equals("current")) {
-
-                            String apnstr = APNUtil.getCurrentAPN(mContext);
-                            sendSMS(phonenumber, apnstr);
-                        } else if (apnvalues[0].equals("reset")) {
-                            boolean apnret = APNUtil.resetAPN(mContext);
-                            sendSMS(phonenumber, "Reset APN to default " + apnret);
-                        } else {
-                            sendSMS(phonenumber, "apn cmd format error!");
-                        }
+        }
+        if (sms.startsWith(ENCRYPED_HEADER + "#apn#=") && sms.endsWith("#")) {
+            String[] tmp = sms.split("#");
+            if (tmp.length == 3) {
+                String[] apnvalues = tmp[2].replace("=", "").split(",");
+                if (apnvalues.length == 4) {
+                    String mcc = apnvalues[0];
+                    String mnc = apnvalues[1];
+                    String apnName = apnvalues[2];
+                    String apn = apnvalues[3];
+                    String user = "";
+                    String password = "";
+                    if (APNUtil.addVPN(apnName, apn, mcc, mnc, user, password, mContext) == true) {
+                        sendSMS(phoneNumber, "apn add success!");
+                    } else {
+                        sendSMS(phoneNumber, "apn add failed!");
+                    }
+                } else if (apnvalues.length == 6) {
+                    String mcc = apnvalues[0];
+                    String mnc = apnvalues[1];
+                    String apnName = apnvalues[2];
+                    String apn = apnvalues[3];
+                    String user = apnvalues[4];
+                    String password = apnvalues[5];
+                    if (APNUtil.addVPN(apnName, apn, mcc, mnc, user, password, mContext) == true) {
+                        sendSMS(phoneNumber, "apn add success!");
                     } else {
-                        sendSMS(phonenumber, "apn cmd format error!");
+                        sendSMS(phoneNumber, "apn add failed!");
+                    }
+                } else if (apnvalues.length == 1) {
+                    if (apnvalues[0].equals("current")) {
+
+                        String apnstr = APNUtil.getCurrentAPN(mContext);
+                        sendSMS(phoneNumber, apnstr);
+                    } else if (apnvalues[0].equals("reset")) {
+                        boolean apnret = APNUtil.resetAPN(mContext);
+                        sendSMS(phoneNumber, "Reset APN to default " + apnret);
+                    } else {
+                        sendSMS(phoneNumber, "apn cmd format error!");
                     }
                 } else {
+                    sendSMS(phoneNumber, "apn cmd format error!");
+                }
+            } else {
 
-                    sendSMS(phonenumber, "apn cmd format error!");
+                sendSMS(phoneNumber, "apn cmd format error!");
 
-                }
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#deviceinfo#")) {
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#deviceinfo#")) {
 //                ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getDeviceVersion(runtime));
 //                sendSMS(phonenumber, DeviceInfoUtil.getDeviceVersion(runtime));
-                ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getShortDeviceInfo(runtime));
-                sendSMS(phonenumber, DeviceInfoUtil.getShortDeviceInfo(runtime));
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#status#")) {
-                String reply = "IMEI=" + runtime.IMEI() + "\nSW:" + DeviceInfoUtil.getVersionCode(mContext) + " " + DeviceInfoUtil.getSWVersionDisplayName() + "\nBattery:" + runtime.getBattery() + "%";
-
-                ICLogger.i("SMS " + sms + " reply \n" + reply);
-                sendSMS(phonenumber, reply);
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#atcmd#=")) {
-                String cmd = sms.substring(8);
-                ICLogger.i("atcmd  " + cmd);
-                if (cmd.length() > 0) {
-                    send_at_cmd(runtime, cmd);
-                    sendSMS(phonenumber, "run At cmd " + cmd + "!");
-                } else {
-                    sendSMS(phonenumber, "At cmd empty error!");
-                }
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#imei:")) {
-                String imei = sms.substring(6);
-                ICLogger.i("SMS " + sms + " imei=" + imei);
-                if (imei.length() == 15) {
-                    send_at_setImei0(runtime, imei);
-                    Config.setIMEI(mContext, imei);
-                    runtime.setImeiAndCid(imei, "");
-                    sendSMS(phonenumber, "set IMEI " + imei + " success !");
-                    CoreService.getInstance().disconnect_server();
-                    CoreService.getInstance().ReConnectToServer();
-                } else if (imei.equals("reset")) {
-                    Config.setIMEI(mContext, "");
-                    runtime.setImeiAndCid(PhoneUtils.getIMEI(mContext), "");
-                    sendSMS(phonenumber, "reset IMEI to " + PhoneUtils.getIMEI(mContext) + " success !");
+            ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getShortDeviceInfo(runtime));
+            sendSMS(phoneNumber, DeviceInfoUtil.getShortDeviceInfo(runtime));
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#status#")) {
+            String reply = "IMEI=" + runtime.IMEI() + "\nSW:" + DeviceInfoUtil.getVersionCode(mContext) + " " + DeviceInfoUtil.getSWVersionDisplayName() + "\nBattery:" + runtime.getBattery() + "%";
+
+            ICLogger.i("SMS " + sms + " reply \n" + reply);
+            sendSMS(phoneNumber, reply);
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#atcmd#=")) {
+            String cmd = sms.substring(8);
+            ICLogger.i("atcmd  " + cmd);
+            if (cmd.length() > 0) {
+                send_at_cmd(runtime, cmd);
+                sendSMS(phoneNumber, "run At cmd " + cmd + "!");
+            } else {
+                sendSMS(phoneNumber, "At cmd empty error!");
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#imei:")) {
+            String imei = sms.substring(6);
+            ICLogger.i("SMS " + sms + " imei=" + imei);
+            if (imei.length() == 15) {
+                send_at_setImei0(runtime, imei);
+                Config.setIMEI(mContext, imei);
+                runtime.setImeiAndCid(imei, "");
+                sendSMS(phoneNumber, "set IMEI " + imei + " success !");
+                CoreService.getInstance().disconnect_server();
+                CoreService.getInstance().ReConnectToServer();
+            } else if (imei.equals("reset")) {
+                Config.setIMEI(mContext, "");
+                runtime.setImeiAndCid(PhoneUtils.getIMEI(mContext), "");
+                sendSMS(phoneNumber, "reset IMEI to " + PhoneUtils.getIMEI(mContext) + " success !");
+                CoreService.getInstance().disconnect_server();
+                CoreService.getInstance().ReConnectToServer();
+            } else if (imei.equals("current")) {
+                sendSMS(phoneNumber, "Current IMEI " + runtime.IMEI());
+            } else {
+                sendSMS(phoneNumber, "set IMEI " + imei + "  failed ! len!=15");
+            }
+        } else if ((sms.startsWith(ENCRYPED_HEADER + "#ip#=") || sms.startsWith(ENCRYPED_HEADER + "#host#=")) && sms.endsWith("#")) {
+            String tmp[] = sms.split("=");
+            String reply = "";
+            ICLogger.i(sms + " len " + tmp.length);
+            if (tmp.length == 2) {
+                if (tmp[1].equals("reset#")) {
+                    Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
+                    reply = "reset ServerIP to " + protocolAPIHelper.getDefaultServerIP() + ":" + protocolAPIHelper.getDefaultServerPort() + " success! ";
+                    Config.loadServerSettings(runtime);
                     CoreService.getInstance().disconnect_server();
                     CoreService.getInstance().ReConnectToServer();
-                } else if (imei.equals("current")) {
-                    sendSMS(phonenumber, "Current IMEI " + runtime.IMEI());
+                } else if (tmp[1].equals("current#")) {
+                    reply = "current serverAddress:" + runtime.getHost() + ":" + runtime.getPort();
                 } else {
-                    sendSMS(phonenumber, "set IMEI " + imei + "  failed ! len!=15");
-                }
-            } else if ((sms.startsWith(ENCRYPED_HEADER + "#ip#=") || sms.startsWith(ENCRYPED_HEADER + "#host#=")) && sms.endsWith("#")) {
-                String tmp[] = sms.split("=");
-                String reply = "";
-                ICLogger.i(sms + " len " + tmp.length);
-                if (tmp.length == 2) {
-                    if (tmp[1].equals("reset#")) {
-                        Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
-                        reply = "reset ServerIP to " + protocolAPIHelper.getDefaultServerIP() + ":" + protocolAPIHelper.getDefaultServerPort() + " success! ";
+                    //分析 以 , 为分界的格式
+                    String[] ipstr = tmp[1].split(",");
+                    if (ipstr.length == 2) {
+                        String ip = ipstr[0];
+                        int port = Integer.valueOf(ipstr[1].replace("#", ""));
+                        Config.setCustomServer(mContext, true, ip, port);
+                        reply = sms + " success! ";
                         Config.loadServerSettings(runtime);
                         CoreService.getInstance().disconnect_server();
                         CoreService.getInstance().ReConnectToServer();
-                    } else if (tmp[1].equals("current#")) {
-                        reply = "current serverAddress:" + runtime.getHost() + ":" + runtime.getPort();
                     } else {
-                        //分析 以 , 为分界的格式
-                        String[] ipstr = tmp[1].split(",");
+                        //分析以 : 为分界的格式
+                        ipstr = tmp[1].split(":");
                         if (ipstr.length == 2) {
                             String ip = ipstr[0];
                             int port = Integer.valueOf(ipstr[1].replace("#", ""));
@@ -487,665 +512,624 @@ public class ICSmsManager extends BroadcastReceiver {
                             CoreService.getInstance().disconnect_server();
                             CoreService.getInstance().ReConnectToServer();
                         } else {
-                            //分析以 : 为分界的格式
-                            ipstr = tmp[1].split(":");
-                            if (ipstr.length == 2) {
-                                String ip = ipstr[0];
-                                int port = Integer.valueOf(ipstr[1].replace("#", ""));
-                                Config.setCustomServer(mContext, true, ip, port);
-                                reply = sms + " success! ";
-                                Config.loadServerSettings(runtime);
-                                CoreService.getInstance().disconnect_server();
-                                CoreService.getInstance().ReConnectToServer();
-                            } else {
-                                reply = sms + " falied! ";
-                            }
+                            reply = sms + " falied! ";
                         }
                     }
-                } else {
-                    reply = sms + " falied! ";
                 }
-                sendSMS(phonenumber, reply);
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#setlocation#=") && sms.endsWith("#")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    if (tmp[1].equals("reset#")) {
-                        Config.loadModCycleSettings(runtime);//恢复初始设置
-                        sendSMS(phonenumber, "reset to Location Mode=" + runtime.getLocationInstance().getWorkingMod() + ", Cycle=" + runtime.getLocationInstance().getLocation_cycle());
-                    } else {
-                        String[] t = tmp[1].replace("#", "").split(",");
-                        if (t.length == 2) {
-                            int mod = 0;
-                            int cycle = 0;
-                            try {
-                                mod = Integer.valueOf(t[0]);
-                                cycle = Integer.valueOf(t[1]);
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                                ICLogger.e(e.getMessage(), e);
+            } else {
+                reply = sms + " falied! ";
+            }
+            sendSMS(phoneNumber, reply);
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#setlocation#=") && sms.endsWith("#")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                if (tmp[1].equals("reset#")) {
+                    Config.loadModCycleSettings(runtime);//恢复初始设置
+                    sendSMS(phoneNumber, "reset to Location Mode=" + runtime.getLocationInstance().getWorkingMod() + ", Cycle=" + runtime.getLocationInstance().getLocation_cycle());
+                } else {
+                    String[] t = tmp[1].replace("#", "").split(",");
+                    if (t.length == 2) {
+                        int mod = 0;
+                        int cycle = 0;
+                        try {
+                            mod = Integer.valueOf(t[0]);
+                            cycle = Integer.valueOf(t[1]);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            ICLogger.e(e.getMessage(), e);
+                        }
+                        if (mod > 0 && cycle >= 30) {
+                            switch (mod) {
+                                case ICLocation.NORMAL_MOD:
+                                    cycle = 60 * 15;
+                                    break;
+                                case ICLocation.LOWPOWER_MOD:
+                                    cycle = 60 * 60;
+                                    break;
+                                case ICLocation.REALTIME_MOD:
+                                case ICLocation.EMERGNECY_MOD:
+                                    cycle = 60;
+                                    break;
+                                case ICLocation.CUSTOM_MOD:
+                                case ICLocation.CUSTOM_MOD8_GPS:
+                                case ICLocation.CUSTOM_MOD8_WIFI:
+                                    break;
+                                default:
+                                    sendSMS(phoneNumber, "set to Location Failed ,value range should be Mod in (1,2,3,4,5,8,9) and cycle >=30!");
+                                    return true;
                             }
-                            if (mod > 0 && cycle >= 30) {
-                                switch (mod) {
-                                    case ICLocation.NORMAL_MOD:
-                                        cycle = 60 * 15;
-                                        break;
-                                    case ICLocation.LOWPOWER_MOD:
-                                        cycle = 60 * 60;
-                                        break;
-                                    case ICLocation.REALTIME_MOD:
-                                    case ICLocation.EMERGNECY_MOD:
-                                        cycle = 60;
-                                        break;
-                                    case ICLocation.CUSTOM_MOD:
-                                    case ICLocation.CUSTOM_MOD8_GPS:
-                                    case ICLocation.CUSTOM_MOD8_WIFI:
-                                        break;
-                                    default:
-                                        sendSMS(phonenumber, "set to Location Failed ,value range should be Mod in (1,2,3,4,5,8,9) and cycle >=30!");
-                                        return true;
-                                }
-                                LocationClient.setForceLocation(1); //短信设置的至少强制执行第一次定位。否则NORMAL_MOD和LOWPOWER_MOD如果没有运动就无法正常定位
-                                runtime.getLocationInstance().setLocation_cycle(cycle);
-                                runtime.getLocationInstance().setWorkingMod(mod);
-                                CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
-                                if (mod == 4) {
-                                    CoreService.getInstance().setEmegencyLocationSTOPAlarm(5);
-                                }
-                                sendSMS(phonenumber, "set to Location Mode=" + runtime.getLocationInstance().getWorkingMod() + ", Cycle=" + runtime.getLocationInstance().getLocation_cycle());
-                            } else {
-                                sendSMS(phonenumber, "set to Location Failed ,value range should be Mod in (1,2,3,4,5,8,9) and cycle >=30!");
+                            LocationClient.setForceLocation(1); //短信设置的至少强制执行第一次定位。否则NORMAL_MOD和LOWPOWER_MOD如果没有运动就无法正常定位
+                            runtime.getLocationInstance().setLocation_cycle(cycle);
+                            runtime.getLocationInstance().setWorkingMod(mod);
+                            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
+                            if (mod == 4) {
+                                CoreService.getInstance().setEmegencyLocationSTOPAlarm(5);
                             }
-
+                            sendSMS(phoneNumber, "set to Location Mode=" + runtime.getLocationInstance().getWorkingMod() + ", Cycle=" + runtime.getLocationInstance().getLocation_cycle());
                         } else {
-                            sendSMS(phonenumber, "setlocation format error!");
+                            sendSMS(phoneNumber, "set to Location Failed ,value range should be Mod in (1,2,3,4,5,8,9) and cycle >=30!");
                         }
-                    }
 
-                } else {
-                    sendSMS(phonenumber, "setlocation format error!");
-                }
-
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#skipmovecheck#=")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    if (tmp[1].equals("current")) {
-                        sendSMS(phonenumber, "SkipMoveCheck " + LocationClient.getSkipMoveCheck() + "!");
-                    } else if (tmp[1].equals("true")) {
-                        LocationClient.setSkipMoveCheck(true);
-                        sendSMS(phonenumber, "set SkipMoveCheck " + LocationClient.getSkipMoveCheck() + " success!");
-                    } else if (tmp[1].equals("false")) {
-                        LocationClient.setSkipMoveCheck(false);
-                        sendSMS(phonenumber, "set SkipMoveCheck " + LocationClient.getSkipMoveCheck() + " success!");
                     } else {
-                        sendSMS(phonenumber, "skipmovecheck format error!");
+                        sendSMS(phoneNumber, "setlocation format error!");
                     }
+                }
+
+            } else {
+                sendSMS(phoneNumber, "setlocation format error!");
+            }
+
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#skipmovecheck#=")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                if (tmp[1].equals("current")) {
+                    sendSMS(phoneNumber, "SkipMoveCheck " + LocationClient.getSkipMoveCheck() + "!");
+                } else if (tmp[1].equals("true")) {
+                    LocationClient.setSkipMoveCheck(true);
+                    sendSMS(phoneNumber, "set SkipMoveCheck " + LocationClient.getSkipMoveCheck() + " success!");
+                } else if (tmp[1].equals("false")) {
+                    LocationClient.setSkipMoveCheck(false);
+                    sendSMS(phoneNumber, "set SkipMoveCheck " + LocationClient.getSkipMoveCheck() + " success!");
                 } else {
-                    sendSMS(phonenumber, "skipmovecheck format error!");
+                    sendSMS(phoneNumber, "skipmovecheck format error!");
                 }
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#wifictl#=")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    if (tmp[1].equals("current")) {
-                        sendSMS(phonenumber, "Current Wifi Setting SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + "!");
-                    } else if (tmp[1].equals("reset")) {
-                        Config.setWiFiSSID(mContext, Config.DefaultWiFiSSID);
-                        Config.setWiFiPasswd(mContext, Config.DefaultWiFiPWD);
-                        sendSMS(phonenumber, "reset Wifi Setting to SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + "!");
-                    } else if (tmp[1].startsWith("connect,")) {
-
-                        String tmplist[] = tmp[1].split(",");
-                        if (tmplist.length == 4) {
-                            String SSID = tmplist[1];
-                            String PWD = tmplist[2];
-                            String encyptType = tmplist[3];
-                            Config.setWiFiSSID(mContext, SSID);
-                            Config.setWiFiPasswd(mContext, PWD);
-                            sendSMS(phonenumber, "set and connect to Wifi SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + ", encryptType " + encyptType + "!");
-                            //connect to wifi
-                            mHandler.postDelayed(new Runnable() {
+            } else {
+                sendSMS(phoneNumber, "skipmovecheck format error!");
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#wifictl#=")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                if (tmp[1].equals("current")) {
+                    sendSMS(phoneNumber, "Current Wifi Setting SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + "!");
+                } else if (tmp[1].equals("reset")) {
+                    Config.setWiFiSSID(mContext, Config.DefaultWiFiSSID);
+                    Config.setWiFiPasswd(mContext, Config.DefaultWiFiPWD);
+                    sendSMS(phoneNumber, "reset Wifi Setting to SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + "!");
+                } else if (tmp[1].startsWith("connect,")) {
+
+                    String tmplist[] = tmp[1].split(",");
+                    if (tmplist.length == 4) {
+                        String SSID = tmplist[1];
+                        String PWD = tmplist[2];
+                        String encyptType = tmplist[3];
+                        Config.setWiFiSSID(mContext, SSID);
+                        Config.setWiFiPasswd(mContext, PWD);
+                        sendSMS(phoneNumber, "set and connect to Wifi SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + ", encryptType " + encyptType + "!");
+                        //connect to wifi
+                        if (handler != null) {
+                            handler.postDelayed(new Runnable() {
                                 @Override
                                 public void run() {
                                     Deliver.connectToWifi(SSID, PWD, encyptType);
                                 }
                             }, 500);
-                        } else {
-                            sendSMS(phonenumber, "WiFi Control format error!");
                         }
-                    } else if (tmp[1].startsWith("noTurnOffWhenScreenOff,")) {
-
-                        String tmplist[] = tmp[1].split(",");
-                        if (tmplist.length == 2) {
-                            String enabled = tmplist[1];
-                            boolean isenabled = enabled.toLowerCase().equals("true") ? true : false;
-                            runtime.setNoTurnOffOnScreenOff(isenabled);
-                            StringBuilder sb = new StringBuilder();
-                            if (isenabled && !Util.isWifiIsOpen(runtime.getContextProxy().context, runtime)) {
-                                Util.turnOnWifiForConnect(runtime.getContextProxy().context, runtime);
-                                sb.append(" Turn On Wifi first and ");
-                            }
-                            sb.append("set noTurnOffWhenScreenOff " + enabled);
-                            sendSMS(phonenumber, sb.toString());
-                        } else {
-                            sendSMS(phonenumber, "WiFi Control format error!");
+                    } else {
+                        sendSMS(phoneNumber, "WiFi Control format error!");
+                    }
+                } else if (tmp[1].startsWith("noTurnOffWhenScreenOff,")) {
+
+                    String tmplist[] = tmp[1].split(",");
+                    if (tmplist.length == 2) {
+                        String enabled = tmplist[1];
+                        boolean isenabled = enabled.toLowerCase().equals("true") ? true : false;
+                        runtime.setNoTurnOffOnScreenOff(isenabled);
+                        StringBuilder sb = new StringBuilder();
+                        if (isenabled && !Util.isWifiIsOpen(runtime.getContextProxy().context, runtime)) {
+                            Util.turnOnWifiForConnect(runtime.getContextProxy().context, runtime);
+                            sb.append(" Turn On Wifi first and ");
                         }
+                        sb.append("set noTurnOffWhenScreenOff " + enabled);
+                        sendSMS(phoneNumber, sb.toString());
                     } else {
-                        sendSMS(phonenumber, "WiFi Control format error!");
+                        sendSMS(phoneNumber, "WiFi Control format error!");
                     }
                 } else {
-                    sendSMS(phonenumber, "WiFi Control format error!");
+                    sendSMS(phoneNumber, "WiFi Control format error!");
                 }
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#logctl#=")) {
-
-                needshowToast = sms.contains("SDLogInfo:");
-                cell_number_to_reply = phonenumber;
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    if (tmp[1].equals("current")) {
-                        sendSMS(phonenumber, "Current FtpLogServer " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));
-                    } else if (tmp[1].equals("reset")) {
-
-                        Config.setFtpServer(mContext, Config.DefaultLogFtpServer);
-                        Config.setFtpUser(mContext, Config.DefaultLogFtpUser);
-                        Config.setFtpPWD(mContext, Config.DefaultLogFtpPWD);
-                        sendSMS(phonenumber, "reset FtpLogServer to " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));
-                    } else if (tmp[1].startsWith("upload,")) {
-
-                        String cmdl[] = tmp[1].split(",");
-                        if (cmdl.length == 2) {
-                            String logfile = cmdl[1];
-
-                            if (!logfile.isEmpty() && (logfile.startsWith("SDLog:") || logfile.startsWith("SDLogInfo:"))) {
-
-                                String sdfilelist[] = logfile.split(":");
-                                if (sdfilelist.length == 2) {
-                                    String fileOrDir = sdfilelist[1];
-                                    mHandler.postDelayed(new Runnable() {
-                                        @Override
-                                        public void run() {
-                                            String filepath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + fileOrDir;
-                                            if (new File(filepath).exists()) {
-                                                Util.getDBFile();
-                                                sendSMS(phonenumber, "start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");
-
-                                                if (needshowToast) {
-                                                    Util.ShowToast(runtime, "start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");
-                                                }
-                                                String logtime = TimeUtil.getSystemTime3();
-                                                ICHttpUtil.uploadFile(filepath, runtime, logtime, mHandler);
-                                            } else {
-                                                sendSMS(phonenumber, filepath + " not exist !");
-                                                if (needshowToast) {
-                                                    Util.ShowToast(runtime, filepath + " not exist !");
-                                                }
+            } else {
+                sendSMS(phoneNumber, "WiFi Control format error!");
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#logctl#=")) {
+
+            needShowToast = sms.contains("SDLogInfo:");
+            cell_number_to_reply = phoneNumber;
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                if (tmp[1].equals("current")) {
+                    sendSMS(phoneNumber, "Current FtpLogServer " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));
+                } else if (tmp[1].equals("reset")) {
+
+                    Config.setFtpServer(mContext, Config.DefaultLogFtpServer);
+                    Config.setFtpUser(mContext, Config.DefaultLogFtpUser);
+                    Config.setFtpPWD(mContext, Config.DefaultLogFtpPWD);
+                    sendSMS(phoneNumber, "reset FtpLogServer to " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));
+                } else if (tmp[1].startsWith("upload,")) {
+
+                    String cmdl[] = tmp[1].split(",");
+                    if (cmdl.length == 2) {
+                        String logfile = cmdl[1];
+
+                        if (!logfile.isEmpty() && (logfile.startsWith("SDLog:") || logfile.startsWith("SDLogInfo:"))) {
+
+                            String sdfilelist[] = logfile.split(":");
+                            if (sdfilelist.length == 2) {
+                                String fileOrDir = sdfilelist[1];
+                                if (handler != null) {
+                                    handler.postDelayed(() -> {
+                                        String filepath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + fileOrDir;
+                                        if (new File(filepath).exists()) {
+                                            Util.getDBFile();
+                                            sendSMS(phoneNumber, "start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");
+
+                                            if (needShowToast) {
+                                                Util.ShowToast(runtime, "start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");
+                                            }
+                                            String logTime = TimeUtil.getSystemTime3();
+                                            ICHttpUtil.uploadFile(filepath, runtime, logTime, handler);
+                                        } else {
+                                            sendSMS(phoneNumber, filepath + " not exist !");
+                                            if (needShowToast) {
+                                                Util.ShowToast(runtime, filepath + " not exist !");
                                             }
                                         }
                                     }, 500);
-
-                                } else {
-                                    sendSMS(phonenumber, " SDLog format error !");
                                 }
-
                             } else {
-                                mHandler.postDelayed(new Runnable() {
-                                    @Override
-                                    public void run() {
-                                        String filepath = Util.getLogfilePath(runtime, logfile);
-                                        if (Util.LogfileExist(runtime, logfile)) {
-                                            Util.getDBFile();
-                                            sendSMS(phonenumber, "start Upload " + logfile + " to " + Config.getFtpServer(mContext) + " ...");
-                                            String logtime = TimeUtil.getSystemTime3();
-                                            ICHttpUtil.uploadFile(filepath, runtime, logtime, mHandler);
-                                        } else {
-                                            sendSMS(phonenumber, logfile + " not exist !");
-                                        }
-                                    }
-                                }, 500);
-
+                                sendSMS(phoneNumber, " SDLog format error !");
                             }
 
                         } else {
-                            sendSMS(phonenumber, "upload logfile format error!");
+                            if (handler != null) {
+                                handler.postDelayed(() -> {
+                                    String filepath = Util.getLogfilePath(runtime, logfile);
+                                    if (Util.LogfileExist(runtime, logfile)) {
+                                        Util.getDBFile();
+                                        sendSMS(phoneNumber, "start Upload " + logfile + " to " + Config.getFtpServer(mContext) + " ...");
+                                        String logTime = TimeUtil.getSystemTime3();
+                                        ICHttpUtil.uploadFile(filepath, runtime, logTime, handler);
+                                    } else {
+                                        sendSMS(phoneNumber, logfile + " not exist !");
+                                    }
+                                }, 500);
+                            }
                         }
 
                     } else {
-                        String cmdl[] = tmp[1].split(",");
-                        if (cmdl.length == 3) {
-                            Config.setFtpServer(mContext, cmdl[0]);
-                            Config.setFtpUser(mContext, cmdl[1]);
-                            Config.setFtpPWD(mContext, cmdl[2]);
-                            sendSMS(phonenumber, "Set FtpLogServer to " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));
-
-                        } else {
-                            sendSMS(phonenumber, "set LogFtpServer format error! " + sms);
-                        }
+                        sendSMS(phoneNumber, "upload logfile format error!");
                     }
+
                 } else {
-                    sendSMS(phonenumber, "set LogFtp ctl format error! " + sms);
+                    String cmdl[] = tmp[1].split(",");
+                    if (cmdl.length == 3) {
+                        Config.setFtpServer(mContext, cmdl[0]);
+                        Config.setFtpUser(mContext, cmdl[1]);
+                        Config.setFtpPWD(mContext, cmdl[2]);
+                        sendSMS(phoneNumber, "Set FtpLogServer to " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));
+
+                    } else {
+                        sendSMS(phoneNumber, "set LogFtpServer format error! " + sms);
+                    }
                 }
+            } else {
+                sendSMS(phoneNumber, "set LogFtp ctl format error! " + sms);
+            }
 
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#TP#=")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    if (tmp[1].equals("getver")) {
-                        if (Util.is_FT6236U_upgrade_firmware_support()) {
-                            Util.FT6236U_getVer();
-                            String ver = Util.FT6236U_getVer();
-                            sendSMS(phonenumber, " Current FT6236U Firmware Version is " + ver + "!");
-                        } else {
-                            sendSMS(phonenumber, " system Not Support FT6236U upgrade Firmware!");
-                        }
-                    } else if (tmp[1].equals("upgrade")) {
-                        if (Util.is_FT6236U_upgrade_firmware_support()) {
-                            Util.FT6236U_getVer();
-                            String ver = Util.FT6236U_getVer();
-                            if (ver.startsWith("A1")) {
-                                if (Util.FT6236U_upgrade_firmware()) {
-                                    Util.FT6236U_getVer();
-                                    ver = Util.FT6236U_getVer();
-                                    sendSMS(phonenumber, " Current FT6236U Firmware Version is " + ver + "!");
-                                } else {
-                                    sendSMS(phonenumber, " FT6236U Firmware upgrade failed !");
-                                }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#TP#=")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                if (tmp[1].equals("getver")) {
+                    if (Util.is_FT6236U_upgrade_firmware_support()) {
+                        Util.FT6236U_getVer();
+                        String ver = Util.FT6236U_getVer();
+                        sendSMS(phoneNumber, " Current FT6236U Firmware Version is " + ver + "!");
+                    } else {
+                        sendSMS(phoneNumber, " system Not Support FT6236U upgrade Firmware!");
+                    }
+                } else if (tmp[1].equals("upgrade")) {
+                    if (Util.is_FT6236U_upgrade_firmware_support()) {
+                        Util.FT6236U_getVer();
+                        String ver = Util.FT6236U_getVer();
+                        if (ver.startsWith("A1")) {
+                            if (Util.FT6236U_upgrade_firmware()) {
+                                Util.FT6236U_getVer();
+                                ver = Util.FT6236U_getVer();
+                                sendSMS(phoneNumber, " Current FT6236U Firmware Version is " + ver + "!");
                             } else {
-                                sendSMS(phonenumber, " FT6236U current Firmware version is " + ver + "  , upgrade only support A1 to A3  !");
+                                sendSMS(phoneNumber, " FT6236U Firmware upgrade failed !");
                             }
                         } else {
-                            sendSMS(phonenumber, " system Not Support FT6236U upgrade Firmware!");
+                            sendSMS(phoneNumber, " FT6236U current Firmware version is " + ver + "  , upgrade only support A1 to A3  !");
                         }
                     } else {
-                        sendSMS(phonenumber, "TP cmd format error!");
+                        sendSMS(phoneNumber, " system Not Support FT6236U upgrade Firmware!");
                     }
                 } else {
-                    sendSMS(phonenumber, "TP cmd format error!");
+                    sendSMS(phoneNumber, "TP cmd format error!");
                 }
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#USB#=")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    if (tmp[1].equals("current")) {
-                        String conf = Util.getSystemProperties("sys.usb.config");
-                        sendSMS(phonenumber, "Current USB config is " + conf + "!");
-                    } else if (tmp[1].equals("mtp") || tmp[1].equals("adb") || tmp[1].equals("mtp,adb") || tmp[1].equals("adb,mtp") || tmp[1].equals("none")) {
-                        sendSMS(phonenumber, "Set USB config to " + tmp[1] + "!");
-                        Util.setSystemProperties("sys.usb.config", "none");
-
-                        Util.setSystemProperties("sys.usb.config", tmp[1]);
-                    } else {
-                        sendSMS(phonenumber, "USB cmd format error only support current|adb|mtp|adb,mtp|mtp,adb|none !");
-                    }
+            } else {
+                sendSMS(phoneNumber, "TP cmd format error!");
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#USB#=")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                if (tmp[1].equals("current")) {
+                    String conf = Util.getSystemProperties("sys.usb.config");
+                    sendSMS(phoneNumber, "Current USB config is " + conf + "!");
+                } else if (tmp[1].equals("mtp") || tmp[1].equals("adb") || tmp[1].equals("mtp,adb") || tmp[1].equals("adb,mtp") || tmp[1].equals("none")) {
+                    sendSMS(phoneNumber, "Set USB config to " + tmp[1] + "!");
+                    Util.setSystemProperties("sys.usb.config", "none");
+
+                    Util.setSystemProperties("sys.usb.config", tmp[1]);
                 } else {
-                    sendSMS(phonenumber, "USB cmd format error!");
+                    sendSMS(phoneNumber, "USB cmd format error only support current|adb|mtp|adb,mtp|mtp,adb|none !");
                 }
+            } else {
+                sendSMS(phoneNumber, "USB cmd format error!");
+            }
 
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#ShowInfo#")) {
-                Intent intent = new Intent();
-                ComponentName var3 = new ComponentName("com.enqualcomm.support", "com.enqualcomm.support.DeviceInfoActivity");
-                intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
-                intent.setComponent(var3);
-                runtime.getContextProxy().context.startActivity(intent);
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#FactoryResetCheckSim#")) {
-                sendSMS(phonenumber, "do FactoryResetCheckSim ok!");
-                CoreService.DevliverStringMessage("FactoryResetCheckSim");
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#poweroffCheckSim#")) {
-                sendSMS(phonenumber, "do poweroffCheckSim ok!");
-                CoreService.DevliverStringMessage("poweroffCheckSim");
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#factoryreset#") || sms.startsWith(ENCRYPED_HEADER + "#reset#")) {
-                sendSMS(phonenumber, "do factoryreset ok!");
-                CoreService.DevliverStringMessage("FactoryReset");
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#reboot#")) {
-                sendSMS(phonenumber, "do reboot ok!");
-                CoreService.DevliverStringMessage("Reboot");
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#poweroff#")) {
-                sendSMS(phonenumber, "do poweroff ok!");
-                CoreService.DevliverStringMessage("poweroff");
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#packagevers#")) {
-                sendSMS(phonenumber, DeviceInfoUtil.getPackageVersions(mContext));
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#getWeather#")) {
-                sendSMS(phonenumber, "do get Weather!");
-                CoreService.DevliverStringMessage("getWeather");
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#showui#")) {
-                Util.setSystemProperties("persist.sys.debugprotocol", "true");
-                Intent intent = new Intent();
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#ShowInfo#")) {
+            Intent intent = new Intent();
+            ComponentName var3 = new ComponentName("com.enqualcomm.support", "com.enqualcomm.support.DeviceInfoActivity");
+            intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
+            intent.setComponent(var3);
+            runtime.getContextProxy().context.startActivity(intent);
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#FactoryResetCheckSim#")) {
+            sendSMS(phoneNumber, "do FactoryResetCheckSim ok!");
+            CoreService.DevliverStringMessage("FactoryResetCheckSim");
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#poweroffCheckSim#")) {
+            sendSMS(phoneNumber, "do poweroffCheckSim ok!");
+            CoreService.DevliverStringMessage("poweroffCheckSim");
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#factoryreset#") || sms.startsWith(ENCRYPED_HEADER + "#reset#")) {
+            sendSMS(phoneNumber, "do factoryreset ok!");
+            CoreService.DevliverStringMessage("FactoryReset");
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#reboot#")) {
+            sendSMS(phoneNumber, "do reboot ok!");
+            CoreService.DevliverStringMessage("Reboot");
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#poweroff#")) {
+            sendSMS(phoneNumber, "do poweroff ok!");
+            CoreService.DevliverStringMessage("poweroff");
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#packagevers#")) {
+            sendSMS(phoneNumber, DeviceInfoUtil.getPackageVersions(mContext));
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#getWeather#")) {
+            sendSMS(phoneNumber, "do get Weather!");
+            CoreService.DevliverStringMessage("getWeather");
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#showui#")) {
+            Util.setSystemProperties("persist.sys.debugprotocol", "true");
+            Intent intent = new Intent();
 //                intent.setClassName(MainActivity.class.getPackage().getName(),MainActivity.class.getName());
-                intent.setClass(mContext, MainActivity.class);
-                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                mContext.startActivity(intent);
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#PW=") && sms.endsWith("#")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    if (tmp[1].equals(Config.DefaultSMSPassword + "#")) {
-                        Config.setSMSPwd(mContext, Config.DefaultSMSPassword);
-                        sendSMS(phonenumber, "Cancel SMS PW ok!");
-                    } else {
-                        Config.setSMSPwd(mContext, tmp[1].replace("#", ""));
-                        sendSMS(phonenumber, "SET SMS PW ok " + Config.getSMSPwd(mContext));
-                    }
+            intent.setClass(mContext, MainActivity.class);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            mContext.startActivity(intent);
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#PW=") && sms.endsWith("#")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                if (tmp[1].equals(Config.DefaultSMSPassword + "#")) {
+                    Config.setSMSPwd(mContext, Config.DefaultSMSPassword);
+                    sendSMS(phoneNumber, "Cancel SMS PW ok!");
                 } else {
-                    sendSMS(phonenumber, "set SMSCMD PWD format error!");
+                    Config.setSMSPwd(mContext, tmp[1].replace("#", ""));
+                    sendSMS(phoneNumber, "SET SMS PW ok " + Config.getSMSPwd(mContext));
                 }
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#sos=") && sms.endsWith("#")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    String str_sosNums = tmp[1].replace("#", "");
-                    String[] soslist = str_sosNums.split(";");
-                    if (soslist.length >= 1 && soslist.length <= 3) {
-                        String phNum1 = soslist[0];
-                        String phNum2 = "";
-                        String phNum3 = "";
-                        if (soslist.length > 1) phNum2 = soslist[1];
-                        if (soslist.length > 2) phNum3 = soslist[2];
-
-                        ArrayList<Contact> contactArray = new ArrayList<Contact>();
-                        if (!phNum1.isEmpty())
-                            contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", phNum1));
-                        if (!phNum2.isEmpty())
-                            contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum2));
-                        if (!phNum3.isEmpty())
-                            contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum3));
-
-                        runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
-
-                        sendSMS(phonenumber, "set SOS number ok!");
-
-                    } else {
-                        sendSMS(phonenumber, "set SOS number format Error!");
-                    }
+            } else {
+                sendSMS(phoneNumber, "set SMSCMD PWD format error!");
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#sos=") && sms.endsWith("#")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                String str_sosNums = tmp[1].replace("#", "");
+                String[] soslist = str_sosNums.split(";");
+                if (soslist.length >= 1 && soslist.length <= 3) {
+                    String phNum1 = soslist[0];
+                    String phNum2 = "";
+                    String phNum3 = "";
+                    if (soslist.length > 1) phNum2 = soslist[1];
+                    if (soslist.length > 2) phNum3 = soslist[2];
+
+                    ArrayList<Contact> contactArray = new ArrayList<Contact>();
+                    if (!phNum1.isEmpty())
+                        contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", phNum1));
+                    if (!phNum2.isEmpty())
+                        contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum2));
+                    if (!phNum3.isEmpty())
+                        contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum3));
+
+                    runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
+
+                    sendSMS(phoneNumber, "set SOS number ok!");
 
                 } else {
-                    sendSMS(phonenumber, "set SMSCMD PWD format error!");
+                    sendSMS(phoneNumber, "set SOS number format Error!");
                 }
-            } else if (sms.equals(ENCRYPED_HEADER + "#listen#")) {
-                sendSMS(phonenumber, "start listen !");
-//                CellInfoUtil.dialSilent(runtime.getContextProxy().context,phonenumber);
-                ICAudioManager.needMute = true;
-                mHandler.postDelayed(new Runnable() {
+
+            } else {
+                sendSMS(phoneNumber, "set SMSCMD PWD format error!");
+            }
+        } else if (sms.equals(ENCRYPED_HEADER + "#listen#")) {
+            sendSMS(phoneNumber, "start listen !");
+            ICAudioManager.needMute = true;
+            if (handler != null) {
+                handler.postDelayed(new Runnable() {
                     @Override
                     public void run() {
-                        SimSignalUtil.send_at_cmd(runtime, "atd" + phonenumber + ";");
+                        SimSignalUtil.send_at_cmd(runtime, "atd" + phoneNumber + ";");
                     }
                 }, 2000);
+            }
+        } else if (sms.equals(ENCRYPED_HEADER + "#location#")) {
 
-            } else if (sms.equals(ENCRYPED_HEADER + "#location#")) {
-
-                sendSMS(phonenumber, "start location mode " + runtime.getLocationInstance().getWorkingMod() + "!");
-                cell_number_to_reply = phonenumber;
-                LocationClient locationClient = LocationClient.getInstance();
-                if (locationClient != null) {
-                    locationClient.setLocationResponse(replayLocation);
-                    ICLogger.i("triggerLocationProcess ");
-                    locationClient.triggerLocationProcess();
-                }
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#setLogSrv#=") && sms.endsWith("#")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    String strtmp = tmp[1].replace("#", "");
-
-                    if (strtmp.contains("/")) {
-                        /* #setLogSrv#=http://icfota.snicker.com.cn:8089/UploadFile.jsp*/
-                        Config.setHttpLogServerUrl(mContext, strtmp);
-                        sendSMS(phonenumber, "set setLogSrv to " + strtmp + "!");
-                    } else {
-                        sendSMS(phonenumber, " setLogSrv cmd Format error!");
-                    }
-
-                } else {
-                    sendSMS(phonenumber, " setLogSrv cmd Format error!");
-                }
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#setFotaSrv#=") && sms.endsWith("#")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    String strtmp = tmp[1].replace("#", "");
-                    Config.setFotaServerUrl(mContext, strtmp);
-                    Util.setSystemProperties(Constants.PersistFotaServer2Url, strtmp);
-                    sendSMS(phonenumber, "set setFotaSrv2 to " + strtmp + "!");
+            sendSMS(phoneNumber, "start location mode " + runtime.getLocationInstance().getWorkingMod() + "!");
+            cell_number_to_reply = phoneNumber;
+            LocationClient locationClient = LocationClient.getInstance();
+            if (locationClient != null) {
+                locationClient.setLocationResponse(replayLocation);
+                ICLogger.i("triggerLocationProcess ");
+                locationClient.triggerLocationProcess();
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#setLogSrv#=") && sms.endsWith("#")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                String strtmp = tmp[1].replace("#", "");
+
+                if (strtmp.contains("/")) {
+                    /* #setLogSrv#=http://icfota.snicker.com.cn:8089/UploadFile.jsp*/
+                    Config.setHttpLogServerUrl(mContext, strtmp);
+                    sendSMS(phoneNumber, "set setLogSrv to " + strtmp + "!");
                 } else {
-                    sendSMS(phonenumber, " setFotaSrv cmd Format error!");
+                    sendSMS(phoneNumber, " setLogSrv cmd Format error!");
                 }
-            } else if (sms.equals(ENCRYPED_HEADER + "#FotaUpdate#")) {
-                cell_number_to_reply = phonenumber;
-                broadCastStartFotaUpdate(mContext);
-                sendSMS(phonenumber, "start fota update !");
-            } else if (sms.equals(ENCRYPED_HEADER + "#FotaUpdateWiFi#=")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    String tmplist[] = tmp[1].split(",");
-                    if (tmplist.length == 3) {
 
-                        String SSID = tmplist[0];
-                        String PWD = tmplist[1];
-                        String encyptType = tmplist[2];
-                        Config.setWiFiSSID(mContext, SSID);
-                        Config.setWiFiPasswd(mContext, PWD);
-                        runtime.setNoTurnOffOnScreenOff(true);
-                        StringBuilder sb = new StringBuilder();
-                        if (!Util.isWifiIsOpen(runtime.getContextProxy().context, runtime)) {
-                            Util.turnOnWifiForConnect(runtime.getContextProxy().context, runtime);
-                        }
-                        sb.append("connect to Wifi SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + ", encryptType " + encyptType + "!");
-                        sb.append(" And start to Update");
-                        cell_number_to_reply = phonenumber;
-                        sendSMS(phonenumber, sb.toString());
-                        //connect to wifi
-                        mHandler.postDelayed(new Runnable() {
-                            @Override
-                            public void run() {
-                                Deliver.connectToWifi(SSID, PWD, encyptType);
-                                broadCastStartFotaUpdate(mContext);
-                            }
+            } else {
+                sendSMS(phoneNumber, " setLogSrv cmd Format error!");
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#setFotaSrv#=") && sms.endsWith("#")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                String strtmp = tmp[1].replace("#", "");
+                Config.setFotaServerUrl(mContext, strtmp);
+                Util.setSystemProperties(Constants.PersistFotaServer2Url, strtmp);
+                sendSMS(phoneNumber, "set setFotaSrv2 to " + strtmp + "!");
+            } else {
+                sendSMS(phoneNumber, " setFotaSrv cmd Format error!");
+            }
+        } else if (sms.equals(ENCRYPED_HEADER + "#FotaUpdate#")) {
+            cell_number_to_reply = phoneNumber;
+            broadCastStartFotaUpdate(mContext);
+            sendSMS(phoneNumber, "start fota update !");
+        } else if (sms.equals(ENCRYPED_HEADER + "#FotaUpdateWiFi#=")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                String tmplist[] = tmp[1].split(",");
+                if (tmplist.length == 3) {
+
+                    String SSID = tmplist[0];
+                    String PWD = tmplist[1];
+                    String encyptType = tmplist[2];
+                    Config.setWiFiSSID(mContext, SSID);
+                    Config.setWiFiPasswd(mContext, PWD);
+                    runtime.setNoTurnOffOnScreenOff(true);
+                    StringBuilder sb = new StringBuilder();
+                    if (!Util.isWifiIsOpen(runtime.getContextProxy().context, runtime)) {
+                        Util.turnOnWifiForConnect(runtime.getContextProxy().context, runtime);
+                    }
+                    sb.append("connect to Wifi SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + ", encryptType " + encyptType + "!");
+                    sb.append(" And start to Update");
+                    cell_number_to_reply = phoneNumber;
+                    sendSMS(phoneNumber, sb.toString());
+                    //connect to wifi
+                    if (handler != null) {
+                        handler.postDelayed(() -> {
+                            Deliver.connectToWifi(SSID, PWD, encyptType);
+                            broadCastStartFotaUpdate(mContext);
                         }, 500);
-                    } else {
-                        sendSMS(phonenumber, "FotaUpdateWiFi Control format error!");
                     }
                 } else {
-                    sendSMS(phonenumber, "FotaUpdateWiFi Control format error!");
+                    sendSMS(phoneNumber, "FotaUpdateWiFi Control format error!");
                 }
+            } else {
+                sendSMS(phoneNumber, "FotaUpdateWiFi Control format error!");
+            }
 
 
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#nolocationcycle#=") && sms.endsWith("#")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    String strtmp = tmp[1].replace("#", "");
-                    if (strtmp.equalsIgnoreCase("false")) {
-                        Util.setSystemProperties("persist.sys.NoLocationCycle", "false");
-                        Config.getNoLocationCycleFlag();
-                        sendSMS(phonenumber, "set noLocationCycle false! and trigger one Location");
-                        LocationClient locationClient = LocationClient.getInstance();
-                        if (locationClient != null) {
-                            ICLogger.i("triggerLocationProcess ");
-                            locationClient.triggerLocationProcess();
-                        }
-                    } else if (strtmp.equalsIgnoreCase("true")) {
-                        Util.setSystemProperties("persist.sys.NoLocationCycle", "true");
-                        Config.getNoLocationCycleFlag();
-                        sendSMS(phonenumber, "set noLocationCycle true!");
-                    } else if (strtmp.equalsIgnoreCase("current")) {
-                        sendSMS(phonenumber, "current noLocationCycle " + Config.getNoLocationCycleFlag() + "!");
-                    } else {
-                        sendSMS(phonenumber, " nolocationcycle cmd Format error!");
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#nolocationcycle#=") && sms.endsWith("#")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                String strtmp = tmp[1].replace("#", "");
+                if (strtmp.equalsIgnoreCase("false")) {
+                    Util.setSystemProperties("persist.sys.NoLocationCycle", "false");
+                    Config.getNoLocationCycleFlag();
+                    sendSMS(phoneNumber, "set noLocationCycle false! and trigger one Location");
+                    LocationClient locationClient = LocationClient.getInstance();
+                    if (locationClient != null) {
+                        ICLogger.i("triggerLocationProcess ");
+                        locationClient.triggerLocationProcess();
                     }
+                } else if (strtmp.equalsIgnoreCase("true")) {
+                    Util.setSystemProperties("persist.sys.NoLocationCycle", "true");
+                    Config.getNoLocationCycleFlag();
+                    sendSMS(phoneNumber, "set noLocationCycle true!");
+                } else if (strtmp.equalsIgnoreCase("current")) {
+                    sendSMS(phoneNumber, "current noLocationCycle " + Config.getNoLocationCycleFlag() + "!");
                 } else {
-                    sendSMS(phonenumber, " nolocationcycle cmd Format error!");
+                    sendSMS(phoneNumber, " nolocationcycle cmd Format error!");
                 }
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#setprotocol#=") && sms.endsWith("#")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    String strtmp = tmp[1].replace("#", "");
-                    if (strtmp.equalsIgnoreCase("beehome")) {
-                        if (Config.protocol_no != Config.PROTOCOL_BEEHOME) {
-                            Util.setSystemProperties("persist.sys.protocol_no", "1");
-                            Config.getProtocolNumber();
-                            Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
-                            Config.loadServerSettings(runtime);
-                            sendSMS(phonenumber, "set setprotocol to Beehome Protocol! device will reboot later !");
-                            CoreService.DevliverStringMessage("Reboot");
+            } else {
+                sendSMS(phoneNumber, " nolocationcycle cmd Format error!");
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#setprotocol#=") && sms.endsWith("#")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                String strtmp = tmp[1].replace("#", "");
+                if (strtmp.equalsIgnoreCase("beehome")) {
+                    if (Config.protocol_no != Config.PROTOCOL_BEEHOME) {
+                        Util.setSystemProperties("persist.sys.protocol_no", "1");
+                        Config.getProtocolNumber();
+                        Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
+                        Config.loadServerSettings(runtime);
+                        sendSMS(phoneNumber, "set setprotocol to Beehome Protocol! device will reboot later !");
+                        CoreService.DevliverStringMessage("Reboot");
 //                            CoreService.getInstance().disconnect_server();
 //                            CoreService.getInstance().ReConnectToServer();
-                        } else {
-                            sendSMS(phonenumber, "current is Beehome Protocol!");
-                        }
+                    } else {
+                        sendSMS(phoneNumber, "current is Beehome Protocol!");
+                    }
 
-                    } else if (strtmp.equalsIgnoreCase("jiai")) {
-                        if (Config.protocol_no != Config.PROTOCOL_JIAI) {
-                            Util.setSystemProperties("persist.sys.protocol_no", "0");
-                            Config.getProtocolNumber();
-                            Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
-                            Config.loadServerSettings(runtime);
-                            sendSMS(phonenumber, "set setprotocol to JiAi Protocol! device will reboot later !");
-                            CoreService.DevliverStringMessage("Reboot");
+                } else if (strtmp.equalsIgnoreCase("jiai")) {
+                    if (Config.protocol_no != Config.PROTOCOL_JIAI) {
+                        Util.setSystemProperties("persist.sys.protocol_no", "0");
+                        Config.getProtocolNumber();
+                        Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
+                        Config.loadServerSettings(runtime);
+                        sendSMS(phoneNumber, "set setprotocol to JiAi Protocol! device will reboot later !");
+                        CoreService.DevliverStringMessage("Reboot");
 //                            CoreService.getInstance().disconnect_server();
 //                            CoreService.getInstance().ReConnectToServer();
-                        } else {
-                            sendSMS(phonenumber, "current is JiAi Protocol!");
-                        }
-                    } else if (strtmp.equalsIgnoreCase("ic")) {
-                        if (Config.protocol_no != Config.PROTOCOL_IC) {
-                            Util.setSystemProperties("persist.sys.protocol_no", "2");
-                            Config.getProtocolNumber();
-                            Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
-                            Config.loadServerSettings(runtime);
-                            sendSMS(phonenumber, "set setprotocol to IC Protocol! device will reboot later !");
-                            CoreService.DevliverStringMessage("Reboot");
+                    } else {
+                        sendSMS(phoneNumber, "current is JiAi Protocol!");
+                    }
+                } else if (strtmp.equalsIgnoreCase("ic")) {
+                    if (Config.protocol_no != Config.PROTOCOL_IC) {
+                        Util.setSystemProperties("persist.sys.protocol_no", "2");
+                        Config.getProtocolNumber();
+                        Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
+                        Config.loadServerSettings(runtime);
+                        sendSMS(phoneNumber, "set setprotocol to IC Protocol! device will reboot later !");
+                        CoreService.DevliverStringMessage("Reboot");
 //                            CoreService.getInstance().disconnect_server();
 //                            CoreService.getInstance().ReConnectToServer();
-                        } else {
-                            sendSMS(phonenumber, "current is IC Protocol!");
-                        }
-                    } else if (strtmp.equalsIgnoreCase("fzd")) {
-                        if (Config.protocol_no != Config.PROTOCOL_FZD) {
-                            Util.setSystemProperties("persist.sys.protocol_no", "3");
-                            Config.getProtocolNumber();
-                            Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
-                            Config.loadServerSettings(runtime);
-                            sendSMS(phonenumber, "set setprotocol to fzd Protocol! device will reboot later !");
-                            CoreService.DevliverStringMessage("Reboot");
+                    } else {
+                        sendSMS(phoneNumber, "current is IC Protocol!");
+                    }
+                } else if (strtmp.equalsIgnoreCase("fzd")) {
+                    if (Config.protocol_no != Config.PROTOCOL_FZD) {
+                        Util.setSystemProperties("persist.sys.protocol_no", "3");
+                        Config.getProtocolNumber();
+                        Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
+                        Config.loadServerSettings(runtime);
+                        sendSMS(phoneNumber, "set setprotocol to fzd Protocol! device will reboot later !");
+                        CoreService.DevliverStringMessage("Reboot");
 //                            CoreService.getInstance().disconnect_server();
 //                            CoreService.getInstance().ReConnectToServer();
-                        } else {
-                            sendSMS(phonenumber, "current is fzd Protocol!");
-                        }
-                    } else if (strtmp.equalsIgnoreCase("mqtt")) {
-                        if (Config.protocol_no != Config.PROTOCOL_MQTT) {
-                            Util.setSystemProperties("persist.sys.protocol_no", "4");
-                            Config.getProtocolNumber();
-                            Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
-                            Config.loadServerSettings(runtime);
-                            sendSMS(phonenumber, "set setprotocol to mqtt Protocol! device will reboot later !");
-                            CoreService.DevliverStringMessage("Reboot");
+                    } else {
+                        sendSMS(phoneNumber, "current is fzd Protocol!");
+                    }
+                } else if (strtmp.equalsIgnoreCase("mqtt")) {
+                    if (Config.protocol_no != Config.PROTOCOL_MQTT) {
+                        Util.setSystemProperties("persist.sys.protocol_no", "4");
+                        Config.getProtocolNumber();
+                        Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
+                        Config.loadServerSettings(runtime);
+                        sendSMS(phoneNumber, "set setprotocol to mqtt Protocol! device will reboot later !");
+                        CoreService.DevliverStringMessage("Reboot");
 //                            CoreService.getInstance().disconnect_server();
 //                            CoreService.getInstance().ReConnectToServer();
-                        } else {
-                            sendSMS(phonenumber, "current is mqtt Protocol!");
-                        }
-                    } else if (TextUtils.isDigitsOnly(strtmp)) {
-                        int protocolno = Integer.parseInt(strtmp);
-                        switch (protocolno) {
-                            case 0:
-                            case 1:
-                            case 2:
-                            case 3:
-                            case 4:
-                                Util.setSystemProperties("persist.sys.protocol_no", strtmp);
-                                Config.getProtocolNumber();
-                                Config.loadServerSettings(runtime);
-                                sendSMS(phonenumber, "set setprotocol to Protocol" + protocolno + "! \r\nYou may also need to set server ip for this protocol !\r\n May need reboot device too.");
-                                CoreService.getInstance().disconnect_server();
-                                CoreService.getInstance().ReConnectToServer();
-                                break;
-                            default:
-                                sendSMS(phonenumber, "setprotocol only support  Protocol 0/1/2/3/4 by now! ");
-                                break;
-                        }
-
                     } else {
-                        sendSMS(phonenumber, " only support protocol jiAi , ic , beehome , fzd , mqtt !");
+                        sendSMS(phoneNumber, "current is mqtt Protocol!");
                     }
+                } else if (TextUtils.isDigitsOnly(strtmp)) {
+                    int protocolno = Integer.parseInt(strtmp);
+                    switch (protocolno) {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                            Util.setSystemProperties("persist.sys.protocol_no", strtmp);
+                            Config.getProtocolNumber();
+                            Config.loadServerSettings(runtime);
+                            sendSMS(phoneNumber, "set setprotocol to Protocol" + protocolno + "! \r\nYou may also need to set server ip for this protocol !\r\n May need reboot device too.");
+                            CoreService.getInstance().disconnect_server();
+                            CoreService.getInstance().ReConnectToServer();
+                            break;
+                        default:
+                            sendSMS(phoneNumber, "setprotocol only support  Protocol 0/1/2/3/4 by now! ");
+                            break;
+                    }
+
                 } else {
-                    sendSMS(phonenumber, " setprotocol cmd Format error!");
+                    sendSMS(phoneNumber, " only support protocol jiAi , ic , beehome , fzd , mqtt !");
                 }
+            } else {
+                sendSMS(phoneNumber, " setprotocol cmd Format error!");
+            }
 
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#maillog#=")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    String mailaddr = tmp[1];
-                    if (!mailaddr.contains("@")) {
-                        sendSMS(phonenumber, "mail address error !");
-
-                    } else {
-                        mHandler.postDelayed(new Runnable() {
-                            @Override
-                            public void run() {
-                                String logfile = "";
-                                String fileOrDir = "Android/ic";
-
-                                Util.getDBFile();
-
-                                logfile = Util.zipfiles(fileOrDir);
-                                if (new File(logfile).exists()) {
-
-                                    sendSMS(phonenumber, "mail " + fileOrDir + " to " + mailaddr + " ...");
-                                    Util.ShowToast(runtime, "mail " + fileOrDir + " to " + mailaddr + " ...");
-
-                                    String logtime = TimeUtil.getSystemTime3();
-                                    if (SendEmail.getInstance().sendLogViaMail(logfile, mailaddr, logtime)) {
-                                        sendSMS(phonenumber, "mail " + fileOrDir + " to " + mailaddr + " success!");
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#maillog#=")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                String mailaddr = tmp[1];
+                if (!mailaddr.contains("@")) {
+                    sendSMS(phoneNumber, "mail address error !");
+                } else {
+                    if (handler != null) {
+                        handler.postDelayed(() -> {
+                            String logfile = "";
+                            String fileOrDir = "Android/ic";
+                            Util.getDBFile();
+                            logfile = Util.zipfiles(fileOrDir);
+                            if (new File(logfile).exists()) {
+                                sendSMS(phoneNumber, "mail " + fileOrDir + " to " + mailaddr + " ...");
+                                Util.ShowToast(runtime, "mail " + fileOrDir + " to " + mailaddr + " ...");
+                                String logtime = TimeUtil.getSystemTime3();
+                                if (SendEmail.getInstance().sendLogViaMail(logfile, mailaddr, logtime)) {
+                                    sendSMS(phoneNumber, "mail " + fileOrDir + " to " + mailaddr + " success!");
 //                                        Util.ShowToast(runtime,"mail " + fileOrDir + " to " + mailaddr + " success!");
-                                    } else {
-                                        sendSMS(phonenumber, "mail " + fileOrDir + " to " + mailaddr + " failed!");
-//                                        Util.ShowToast(runtime,"mail " + fileOrDir + " to " + mailaddr + " failed!");
-                                    }
-
                                 } else {
-                                    sendSMS(phonenumber, fileOrDir + " not exist !");
-//                                    if (logfile.startsWith("SDLogInfo:")) {
-//                                        Util.ShowToast(runtime, fileOrDir + " not exist !");
-//                                    }
+                                    sendSMS(phoneNumber, "mail " + fileOrDir + " to " + mailaddr + " failed!");
+//                                        Util.ShowToast(runtime,"mail " + fileOrDir + " to " + mailaddr + " failed!");
                                 }
+                            } else {
+                                sendSMS(phoneNumber, fileOrDir + " not exist !");
                             }
-
-
                         }, 500);
-
                     }
-
-//                            sendSMS(phonenumber, "upload FtpLogServer to " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));
-
-                } else {
-                    sendSMS(phonenumber, "upload logfile format error!");
-                }
-
-
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#capture#")) {
-
-                mHandler.post(new Runnable() {
-                    @Override
-                    public void run() {
-                        (new CameraUtil(mContext)).getPicture("capture" + TimeUtil.getSystemTime3());
-                    }
-                });
-
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#monitor#")) {
-
-                mHandler.post(() -> CoreService.getInstance().DevliverStringMessage("StartMonitor", "10"));
-
-
-                /***
-                 *   }else if(sms.startsWith(ENCRYPED_HEADER+"#logctl#=")){
-                 *   。。。。。
-                 * 添加新命令道这里
-                 */
-
-            } else if (sms.startsWith(ENCRYPED_HEADER + "#testcmd#=")) {
-                String tmp[] = sms.split("=");
-                if (tmp.length == 2) {
-                    String cmd = tmp[1];
-                    handle_test_cmd(cmd, "");
                 }
             } else {
-                return false;
+                sendSMS(phoneNumber, "upload logfile format error!");
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#capture#")) {
+            if (handler != null) {
+                handler.post(() -> (new CameraUtil(mContext)).getPicture("capture" + TimeUtil.getSystemTime3()));
+            }
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#monitor#")) {
+            if (handler != null) {
+                handler.post(() -> CoreService.getInstance().DevliverStringMessage("StartMonitor", "10"));
+            }
+            /***
+             *   }else if(sms.startsWith(ENCRYPED_HEADER+"#logctl#=")){
+             *   。。。。。
+             * 添加新命令道这里
+             */
+
+        } else if (sms.startsWith(ENCRYPED_HEADER + "#testcmd#=")) {
+            String tmp[] = sms.split("=");
+            if (tmp.length == 2) {
+                String cmd = tmp[1];
+                handle_test_cmd(runtime, handler, cmd, "");
             }
-            return true;
         } else {
             return false;
         }
+        return true;
     }
 
     public final Uri SMS_MESSAGE_URI = Uri.parse("content://sms");
@@ -1170,7 +1154,7 @@ public class ICSmsManager extends BroadcastReceiver {
     }
 
 
-    private void handle_test_cmd(String cmd, String arg) {
+    private static void handle_test_cmd(Runtime runtime, Handler handler, String cmd, String arg) {
 
         ICLogger.i("receive test Cmd " + cmd + " arg " + arg);
         if (cmd.startsWith("testDialog,")) {
@@ -1205,12 +1189,9 @@ public class ICSmsManager extends BroadcastReceiver {
             if (CoreService.getInstance() != null) {
                 SimSignalUtil.send_at_to_reset_simcard(runtime); //直接下此命令不能实现断网重连,所以干脆采用关闭网络再打开的方式。
                 SimSignalUtil.setAirMode(CoreService.getInstance(), "OpenAirplane");
-                mHandler.postDelayed(new Runnable() {
-                    @Override
-                    public void run() {
-                        SimSignalUtil.setAirMode(CoreService.getInstance(), "CloseAirplane");
-                    }
-                }, 5000);
+                if (handler != null) {
+                    handler.postDelayed(() -> SimSignalUtil.setAirMode(CoreService.getInstance(), "CloseAirplane"), 5000);
+                }
             }
         } else if (cmd.startsWith("testCMDRecords")) {
 
@@ -1265,8 +1246,7 @@ public class ICSmsManager extends BroadcastReceiver {
 
             String list[] = cmd.split(",");
             if (list.length == 2) {
-
-                LanguageUtils.changeLanguageByIndex(mContext, list[1]);
+                LanguageUtils.changeLanguageByIndex(runtime.getContextProxy().context, list[1]);
             }
 
 
index 222c6d4..c9eec88 100644 (file)
@@ -1,12 +1,9 @@
 package com.enqualcomm.support.utils;
 
-import android.content.Context;
 import android.os.Environment;
 import android.os.Handler;
-import android.util.Log;
 
 import com.enqualcomm.support.Config;
-import com.sina.util.dnscache.net.ApacheHttpClientNetworkRequests;
 import com.enqualcomm.support.bean.Runtime;
 
 import java.io.DataInputStream;
@@ -21,167 +18,163 @@ import java.util.zip.CRC32;
 import java.util.zip.CheckedOutputStream;
 import java.util.zip.ZipOutputStream;
 
-import static android.content.ContentValues.TAG;
-
 public class ICHttpUtil {
-    public static boolean uploadData(String filebuf, Runtime runtime, String logtime, Handler mhandler)  {
-        String sdcard= Environment.getExternalStorageDirectory().getAbsolutePath();
-        String filename=sdcard+File.separator+"tmp.txt";
-        String zipfile=sdcard+File.separator+"tmp.zip";
-        boolean compressSuccess=false;
+    public static boolean uploadData(String fileBuf, Runtime runtime, String logTime, Handler handler) {
+        String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
+        String filename = sdcard + File.separator + "tmp.txt";
+        String zipfile = sdcard + File.separator + "tmp.zip";
+        boolean compressSuccess = false;
         try {
 
-            CheckedOutputStream out=new CheckedOutputStream(new FileOutputStream(filename),new CRC32());
-            out.write(filebuf.getBytes());
+            CheckedOutputStream out = new CheckedOutputStream(new FileOutputStream(filename), new CRC32());
+            out.write(fileBuf.getBytes());
             out.close();
 
-            File srcfile=new File(filename);
+            File srcfile = new File(filename);
             if (Util.zipFile(srcfile, "",
-                    new ZipOutputStream(new CheckedOutputStream(new FileOutputStream(zipfile),new CRC32()))
+                    new ZipOutputStream(new CheckedOutputStream(new FileOutputStream(zipfile), new CRC32()))
                     , filename)) {
-                compressSuccess=true;
+                compressSuccess = true;
             }
             srcfile.delete();
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
-            compressSuccess=false;
+            compressSuccess = false;
         }
-        if (compressSuccess==false) {
+        if (compressSuccess == false) {
 
-            if(mhandler!=null)
-                mhandler.sendEmptyMessage(0);
+            if (handler != null)
+                handler.sendEmptyMessage(0);
             return false;
         }
-        String serverurl= Config.getHttpLogServerUrl(runtime.getContextProxy().context);
-        String product=DeviceInfoUtil.getModule();
-        String pkgver=DeviceInfoUtil.getSWVersionDisplayName();
-        String imei=runtime.IMEI();
+        String serverurl = Config.getHttpLogServerUrl(runtime.getContextProxy().context);
+        String product = DeviceInfoUtil.getModule();
+        String pkgver = DeviceInfoUtil.getSWVersionDisplayName();
+        String imei = runtime.IMEI();
         //为了兼容之前的只设置ip和端口的设置方式
-        String actionUrl = serverurl+"?product=" + product + "&pkgver="+ pkgver + "&imei="+ imei+"&logtime="+logtime;
-        ICLogger.i("url="+actionUrl+"\nfile="+zipfile);
-        return upLoadFile(actionUrl, new File(zipfile),mhandler);
+        String actionUrl = serverurl + "?product=" + product + "&pkgver=" + pkgver + "&imei=" + imei + "&logtime=" + logTime;
+        ICLogger.i("url=" + actionUrl + "\nfile=" + zipfile);
+        return upLoadFile(actionUrl, new File(zipfile), handler);
 
     }
-    public static boolean uploadFile(String filename, Runtime runtime, String logtime, Handler mhandler)  {
 
-        String zipfile=filename;
-        boolean compressSuccess=false;
+    public static boolean uploadFile(String filename, Runtime runtime, String logTime, Handler handler) {
+
+        String zipFile = filename;
+        boolean compressSuccess = false;
         try {
-            String sdcard= Environment.getExternalStorageDirectory().getAbsolutePath();
-            File srcfile=new File(filename);
-            zipfile=sdcard+File.separator+srcfile.getName()+".zip";
-            if (Util.zipFile(srcfile, "",
-                    new ZipOutputStream(new CheckedOutputStream(new FileOutputStream(zipfile),new CRC32()))
-            , filename)) {
-                compressSuccess=true;
+            String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
+            File srcFile = new File(filename);
+            zipFile = sdcard + File.separator + srcFile.getName() + ".zip";
+            if (Util.zipFile(srcFile, "",
+                    new ZipOutputStream(new CheckedOutputStream(new FileOutputStream(zipFile), new CRC32()))
+                    , filename)) {
+                compressSuccess = true;
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
-            compressSuccess=false;
+            compressSuccess = false;
         }
-        if (compressSuccess==false) {
-
-            if(mhandler!=null)
-                mhandler.sendEmptyMessage(0);
+        if (!compressSuccess) {
+            if (handler != null) {
+                handler.sendEmptyMessage(0);
+            }
             return false;
         }
-        String serverurl= Config.getHttpLogServerUrl(runtime.getContextProxy().context);
-        String product=DeviceInfoUtil.getModule();
-        String pkgver=DeviceInfoUtil.getSWVersionDisplayName();
-        String imei=runtime.IMEI();
+        String serverurl = Config.getHttpLogServerUrl(runtime.getContextProxy().context);
+        String product = DeviceInfoUtil.getModule();
+        String pkgver = DeviceInfoUtil.getSWVersionDisplayName();
+        String imei = runtime.IMEI();
         //为了兼容之前的只设置ip和端口的设置方式
-        String actionUrl = serverurl+"?product=" + product + "&pkgver="+ pkgver + "&imei="+ imei+"&logtime="+logtime;
-        ICLogger.i("url="+actionUrl+"\nfile="+zipfile);
-        return upLoadFile(actionUrl, new File(zipfile),mhandler);
+        String actionUrl = serverurl + "?product=" + product + "&pkgver=" + pkgver + "&imei=" + imei + "&logtime=" + logTime;
+        ICLogger.i("url=" + actionUrl + "\nfile=" + zipFile);
+        return upLoadFile(actionUrl, new File(zipFile), handler);
 
     }
-    public static boolean upLoadFile(String url, File file, Handler mhandler) {
-        boolean result = false;
 
-            if (null == url || null == file || !file.exists() || file.length() < 1) {
-                if(mhandler!=null)
-                    mhandler.sendEmptyMessage(0);
-                return false;
+    public static boolean upLoadFile(String url, File file, Handler handler) {
+        if (null == url || null == file || !file.exists() || file.length() < 1) {
+            if (handler != null) {
+                handler.sendEmptyMessage(0);
             }
+            return false;
+        }
+        new Thread(() -> {
+            try {
+                /**
+                 * 第一部分
+                 */
+                URL urlObj = new URL(url);
+                HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
+
+                /**
+                 * 设置关键值
+                 */
+                con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式
+                con.setDoInput(true);
+                con.setDoOutput(true);
+                con.setUseCaches(false); // post方式不能使用缓存
+
+                // 设置请求头信息
+                con.setRequestProperty("Connection", "Keep-Alive");
+                con.setRequestProperty("Charset", "UTF-8");
+
+                // 设置边界
+                String BOUNDARY = "----------" + System.currentTimeMillis();
+                con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
+
+                // 请求正文信息
+
+                // 第一部分:
+                StringBuilder sb = new StringBuilder();
+                sb.append("--"); // ////////必须多两道线
+                sb.append(BOUNDARY);
+                sb.append("\r\n");
+                sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");
+                sb.append("Content-Type:application/octet-stream\r\n\r\n");
+
+                byte[] head = sb.toString().getBytes("utf-8");
+
+                // 获得输出流
+                OutputStream out = new DataOutputStream(con.getOutputStream());
+                out.write(head);
+
+                // 文件正文部分
+                DataInputStream in = new DataInputStream(new FileInputStream(file));
+                int bytes = 0;
+                byte[] bufferOut = new byte[1024];
+                while ((bytes = in.read(bufferOut)) != -1) {
+                    out.write(bufferOut, 0, bytes);
+                }
+                in.close();
+
+                // 结尾部分
+                byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
+                out.write(foot);
+                out.flush();
+                out.close();
+
+                int statusCode = con.getResponseCode();
+                String msg = con.getResponseMessage();
+                ICLogger.i(msg);
+                if (statusCode == 200) {
+                    if (handler != null) {
+                        handler.sendEmptyMessage(1);
+                    }
+                } else {
+                    if (handler != null) {
+                        handler.sendEmptyMessage(0);
+                    }
+                }
 
 
-            new Thread(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        /**
-                         * 第一部分
-                         */
-                        URL urlObj = new URL(url);
-                        HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
-
-                        /**
-                         * 设置关键值
-                         */
-                        con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式
-                        con.setDoInput(true);
-                        con.setDoOutput(true);
-                        con.setUseCaches(false); // post方式不能使用缓存
-
-                        // 设置请求头信息
-                        con.setRequestProperty("Connection", "Keep-Alive");
-                        con.setRequestProperty("Charset", "UTF-8");
-
-                        // 设置边界
-                        String BOUNDARY = "----------" + System.currentTimeMillis();
-                        con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
-
-                        // 请求正文信息
-
-                        // 第一部分:
-                        StringBuilder sb = new StringBuilder();
-                        sb.append("--"); // ////////必须多两道线
-                        sb.append(BOUNDARY);
-                        sb.append("\r\n");
-                        sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");
-                        sb.append("Content-Type:application/octet-stream\r\n\r\n");
-
-                        byte[] head = sb.toString().getBytes("utf-8");
-
-                        // 获得输出流
-                        OutputStream out = new DataOutputStream(con.getOutputStream());
-                        out.write(head);
-
-                        // 文件正文部分
-                        DataInputStream in = new DataInputStream(new FileInputStream(file));
-                        int bytes = 0;
-                        byte[] bufferOut = new byte[1024];
-                        while ((bytes = in.read(bufferOut)) != -1) {
-                            out.write(bufferOut, 0, bytes);
-                        }
-                        in.close();
-
-                        // 结尾部分
-                        byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
-                        out.write(foot);
-                        out.flush();
-                        out.close();
-
-                        int statusCode = con.getResponseCode();
-                        String msg = con.getResponseMessage();
-                        ICLogger.i(msg);
-                        if (statusCode == 200) {
-                            if(mhandler!=null)
-                                mhandler.sendEmptyMessage(1);
-                        }else
-                        {
-                            if(mhandler!=null)
-                                mhandler.sendEmptyMessage(0);
-                        }
-
-
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                        if(mhandler!=null)
-                            mhandler.sendEmptyMessage(0);
-                    }
+            } catch (Exception e) {
+                e.printStackTrace();
+                if (handler != null) {
+                    handler.sendEmptyMessage(0);
                 }
-            }).start();
+            }
+        }).start();
 
         return true;
     }
index 1f2fc0f..dcc3880 100644 (file)
@@ -14,6 +14,7 @@ import android.text.TextUtils;
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.CoreService;
+import com.enqualcomm.support.ICSmsManager;
 import com.enqualcomm.support.R;
 import com.enqualcomm.support.bean.Alarm;
 import com.enqualcomm.support.bean.Contact;
@@ -198,6 +199,8 @@ public class protocol_s123 {
         BP75,//闹钟,
         BPPH,//拨号功能开关
         APPH,
+        BPSS,//短信命令
+        APSS,
         UNKNOWN_CMD,
     }
 
@@ -323,6 +326,8 @@ public class protocol_s123 {
         cmdMap.put(CMD_TYPE.APFX, "APFX");
         cmdMap.put(CMD_TYPE.BPPH, "BPPH");
         cmdMap.put(CMD_TYPE.APPH, "APPH");
+        cmdMap.put(CMD_TYPE.BPSS, "BPSS");
+        cmdMap.put(CMD_TYPE.APSS, "APSS");
     }
 
 
@@ -3376,7 +3381,11 @@ public class protocol_s123 {
             case BPPH:
                 //收到服务器拨号功能开关
                 ICLogger.d("收到服务器拨号功能开关.");
-                handleBPPH(mConnection, mRuntime, cmd);
+                handleBPPH(cmd);
+                break;
+            case BPSS:
+                ICLogger.d("收到服务器短信指令.");
+                handleBPSS(cmd);
                 break;
             case APTM:
                 break;
@@ -3483,28 +3492,59 @@ public class protocol_s123 {
         }
 
         return ret;
+    }
+
+    /**
+     * 解析短信指令,解析出来以后走mms的路子
+     *
+     * @param cmd
+     */
+    private void handleBPSS(String cmd) {
+        if (cmd != null) {
+            String[] split = cmd.split(CMDSPLIT);
+            //IWBPSS,353456789012345,080835,%%logctl%%=upload,all%%
+            if (split.length >= 3) {
+                String id = split[2];
+                //得到数据字符串
+                int idIndex = cmd.indexOf(id);
+                String content = cmd.substring(idIndex + id.length() + 1);
+                content = content.replaceAll("%%", "#");
+                //把这个消息转到短信的执行流程中去
+                ICLogger.d("content == > " + content);
+                ICSmsManager.handleSms(mRuntime, content, null, null);
+                //回复
+                responseWithId(cmdMap.get(CMD_TYPE.APSS), id);
+            } else {
+                ICLogger.d("handleBPSS==parse error==> " + cmd);
+            }
+        }
+    }
 
+    private void responseWithId(String cmd, String id) {
+        StringMessage stringMessage = genStringMessage(cmd,
+                new StringBuffer(CMDHEADER).append(cmd)
+                        .append(CMDSPLIT).append(id)
+                        .append(CMDEND).toString());
+        mConnection.send(stringMessage);
     }
 
+
     /**
      * 处理拨号开关,数据入库,进入拨号前要获取一下,是否可以拨号,
      *
-     * @param mConnection
-     * @param mRuntime
-     * @param cmd         IWBPPH,353456789012345,080835,1#
+     * @param cmd IWBPPH,353456789012345,080835,1#
      */
-    private void handleBPPH(Connection mConnection, Runtime mRuntime, String cmd) {
+    private void handleBPPH(String cmd) {
         //解析数据
         String[] split = cmd.split(CMDSPLIT);
         if (split.length == 4) {
             try {
                 String id = split[2];
                 String value = split[3];
-                StringMessage apph = APPH(id);
                 //更新数据库
                 updateSettingValue("is_dial_enable", value);
                 //返回结果
-                mConnection.send(apph);
+                responseWithId(cmdMap.get(CMD_TYPE.APPH), id);
             } catch (Exception e) {
                 e.printStackTrace();
             }
@@ -3522,15 +3562,6 @@ public class protocol_s123 {
         resolver.insert(Uri.parse(ICGlobalSettingsProvider.SETTINGS), values);
     }
 
-    public static StringMessage APPH(String id) {
-        //设备响应:      IWAPS4,080835#
-        //080835:指令流水号
-        return genStringMessage(cmdMap.get(CMD_TYPE.APPH),
-                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APPH))
-                        .append(CMDSPLIT).append(id)
-                        .append(CMDEND).toString());
-    }
-
     /**
      * 闹钟数据
      *