replace main looper as sub looper.
authorkfl_614 <kfl_614@163.com>
Tue, 29 Dec 2020 02:34:27 +0000 (10:34 +0800)
committerkfl_614 <kfl_614@163.com>
Tue, 29 Dec 2020 02:34:27 +0000 (10:34 +0800)
20 files changed:
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/LocationClient.java
app/src/main/java/com/enqualcomm/support/NMEAListener.java
app/src/main/java/com/enqualcomm/support/adapter/BTHelper.java
app/src/main/java/com/enqualcomm/support/bean/EventLooperHandlerThread.java
app/src/main/java/com/enqualcomm/support/service/AntiMonitorService.java
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java
app/src/main/java/com/enqualcomm/support/service/KeepAlive.java
app/src/main/java/com/enqualcomm/support/service/SilentManager.java
app/src/main/java/com/enqualcomm/support/utils/BatteryUtil.java
app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java
app/src/main/java/com/enqualcomm/support/utils/DBHelper.java
app/src/main/java/com/enqualcomm/support/utils/MissedCallContentObserver.java
app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java
app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java
app/src/main/java/com/ic/protocols/protocol_ic.java
app/src/main/java/com/ic/protocols/protocol_mqtt_client.java
local.properties

index 1373c47..361084b 100644 (file)
@@ -4,43 +4,28 @@ import android.app.AlarmManager;
 import android.app.Notification;
 import android.app.PendingIntent;
 import android.app.Service;
-import android.content.IClipboard;
+import android.content.BroadcastReceiver;
+import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.media.AudioManager;
-import android.media.MediaRouter;
 import android.os.Handler;
+import android.os.HandlerThread;
 import android.os.IBinder;
-
 import android.os.Message;
 import android.os.Messenger;
 import android.os.PowerManager;
 import android.os.SystemClock;
 import android.widget.Toast;
 
-import com.enqualcomm.support.adapter.BTHelper;
+import com.enqualcomm.support.adapter.LBSHelper;
 import com.enqualcomm.support.bean.Contact;
-import com.enqualcomm.support.bean.EventLooperHandlerThread;
-import com.enqualcomm.support.bean.ICLocation;
+import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.SleepInfo;
 import com.enqualcomm.support.bean.SleepRecord;
-import com.enqualcomm.support.service.AntiMonitorService;
-import com.enqualcomm.support.utils.CellInfoUtil;
-import com.enqualcomm.support.utils.Connection;
-import com.enqualcomm.support.utils.DeviceInfoUtil;
-import com.enqualcomm.support.utils.ICHttpUtil;
-import com.enqualcomm.support.utils.LedUtil;
-import com.enqualcomm.support.utils.StorageUtils;
-import com.enqualcomm.support.utils.TemperatureUtil;
-import com.enqualcomm.support.utils.TimeUtil;
-import com.enqualcomm.support.utils.VibrateUtil;
-import com.enqualcomm.support.utils.WakeLockUtil;
-import com.enqualcomm.support.utils.mqttConnection;
-import com.ic.jni.ICJniUtils;
-import com.enqualcomm.support.adapter.LBSHelper;
-import com.ic.protocols.protocolAPIHelper;
-import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.heartRateStatus;
+import com.enqualcomm.support.service.AntiMonitorService;
 import com.enqualcomm.support.service.CheckSIM;
 import com.enqualcomm.support.service.Deliver;
 import com.enqualcomm.support.service.HeartRateManager;
@@ -53,39 +38,44 @@ import com.enqualcomm.support.service.base.AbstractInvokeHandlerService;
 import com.enqualcomm.support.utils.AlarmHelper;
 import com.enqualcomm.support.utils.AlarmWakeUp;
 import com.enqualcomm.support.utils.BatteryUtil;
+import com.enqualcomm.support.utils.CellInfoUtil;
+import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.ConnectionListener;
 import com.enqualcomm.support.utils.ContextProxy;
 import com.enqualcomm.support.utils.DBHelper;
+import com.enqualcomm.support.utils.DeviceInfoUtil;
 import com.enqualcomm.support.utils.FileOutputUtil;
 import com.enqualcomm.support.utils.ICLogger;
+import com.enqualcomm.support.utils.LedUtil;
 import com.enqualcomm.support.utils.NettyConnection;
 import com.enqualcomm.support.utils.SharPreferenceUtil;
 import com.enqualcomm.support.utils.SimSignalUtil;
+import com.enqualcomm.support.utils.TemperatureUtil;
+import com.enqualcomm.support.utils.TimeUtil;
 import com.enqualcomm.support.utils.Util;
+import com.enqualcomm.support.utils.VibrateUtil;
+import com.enqualcomm.support.utils.WakeLockUtil;
+import com.enqualcomm.support.utils.mqttConnection;
+import com.ic.jni.ICJniUtils;
+import com.ic.protocols.protocolAPIHelper;
 
 import java.lang.ref.WeakReference;
-import chestnut.ui.Toastc;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.IntentFilter;
-
 import java.util.ArrayList;
 import java.util.Random;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
+import chestnut.ui.Toastc;
+
 import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
 import static com.enqualcomm.support.Constants.ACTION_ALARM_ADD_DATAPOINTS;
 import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.ACTION_ALARM_BLE_SCAN;
-import static com.enqualcomm.support.Constants.ACTION_ALARM_CHECK_ANTI;
 import static com.enqualcomm.support.Constants.ACTION_CHECK_ANTIOFF_EVENT;
 import static com.enqualcomm.support.Constants.ACTION_EQC_ALARM;
 import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;
 import static com.enqualcomm.support.Constants.ACTION_LOCAL_SOS_ACTION;
 import static com.enqualcomm.support.Constants.ACTION_LOCATION_ALARM;
-import static com.enqualcomm.support.Constants.ACTION_PRACTICE_REPORT_ALARM;
 import static com.enqualcomm.support.Constants.ACTION_QUERY_WEATHER;
 import static com.enqualcomm.support.Constants.ACTION_SEND_EMEGENCY_LOCATION_START;
 import static com.enqualcomm.support.Constants.ACTION_SEND_EMEGENCY_LOCATION_STOP;
@@ -93,12 +83,15 @@ import static com.enqualcomm.support.Constants.ANTI_ALARM;
 import static com.enqualcomm.support.Constants.HEART_ALARM;
 import static com.enqualcomm.support.Constants.KEY_SAVE_STEP_COUNT;
 import static com.enqualcomm.support.Constants.KEY_STEP_COUNT;
-import static com.enqualcomm.support.Constants.KEY_TEMP_BODY;
-import static com.enqualcomm.support.Constants.KEY_TEMP_WRIST;
 import static com.enqualcomm.support.Constants.STEP_COUNT_ALARM_ACTION;
 import static com.enqualcomm.support.Constants.TEMP_ALARM;
-import static com.enqualcomm.support.bean.ICLocation.*;
-import static com.ic.protocols.protocolAPIHelper.getTemperatureMSG;
+import static com.enqualcomm.support.bean.ICLocation.CUSTOM_MOD;
+import static com.enqualcomm.support.bean.ICLocation.CUSTOM_MOD8_GPS;
+import static com.enqualcomm.support.bean.ICLocation.CUSTOM_MOD8_WIFI;
+import static com.enqualcomm.support.bean.ICLocation.EMERGNECY_MOD;
+import static com.enqualcomm.support.bean.ICLocation.LOWPOWER_MOD;
+import static com.enqualcomm.support.bean.ICLocation.NORMAL_MOD;
+import static com.enqualcomm.support.bean.ICLocation.REALTIME_MOD;
 
 
 public class CoreService extends Service {
@@ -106,20 +99,20 @@ public class CoreService extends Service {
 
     private Toastc toast = null;
 
-    private static CoreService mProtocolServer=null;
-    private static LBSHelper lbshelper=null;
+    private static CoreService mProtocolServer = null;
+    private static LBSHelper lbshelper = null;
 
     public static final String ACTION_ALARM = "com.enqualcomm.support.ACTION_ALARM";
 
-    private static final int GRAY_SERVICE_ID =android.os.Process.myPid();
+    private static final int GRAY_SERVICE_ID = android.os.Process.myPid();
 
-    private static final String MY_WAKE_LOCKTAG =CoreService.class.getSimpleName();
+    private static final String MY_WAKE_LOCKTAG = CoreService.class.getSimpleName();
 
     public static int alarmCycle = 5;
 
     public static final int interval = 60000;
 
-    public static boolean needLocateInAfterHeartBeat=false;
+    public static boolean needLocateInAfterHeartBeat = false;
     private static int is_allowed_in_sleep_mode = 1;
 
     private static boolean is_in_sleep_mode = false;
@@ -127,13 +120,14 @@ public class CoreService extends Service {
     private static boolean is_wifi_network_ok = false;
     // SPRD: add outdoorMode
     public static final int RINGER_MODE_OUTDOOR = 3;
+    public static Handler mHandler = null;
+    //    public static Handler mHandler=new Handler();
+    private static ICSmsManager smsManager = null;
 
-    public static Handler mHandler=new Handler(EventLooperHandlerThread.makeLooper(MY_WAKE_LOCKTAG));
-//    public static Handler mHandler=new Handler();
-    private static ICSmsManager smsManager=null;
-    public String getServerAlive(){
-       return DeviceInfoUtil.getDeviceInfo(runtime);
+    public String getServerAlive() {
+        return DeviceInfoUtil.getDeviceInfo(runtime);
     }
+
     private BroadcastReceiver AtCallbackBroadcastReceiver = new BroadcastReceiver() {
         public void onReceive(Context param1Context, Intent param1Intent) {
             if (param1Intent.getAction().equals("com.eqc.intent.action.callback.at")) {
@@ -153,7 +147,7 @@ public class CoreService extends Service {
                         stringBuilder1.append(Integer.valueOf(str, 16));
                         stringBuilder1.append(",CELLID=");
                         stringBuilder1.append(Integer.valueOf(str1, 16));
-                        if (Config.LOG_TOFILE) ICLogger.logToFile( "LBS", stringBuilder1.toString());
+                        if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", stringBuilder1.toString());
                     }
                 }
             }
@@ -165,10 +159,10 @@ public class CoreService extends Service {
             StringBuilder stringBuilder2 = new StringBuilder();
             stringBuilder2.append("broadcastReceiver  alarmCycle action==");
             stringBuilder2.append(param1Intent.getAction());
-            if (Config.LOG_TOFILE) ICLogger.logToFile( "alarmCycle", stringBuilder2.toString());
+            if (Config.LOG_TOFILE) ICLogger.logToFile("alarmCycle", stringBuilder2.toString());
             StringBuilder stringBuilder1 = new StringBuilder();
             stringBuilder1.append("时间变化");
-            stringBuilder1.append(param1Intent.getAction()+stringBuilder2.toString());
+            stringBuilder1.append(param1Intent.getAction() + stringBuilder2.toString());
             ICLogger.i(stringBuilder1.toString());
 
             //只有需要确定绝对时间点启动的Alarm需要重置,相对时间点的Alarm不需要重置。防止永远不能正常登陆。
@@ -177,8 +171,8 @@ public class CoreService extends Service {
 //            setHeartAlarm();
 //           setHeartRateDetectAlarm(runtime.getPpgTestCycle());
             setWeatherAlarm();
-            runtime.getContextProxy().sendBroadcast(ACTION_ALARM_ALARM_CHANGE,runtime); //更新Alarm
-           // setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
+            runtime.getContextProxy().sendBroadcast(ACTION_ALARM_ALARM_CHANGE, runtime); //更新Alarm
+            // setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
             if (cmcm_call_eiot_into_powersave_mode() == 0)
                 AlarmWakeUp.isNeedWakeUpAlarm(runtime);
         }
@@ -191,7 +185,7 @@ public class CoreService extends Service {
             stringBuilder2.append(param1Intent.getAction());
             ICLogger.i(stringBuilder2.toString());
 
-            if (ACTION_SEND_EMEGENCY_LOCATION_START.equals(param1Intent.getAction())){
+            if (ACTION_SEND_EMEGENCY_LOCATION_START.equals(param1Intent.getAction())) {
                 runtime.getLocationInstance().setWorkingMod(EMERGNECY_MOD);
                 //runtime.setPpgTestCycle(1);
                 setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
@@ -201,67 +195,69 @@ public class CoreService extends Service {
 
 
                 setEmegencyLocationSTOPAlarm(5);
-            }else if (ACTION_LOCAL_SOS_ACTION.endsWith(param1Intent.getAction())){
+            } else if (ACTION_LOCAL_SOS_ACTION.endsWith(param1Intent.getAction())) {
 
 
                 VibrateUtil.getInstance(runtime.getContextProxy().context).VibrateOn(true);
 //               if( param1Intent.getIntExtra("type", 1) == 1) {
-                boolean needHRSTestOnSOS = Util.getSystemProperties("persist.sys.needHRSOnSOS","false").equals("true");
-                if(needHRSTestOnSOS) {
+                boolean needHRSTestOnSOS = Util.getSystemProperties("persist.sys.needHRSOnSOS", "false").equals("true");
+                if (needHRSTestOnSOS) {
                     //触发一次心率检测
                     setHeartRateDetectAlarm(1);
                 }
-                    runtime.setAlarmType(Runtime.AlarmType.ALARM_SOS);
-                    //trigger AP10 报警定位
-                     ICLogger.i("triggerSOSLocationProcess ");
-                    LocationClient.getInstance().triggerSOSLocationProcess();
+                runtime.setAlarmType(Runtime.AlarmType.ALARM_SOS);
+                //trigger AP10 报警定位
+                ICLogger.i("triggerSOSLocationProcess ");
+                LocationClient.getInstance().triggerSOSLocationProcess();
 //                    Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
 
-                    //开启紧急定位模式,GPS 优先1分钟一次定位,持续5分钟
-                    runtime.getLocationInstance().setWorkingMod(EMERGNECY_MOD);
-                    setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
+                //开启紧急定位模式,GPS 优先1分钟一次定位,持续5分钟
+                runtime.getLocationInstance().setWorkingMod(EMERGNECY_MOD);
+                setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
 
-                    //SOS模式,心率测试1分钟一次,持续5分钟
-                    if(needHRSTestOnSOS) {
-                        //只触发一次心率检测
-                        setHeartRateDetectAlarm(1);
-                    }
-                    //设置5分钟后结束紧急定位模式
-                   setEmegencyLocationSTOPAlarm(5);
+                //SOS模式,心率测试1分钟一次,持续5分钟
+                if (needHRSTestOnSOS) {
+                    //只触发一次心率检测
+                    setHeartRateDetectAlarm(1);
+                }
+                //设置5分钟后结束紧急定位模式
+                setEmegencyLocationSTOPAlarm(5);
 
 
-                   if(Config.SOSNoNeedDial==false) {
-                       //50ms后开始拨打电话
-                       mHandler.postDelayed(mTriggerSOSCALLThread,500);
-                   }
-            }else if (ACTION_QUERY_WEATHER.equals(param1Intent.getAction())) {
+                if (Config.SOSNoNeedDial == false) {
+                    //50ms后开始拨打电话
+                    mHandler.postDelayed(mTriggerSOSCALLThread, 500);
+                }
+            } else if (ACTION_QUERY_WEATHER.equals(param1Intent.getAction())) {
 
                 ICLogger.i("ACTION_QUERY_WEATHER ");
                 connection.send(protocolAPIHelper.getWeatherMSG(runtime));
-                }
+            }
         }
     };
 
-    private TriggerSOSCALLThread mTriggerSOSCALLThread=new TriggerSOSCALLThread();
+    private TriggerSOSCALLThread mTriggerSOSCALLThread = new TriggerSOSCALLThread();
 
-    private  class TriggerSOSCALLThread implements  Runnable{
+    private class TriggerSOSCALLThread implements Runnable {
 
         @Override
         public void run() {
             trigger_SOS_Call();
         }
     }
-    private void trigger_SOS_Call(){
+
+    private void trigger_SOS_Call() {
         try {
             Intent intent = new Intent("com.eqc.shutdown_sos");
-            intent.putExtra("type",1);
+            intent.putExtra("type", 1);
             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             this.startActivity(intent);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }
-    private  Runnable mupdatePracticeData=new Runnable(){
+
+    private Runnable mupdatePracticeData = new Runnable() {
         @Override
         public void run() {
             //ICHttpUtil.uploadData(Runtime.healthInfo.getBufferDataStr(),runtime,TimeUtil.getSystemTime2(),null);
@@ -273,31 +269,30 @@ public class CoreService extends Service {
 
     private BroadcastReceiver broadcastPracticeCMDReceiver = new BroadcastReceiver() {
         public void onReceive(Context param1Context, Intent param1Intent) {
-            if(param1Intent.getAction().equals(Constants.ACTION_START_PRACTISE))
-            {
-                int cmd=param1Intent.getIntExtra(Constants.KeyPractice,0);
-                if (cmd==1){
+            if (param1Intent.getAction().equals(Constants.ACTION_START_PRACTISE)) {
+                int cmd = param1Intent.getIntExtra(Constants.KeyPractice, 0);
+                if (cmd == 1) {
                     //开始自由锻炼
-                    Runtime.practising=true;
-                    Util.setSystemProperties( Config.KeyPractiseState,"true");
+                    Runtime.practising = true;
+                    Util.setSystemProperties(Config.KeyPractiseState, "true");
                     Runtime.healthInfo.reset();
                     Runtime.healthInfo.resetBuffer();
                     setPracticeAlarm();
 
-                }else{
+                } else {
                     //停止自由锻炼,恢复正常
-                    Runtime.practising=false;
-                    Util.setSystemProperties( Config.KeyPractiseState,"false");
+                    Runtime.practising = false;
+                    Util.setSystemProperties(Config.KeyPractiseState, "false");
                     HeartRateManager.stopPPGtest();
 
                     //最后检测是否还有数据需要发送
-                    if(Runtime.healthInfo.check_info_item_finished()){
+                    if (Runtime.healthInfo.check_info_item_finished()) {
                         Runtime.healthInfo.appendBuffer(Runtime.healthInfo.getHealthInfoString());
                         Runtime.healthInfo.reset();
-                     }
-                    if(Runtime.healthInfo.getInfoCount()>=0){
+                    }
+                    if (Runtime.healthInfo.getInfoCount() >= 0) {
                         //超过30次发送数据给服务器
-                        ICLogger.i("自由锻炼结束,发送数据给服务器 "+Runtime.healthInfo.getBufferData().length);
+                        ICLogger.i("自由锻炼结束,发送数据给服务器 " + Runtime.healthInfo.getBufferData().length);
                         mHandler.post(mupdatePracticeData);
                     }
 
@@ -309,19 +304,22 @@ public class CoreService extends Service {
     private static class ServerHandler implements ConnectionListener {
         private final WeakReference<CoreService> mReference;
 
-        ServerHandler(CoreService param1CoreService) { this.mReference = new WeakReference(param1CoreService); }
+        ServerHandler(CoreService param1CoreService) {
+            this.mReference = new WeakReference(param1CoreService);
+        }
 
         @Override
         public void onConnectionClose(String errorName) {
-            CoreService coreService = (CoreService)this.mReference.get();
+            CoreService coreService = (CoreService) this.mReference.get();
             if (coreService == null)
                 return;
-            ICLogger.i("onConnectionClose++ retry to connect again!  Close Error "+errorName);
-            coreService.connectionServiceChain.processConnectionClose(coreService.connection, coreService.runtime,errorName);
+            ICLogger.i("onConnectionClose++ retry to connect again!  Close Error " + errorName);
+            coreService.connectionServiceChain.processConnectionClose(coreService.connection, coreService.runtime, errorName);
         }
+
         @Override
         public void onConnectionOpen() {
-            CoreService coreService = (CoreService)this.mReference.get();
+            CoreService coreService = (CoreService) this.mReference.get();
             if (coreService == null)
                 return;
             coreService.connectionServiceChain.processConnectionOpen(coreService.connection, coreService.runtime);
@@ -330,14 +328,15 @@ public class CoreService extends Service {
 
         public void onReceive(StringMessage param1StringMessage) {
 
-            CoreService coreService = (CoreService)this.mReference.get();
-            ICLogger.i("onReceive " +param1StringMessage.cmd() +" coreService " + coreService  );
+            CoreService coreService = (CoreService) this.mReference.get();
+            ICLogger.i("onReceive " + param1StringMessage.cmd() + " coreService " + coreService);
             if (coreService == null)
                 return;
             coreService.connectionServiceChain.processServerResponse(param1StringMessage, coreService.connection, coreService.runtime);
             coreService.locationClient.onReceive(param1StringMessage);
         }
     }
+
     Connection connection = null;
     AbstractConnectionService connectionServiceChain;
 
@@ -390,7 +389,7 @@ public class CoreService extends Service {
                 //为了保证唤醒时各个状态及时更新到服务器,发送一个同步心跳包,这样用户体验更好
                 CoreService.this.locationClient.updateStepCount();
 
-                mHandler.postDelayed(mRetryConnectSrvThread,500);
+                mHandler.postDelayed(mRetryConnectSrvThread, 500);
 
 
                 if (CoreService.is_wifi_network_ok) {
@@ -400,35 +399,35 @@ public class CoreService extends Service {
 //                    if (!Util.isWifiIsOpen(runtime.getContextProxy().context,runtime))
 //                        Util.turnOnWifiForConnect(runtime.getContextProxy().context, runtime);
                 }
-            } else if ("android.intent.action.SCREEN_OFF".equals(intent.getAction()) && Util.isWifiIsOpen(runtime.getContextProxy().context,runtime)) {
-               // CoreService.is_wifi_network_ok = true;
+            } else if ("android.intent.action.SCREEN_OFF".equals(intent.getAction()) && Util.isWifiIsOpen(runtime.getContextProxy().context, runtime)) {
+                // CoreService.is_wifi_network_ok = true;
                 if (!runtime.isNoTurnOffWifiOnScreenOff()) {
                     //不关闭wifi when ScreenOff
                     ICLogger.i("turnOffWifiForConnect");
 //                    if (Util.isWifiIsOpen(runtime.getContextProxy().context,runtime))
 //                        Util.turnOffWifiForSleep(runtime.getContextProxy().context, runtime);
                 }
-            }else if  (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) {
+            } else if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) {
                 int streamType = intent.getIntExtra("android.media.EXTRA_VOLUME_STREAM_TYPE", -1);
-                ICLogger.i("Volume changed stream type "+streamType);
+                ICLogger.i("Volume changed stream type " + streamType);
 
                 int newVolume = intent.getIntExtra("android.media.EXTRA_VOLUME_STREAM_VALUE", 0);
                 int oldVolume = intent.getIntExtra("android.media.EXTRA_PREV_VOLUME_STREAM_VALUE", 0);
-                boolean   isSilence = SharPreferenceUtil.getPrefBoolean(context, "KEY_ISSILENCE", false);
+                boolean isSilence = SharPreferenceUtil.getPrefBoolean(context, "KEY_ISSILENCE", false);
                 if (newVolume != oldVolume && !isSilence) {
-                   ICLogger.i("Volume changed old "+oldVolume+" new "+newVolume);
-                   Config.setMasterVolume(context,newVolume);
+                    ICLogger.i("Volume changed old " + oldVolume + " new " + newVolume);
+                    Config.setMasterVolume(context, newVolume);
                 }
             }
         }
     };
 
-    private Runnable mRetryConnectSrvThread=new Runnable(){
+    private Runnable mRetryConnectSrvThread = new Runnable() {
         @Override
         public void run() {
-            if (connection.isServerConnected()&& runtime.isServerProtocolConnected()) {
+            if (connection.isServerConnected() && runtime.isServerProtocolConnected()) {
                 mKeepAlive.onHeartAlarm(connection, runtime);
-            }else{
+            } else {
                 ICLogger.i("mRetryConnectSrvThread 发送心跳包时,如果发现服务器没有响应,或者socket连接,则重新尝试连接服务器!");
                 connection.disconnectServer();
                 startConnectionRetryTimer();
@@ -445,7 +444,7 @@ public class CoreService extends Service {
 //        Initialize initialize = new Initialize();
         CheckSIM checkSIM = new CheckSIM();
         this.mKeepAlive = new KeepAlive();
-        this.mDeliver = new Deliver(this.connection,this.runtime);
+        this.mDeliver = new Deliver(this.connection, this.runtime);
 //        initialize.setNext(checkSIM);
         checkSIM.setNext(this.mKeepAlive);
         this.mKeepAlive.setNext(this.mDeliver);
@@ -454,10 +453,11 @@ public class CoreService extends Service {
 
 
     SilentManager silentManager;
+
     private AbstractInvokeHandlerService getInvokeHandlerServiceChain() {
         ICLogger.i("getInvokeHandlerServiceChain");
         SendChatMessage sendChatMessage = new SendChatMessage();
-        HeartRateManager heartRateManager= new HeartRateManager(this.runtime,this.connection);
+        HeartRateManager heartRateManager = new HeartRateManager(this.runtime, this.connection);
         antiservice = new AntiMonitorService();
         silentManager = SilentManager.getInstance();// new SilentManager();
         sendChatMessage.setNext(heartRateManager);
@@ -466,35 +466,38 @@ public class CoreService extends Service {
         return sendChatMessage;
     }
 
-    private void resetStepCount(){
-        if ( ICJniUtils.isPedometerEnabled() == 0)ICJniUtils.enablePedometer();
+    private void resetStepCount() {
+        if (ICJniUtils.isPedometerEnabled() == 0) ICJniUtils.enablePedometer();
         ICJniUtils.resetStepCount();
         SharPreferenceUtil.setPrefInt(this, KEY_STEP_COUNT, 0);
         SharPreferenceUtil.setPrefInt(this, KEY_SAVE_STEP_COUNT, 0);
-        ICLogger.i("Reset StepCount , "+ICJniUtils.getStepCount());
+        ICLogger.i("Reset StepCount , " + ICJniUtils.getStepCount());
         this.runtime.setSaveStepCount(0);
         this.runtime.setTotalStepCount(0);
     }
+
     private void loadStepCount() {
         int i = SharPreferenceUtil.getPrefInt(this, KEY_STEP_COUNT, 0);
         int j = SharPreferenceUtil.getPrefInt(this, KEY_SAVE_STEP_COUNT, 0);
-        if ( ICJniUtils.isPedometerEnabled() == 0)ICJniUtils.enablePedometer();
+        if (ICJniUtils.isPedometerEnabled() == 0) ICJniUtils.enablePedometer();
         //ICJniUtils.recoverStepCount();
-        if (ICJniUtils.getStepCount()>i){
-            i=ICJniUtils.getStepCount();
+        if (ICJniUtils.getStepCount() > i) {
+            i = ICJniUtils.getStepCount();
         }
         this.runtime.setSaveStepCount(j);
         this.runtime.setTotalStepCount(i);
         runtime.setLastStepCountForBT(runtime.getTotalStepCount());
         runtime.setLastStepCount(runtime.getTotalStepCount());
     }
-    public void saveStepCount(){
+
+    public void saveStepCount() {
         int i = runtime.getTotalStepCount();
         int j = runtime.getSaveStepCount();
         SharPreferenceUtil.setPrefInt(this, KEY_STEP_COUNT, i);
         SharPreferenceUtil.setPrefInt(this, KEY_SAVE_STEP_COUNT, j);
         //ICJniUtils.saveStepCount();
     }
+
     private void setCleanStepCountAlarm() {
         /*一天清零一次 计步*/
 //        AlarmHelper.setCleanStepCountAlarm(this, 23, 59, STEP_COUNT_ALARM_ACTION);
@@ -535,38 +538,39 @@ public class CoreService extends Service {
 
     private void setPracticeAlarm() {
 
-        ICLogger.i("setPracticeAlarm "+Runtime.practice_cycle+ " seconds!");
+        ICLogger.i("setPracticeAlarm " + Runtime.practice_cycle + " seconds!");
         //只有周期大于1才有效,否则就等于单次测量
-        if (Runtime.practice_cycle>1)
-            AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context,Runtime.practice_cycle,Constants.ACTION_PRACTICE_REPORT_ALARM);
+        if (Runtime.practice_cycle > 1)
+            AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context, Runtime.practice_cycle, Constants.ACTION_PRACTICE_REPORT_ALARM);
         mHandler.post(mdoPracticeCheck);
     }
-    private Runnable mdoPracticeCheck=new Runnable(){
+
+    private Runnable mdoPracticeCheck = new Runnable() {
         @Override
         public void run() {
             //获取并设置当前步数
-            ICLogger.i("自由锻炼中,设置步数 "+runtime.getTotalStepCount());
+            ICLogger.i("自由锻炼中,设置步数 " + runtime.getTotalStepCount());
             Runtime.healthInfo.setStepCount(runtime.getTotalStepCount());
             //开启定位
             //        locationClient.triggerLocationProcess();
             //开启测温
-            if(runtime.check_stat_do_temp_test())
+            if (runtime.check_stat_do_temp_test())
                 TemperatureUtil.DoTempTest();
 
             //开启测量PPG
-            if(runtime.check_stat_do_ppg_test())
+            if (runtime.check_stat_do_ppg_test())
                 HeartRateManager.triggerPPGtest();
 
         }
     };
 
-    private void checkconnection(){
+    private void checkconnection() {
 
-        if (!this.connection.isServerConnected())
-        {
+        if (!this.connection.isServerConnected()) {
             startConnectionRetryTimer();
         }
     }
+
     private void wakeUpFromSleep() {
         this.startAlarmCount = 0;
 //        alarmCycle = 1;
@@ -589,11 +593,13 @@ public class CoreService extends Service {
         Toast.makeText((this.runtime.getContextProxy()).context, "从深度睡眠中切换模式,联网中", Toast.LENGTH_SHORT).show();
     }
 
-    public int cmcm_call_eiot_into_powersave_mode() { return 0; }
+    public int cmcm_call_eiot_into_powersave_mode() {
+        return 0;
+    }
 
 
     public PowerManager.WakeLock getWakeLock(int paramInt) {
-         PowerManager.WakeLock wakeLock = ((PowerManager)(this.runtime.getContextProxy()).context.getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, MY_WAKE_LOCKTAG);
+        PowerManager.WakeLock wakeLock = ((PowerManager) (this.runtime.getContextProxy()).context.getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, MY_WAKE_LOCKTAG);
 //        wakeLock.acquire(paramInt*60*1000L);
         wakeLock.acquire(3000L);
         return wakeLock;
@@ -604,27 +610,33 @@ public class CoreService extends Service {
     }
 
 
-
-    public Runtime getRuntime(){
+    public Runtime getRuntime() {
         return runtime;
     }
-    public Connection getConnection(){
+
+    public Connection getConnection() {
         return connection;
     }
-    private static boolean server_starting=true;
+
+    private static boolean server_starting = true;
+
     @Override
     public void onCreate() {
-
-        server_starting=true;
+        if (mHandler == null) {
+            HandlerThread handlerThread = new HandlerThread("ic:core-thread");
+            handlerThread.start();
+            mHandler = new Handler(handlerThread.getLooper());
+        }
+        server_starting = true;
         log("初始化网络协议服务");
-        mProtocolServer=this;
-        java.lang.Runtime.getRuntime().addShutdownHook(new Thread(){
+        mProtocolServer = this;
+        java.lang.Runtime.getRuntime().addShutdownHook(new Thread() {
             @Override
             public void run() {
                 super.run();
                 //设置断网状态
                 ICLogger.i("shutdown !");
-                Util.setSystemProperties("persist.sys.server_connected","false");
+                Util.setSystemProperties("persist.sys.server_connected", "false");
             }
         });
         this.runtime = new Runtime();
@@ -632,17 +644,16 @@ public class CoreService extends Service {
         this.runtime.setCacheDir(getExternalCacheDir());
         this.runtime.setDBHelper(new DBHelper(getContentResolver(), this));
         this.runtime.setContextProxy(new ContextProxy(this));
-        this.runtime.setLbsHelper(new LBSHelper(this,this.runtime.getContextProxy().getWifiManager(), this.runtime));
+        this.runtime.setLbsHelper(new LBSHelper(this, this.runtime.getContextProxy().getWifiManager(), this.runtime));
 
         this.runtime.setHRS(new heartRateStatus());
         this.runtime.setUseQueue(true);
         this.runtime.initDnsUtil(ICApplication.getInstance().getApplicationContext());
 
 
-        if (Config.protocol_no==Config.PROTOCOL_MQTT)
-        {
+        if (Config.protocol_no == Config.PROTOCOL_MQTT) {
             connection = new mqttConnection(new ServerHandler(this), runtime);
-        }else {
+        } else {
             connection = new NettyConnection(new ServerHandler(this), runtime);
         }
         this.connectionServiceChain = getConnectionServiceChain();
@@ -652,12 +663,12 @@ public class CoreService extends Service {
 //            return;
 //        }
 
-        smsManager= new ICSmsManager(runtime);
+        smsManager = new ICSmsManager(runtime);
 
         //保证获取正确的计步数据及其他参数初始化
         loadStepCount();
 
-        if (Config.logBootDate(this)){
+        if (Config.logBootDate(this)) {
             resetStepCount();
         }
 
@@ -666,8 +677,8 @@ public class CoreService extends Service {
         Config.LoadMessageConfigs();
 
         if (Config.custom_name.equals("H88")) {
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED,true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED, true);
             if (Config.getConfigInitFlag(this) == 0) {
                 Config.setLocationMode(this, CUSTOM_MOD8_GPS);
                 Config.setLocationCycle(this, 3600);
@@ -675,10 +686,10 @@ public class CoreService extends Service {
                 Config.setTemperatureTestCycle(runtime, 60 * 60);
                 Config.setConfigInitFlag(this, 1);
             }
-        }else if (Config.custom_name.equals("l004")) {
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_CUTOFF,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ILLEGAL_CUTOFF,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH,true);
+        } else if (Config.custom_name.equals("l004")) {
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_CUTOFF, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ILLEGAL_CUTOFF, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH, true);
 
             if (Config.getConfigInitFlag(this) == 0) {
                 Config.setLocationMode(this, CUSTOM_MOD8_GPS);
@@ -688,32 +699,32 @@ public class CoreService extends Service {
                 Config.setConfigInitFlag(this, 1);
 
             }
-        }else if (Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN")) {
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_CUTOFF,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ILLEGAL_CUTOFF,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_UNREADMSG,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_MSGREAD,true);
+        } else if (Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN")) {
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_CUTOFF, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ILLEGAL_CUTOFF, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_UNREADMSG, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_MSGREAD, true);
 
             if (Config.getConfigInitFlag(this) == 0) {
                 Config.setLocationMode(this, NORMAL_MOD);
-                Config.setLocationCycle(this, 15*60);
+                Config.setLocationCycle(this, 15 * 60);
                 Config.setPPGTestCycle(this, 0);
                 Config.setTemperatureTestCycle(runtime, 0);
                 Config.setConfigInitFlag(this, 1);
 
             }
-        }else if (Config.custom_name.equals("AK")) {
+        } else if (Config.custom_name.equals("AK")) {
 
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_SOS,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOWBATTERY,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF,true);
-            Config.enableSleep=true;
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_SOS, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOWBATTERY, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF, true);
+            Config.enableSleep = true;
 
-            if (Config.getConfigInitFlag(this)==0) {
+            if (Config.getConfigInitFlag(this) == 0) {
                 Config.setPPGTestCycle(this, 0);
                 Config.setTemperatureTestCycle(runtime, 0);
                 Config.setConfigInitFlag(this, 1);
@@ -727,38 +738,38 @@ public class CoreService extends Service {
 //                    runtime.getDbHelper().saveContacts(contactArray,false,false,false,false,false,true);
 //                }
             }
-        }else if (Config.custom_name.equals("YT")) {
+        } else if (Config.custom_name.equals("YT")) {
 
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_SOS,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOWBATTERY,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF,true);
-            Config.enableSleep=true;
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_SOS, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOWBATTERY, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF, true);
+            Config.enableSleep = true;
 
-            if (Config.getConfigInitFlag(this)==0) {
+            if (Config.getConfigInitFlag(this) == 0) {
                 Config.setPPGTestCycle(this, 0);
                 Config.setTemperatureTestCycle(runtime, 0);
                 Config.setConfigInitFlag(this, 1);
 
-                int contactcount=runtime.getDbHelper().getContactCount(getContentResolver());
-                ICLogger.i("=====Contact count "+contactcount);
-                if(contactcount==0){ //如果没有SOS
+                int contactcount = runtime.getDbHelper().getContactCount(getContentResolver());
+                ICLogger.i("=====Contact count " + contactcount);
+                if (contactcount == 0) { //如果没有SOS
                     ICLogger.i("=====add hotline 96885 ");
-                    ArrayList<Contact> contactArray=new ArrayList<Contact>();
+                    ArrayList<Contact> contactArray = new ArrayList<Contact>();
                     contactArray.add(new Contact(Contact.CATEGORY_CALL, this.getResources().getString(R.string.hotline), "96885"));
-                    runtime.getDbHelper().saveContacts(contactArray,false,false,false,false,false,true);
+                    runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
                 }
             }
-        }else if (Config.custom_name.equals("SGL")) { //C5项目
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ESCAPE,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_CUTOFF,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ILLEGAL_CUTOFF,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH,true);
+        } else if (Config.custom_name.equals("SGL")) { //C5项目
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ESCAPE, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_CUTOFF, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ILLEGAL_CUTOFF, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH, true);
             Config.forceMoveCheck = false; //对定位不进行运动检测。
-            if (Config.getConfigInitFlag(this)==0) {
+            if (Config.getConfigInitFlag(this) == 0) {
                 Config.setLocationMode(this, CUSTOM_MOD8_GPS);
 //                Config.setLocationMode(this, CUSTOM_MOD8_WIFI);
-                Config.setLocationCycle(this, 5*60);
+                Config.setLocationCycle(this, 5 * 60);
                 Config.setPPGTestCycle(this, 0);
                 Config.setTemperatureTestCycle(runtime, 0);
                 Config.setConfigInitFlag(this, 1);
@@ -772,7 +783,7 @@ public class CoreService extends Service {
 //                    runtime.getDbHelper().saveContacts(contactArray,false,false,false,false,false,true);
 //                }
             }
-        }else if (Config.custom_name.equals("L02") || Config.custom_name.equals("L03")||Config.custom_name.equals("L05")) { //L02
+        } else if (Config.custom_name.equals("L02") || Config.custom_name.equals("L03") || Config.custom_name.equals("L05")) { //L02
             Config.forceMoveCheck = false; //即爱对gps不进行运动检测,此变量专门为了给其他协议进行强制运动检测用的。
             if (Config.getConfigInitFlag(this) == 0) {
                 Config.setPPGTestCycle(this, 0);
@@ -780,24 +791,24 @@ public class CoreService extends Service {
                 Config.setConfigInitFlag(this, 1);
             }
 
-        }else if (Config.custom_name.equals("VitracK")){
+        } else if (Config.custom_name.equals("VitracK")) {
 
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_SOS,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOWBATTERY,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED,true);
-            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF,true);
-            Config.enableSleep=false;
-            if (Config.getConfigInitFlag(this)==0) {
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_SOS, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOWBATTERY, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED, true);
+            Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF, true);
+            Config.enableSleep = false;
+            if (Config.getConfigInitFlag(this) == 0) {
                 Config.setLocationMode(this, CUSTOM_MOD8_GPS);
-                Config.setLocationCycle(this, 15*60);
-                Config.setPPGTestCycle(this, 15*60);
-                Config.setTemperatureTestCycle(runtime, 15*60);
+                Config.setLocationCycle(this, 15 * 60);
+                Config.setPPGTestCycle(this, 15 * 60);
+                Config.setTemperatureTestCycle(runtime, 15 * 60);
                 Config.setConfigInitFlag(this, 1);
             }
 
-        }else{
+        } else {
 
-            if (Config.getConfigInitFlag(this)==0) {
+            if (Config.getConfigInitFlag(this) == 0) {
                 Config.setPPGTestCycle(this, 0);
                 Config.setTemperatureTestCycle(runtime, 0);
                 Config.setConfigInitFlag(this, 1);
@@ -809,7 +820,7 @@ public class CoreService extends Service {
         runtime.setNeddReportCutoff(Config.getNeedCutOff(this));
         runtime.setNeedAntioff(Config.getNeedAntiOff(this));
 
-        Config.setHeartBeatCycle(this,alarmCycle); //临时设置为5分钟,给L03测试用。测试断线问题未解决,取消测试。
+        Config.setHeartBeatCycle(this, alarmCycle); //临时设置为5分钟,给L03测试用。测试断线问题未解决,取消测试。
         //初始化ServerHeartBeat Cycle
         Config.loadHearBeatSetting(runtime);
         //初始化PPG,LocationMod,LocationCycle
@@ -821,7 +832,7 @@ public class CoreService extends Service {
         //读取Alarm环境配置,项目不需要的Alarm不要发送, 目前环境变量配置优先。默认值会被覆盖。
         Config.loadAlarmConfig();
 
-        Config.enable_NTP_Server(this,!Config.disable_ntp_server);
+        Config.enable_NTP_Server(this, !Config.disable_ntp_server);
 
 
         //初始化温度测试相关参数
@@ -830,7 +841,7 @@ public class CoreService extends Service {
 
 
         //加载存储的健康数据校准值
-        Config.loadPPG_BPH_BPL_SPO2_adjustvalue(this,runtime);
+        Config.loadPPG_BPH_BPL_SPO2_adjustvalue(this, runtime);
 
         this.connectionServiceChain.processAttach(this.connection, this.runtime);
         this.invokeHandlerServiceChain.processAttach(this.connection, this.runtime);
@@ -878,35 +889,35 @@ public class CoreService extends Service {
         intentFilter.addAction(ACTION_QUERY_WEATHER);
         intentFilter.addAction(ACTION_SEND_EMEGENCY_LOCATION_START);
         intentFilter.addAction(ACTION_LOCAL_SOS_ACTION);
-        registerReceiver(broadcastSOSReceiver,intentFilter);
+        registerReceiver(broadcastSOSReceiver, intentFilter);
 
         //添加自由锻炼 接收
         intentFilter = new IntentFilter();
         intentFilter.addAction(Constants.ACTION_START_PRACTISE);
-        registerReceiver(broadcastPracticeCMDReceiver,intentFilter);
+        registerReceiver(broadcastPracticeCMDReceiver, intentFilter);
 
         //初始化Sim信号
         this.mSignalUtil = SimSignalUtil.getInstance(this);
 
         //初始化 电池电量监控工具(内部注册接收电池变化)
-        batteryUtil = new BatteryUtil(this.runtime,connection);
+        batteryUtil = new BatteryUtil(this.runtime, connection);
 
         //保证发送心跳时提前获取BatLevel数据
-        int batlevel=batteryUtil.getBatteryLevel(this);
-        runtime.setBattery(String.format("%03d",batlevel));
+        int batlevel = batteryUtil.getBatteryLevel(this);
+        runtime.setBattery(String.format("%03d", batlevel));
         runtime.setBattery(batlevel);
-        ICLogger.i("Battery get from api "+batlevel);
+        ICLogger.i("Battery get from api " + batlevel);
 
 
         boolean charging = batteryUtil.isPowerConnected(this);
         runtime.setPowerConnected(charging);
-        ICLogger.i("Charging  "+charging);
+        ICLogger.i("Charging  " + charging);
 //        LedUtil.setRedLedOn(false);
-        if (Config.isL03Tracker){
+        if (Config.isL03Tracker) {
 
-            if (runtime.isPowerConnected())         {
+            if (runtime.isPowerConnected()) {
                 LedUtil.setRedLedOn(true);
-            }else{
+            } else {
                 LedUtil.setRedLedOn(false);
             }
         }
@@ -935,7 +946,7 @@ public class CoreService extends Service {
 
 
         //获取定位时间
-        needLocateInAfterHeartBeat=true;
+        needLocateInAfterHeartBeat = true;
         setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
 
         //设置温度测量间隔时间
@@ -944,36 +955,35 @@ public class CoreService extends Service {
 
 
         //初始化佩戴检测
-        runtime.anti_test_cycle=Config.getCheckAntiPolingCycle(this);
-        if( runtime.anti_test_cycle>0){
-         //   setAntiAlarm();
+        runtime.anti_test_cycle = Config.getCheckAntiPolingCycle(this);
+        if (runtime.anti_test_cycle > 0) {
+            //   setAntiAlarm();
         }
 
         //初始化蓝牙检测
-        runtime.bleInfo.bleScanCycle=Config.getBleScanCycle(this);
-        if(Config.BLEScanProtocol==1 && runtime.bleInfo.bleScanCycle>0)
-        {
+        runtime.bleInfo.bleScanCycle = Config.getBleScanCycle(this);
+        if (Config.BLEScanProtocol == 1 && runtime.bleInfo.bleScanCycle > 0) {
 
             setBleScanAlarm(runtime.bleInfo.bleScanCycle);
         }
 
         //设置来电模式
-        Util.SetRingMode(this, AudioManager.RINGER_MODE_NORMAL,true);
+        Util.SetRingMode(this, AudioManager.RINGER_MODE_NORMAL, true);
 
         //备份DB数据到sd cache目录,为调试方便
         Util.getDBFile();
 //        test(); //test function
 
- //更新MCC MNC
+        //更新MCC MNC
         CellInfoUtil.setCurrentAttachCellInfo(CoreService.getInstance().runtime);
- //更新IMEI
+        //更新IMEI
         DeviceInfoUtil.updateImei(runtime);
 
         //设置断网状态
-        Util.setSystemProperties("persist.sys.server_connected","false");
+        Util.setSystemProperties("persist.sys.server_connected", "false");
 
         //启动结束设置标志位,让心率和体温检测可以正常执行。
-        server_starting=false;
+        server_starting = false;
 
         //重置缓存中的在等待命令
         Deliver.resetCMDReocrdsDB();
@@ -981,45 +991,46 @@ public class CoreService extends Service {
         ReConnectToServer();
     }
 
-    private void test(){
+    private void test() {
 
         ICLogger.i("周一清除所有睡眠数据Record");
         runtime.getDbHelper().deleteSleepData();
     }
 
     //检查是否有未读消息需要提醒
-    private  void checkUnreadMessage(){
+    private void checkUnreadMessage() {
 
-        String msg=Config.getLastUnReadMessage(this);
-        Util.checkMesageNeedNotifi(msg,runtime);
+        String msg = Config.getLastUnReadMessage(this);
+        Util.checkMesageNeedNotifi(msg, runtime);
 
 
     }
 
     //内部广播StringMessage
-    public static void DevliverStringMessage(String cmd){
-        CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd,"");
+    public static void DevliverStringMessage(String cmd) {
+        CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd, "");
     }
+
     //内部广播StringMessage
-    public static void DevliverStringMessage(String cmd,String str){
-        CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd,str);
+    public static void DevliverStringMessage(String cmd, String str) {
+        CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd, str);
     }
 
     //表带剪断检测报警,此处只是设备本地提醒,并不发送报警信息给服务器。
-    public void checkAlarmMessage(){
+    public void checkAlarmMessage() {
 
 
-        if (runtime.Fence_Warning_flag>0 &&  Config.needAllwaysAlarmFenceOut){
+        if (runtime.Fence_Warning_flag > 0 && Config.needAllwaysAlarmFenceOut) {
             runtime.Fence_Warning_flag++;
             WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
-            runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_out_wall),2);
+            runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_out_wall), 2);
         }
-        if(runtime.Cut_off_flag>0 && Config.needAllwaysAlarmCutOff){
+        if (runtime.Cut_off_flag > 0 && Config.needAllwaysAlarmCutOff) {
             runtime.Cut_off_flag++;
 //            WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
 
             if (Config.A9_noBroadCastActionStrip) {
-                if(Config.needBroadcastCutoffAlarm) {
+                if (Config.needBroadcastCutoffAlarm) {
                     antiservice.send_cutoff_event_broadcast(1);
                 }
 
@@ -1029,21 +1040,21 @@ public class CoreService extends Service {
     }
 
     //检测久坐提醒
-    public void checkKeepSitting(){
-        String dateyyyyMMDDhhmmss=TimeUtil.getSystemTime3();
+    public void checkKeepSitting() {
+        String dateyyyyMMDDhhmmss = TimeUtil.getSystemTime3();
         //为了更新 isInSleepRange, 下面的语句必须执行
         TimeUtil.getCurrentSleepRecordDate(dateyyyyMMDDhhmmss);
-         if(TimeUtil.isInSleepRange == false) { //不在睡眠时间就是久坐时间段。
-             if (Runtime.lastSitCheckStepCount == -1){
-                 Runtime.lastSitCheckStepCount=runtime.getTotalStepCount();
-                 Runtime.lastSitCheckTiimeyyyyMMddHHmmss=TimeUtil.getSystemTime3();
-             }
-             int keepsitRange=Config.getKeepSitRangeInMinutes(this);
-             int minutes=(int)TimeUtil.diffBetween2DateInMinutes(Runtime.lastSitCheckTiimeyyyyMMddHHmmss,dateyyyyMMDDhhmmss);
-             ICLogger.i("SitCheck last SitCheckTime "+ Runtime.lastSitCheckTiimeyyyyMMddHHmmss + " , current checktime "+dateyyyyMMDDhhmmss);
-             ICLogger.i("SitCheck minutes "+ minutes + " , keepsitRange "+keepsitRange);
-             if (minutes >=keepsitRange && keepsitRange>0){
-                if ( (runtime.getTotalStepCount() - Runtime.lastSitCheckStepCount)/minutes < Config.KeepSitJudgementRefValue){
+        if (TimeUtil.isInSleepRange == false) { //不在睡眠时间就是久坐时间段。
+            if (Runtime.lastSitCheckStepCount == -1) {
+                Runtime.lastSitCheckStepCount = runtime.getTotalStepCount();
+                Runtime.lastSitCheckTiimeyyyyMMddHHmmss = TimeUtil.getSystemTime3();
+            }
+            int keepsitRange = Config.getKeepSitRangeInMinutes(this);
+            int minutes = (int) TimeUtil.diffBetween2DateInMinutes(Runtime.lastSitCheckTiimeyyyyMMddHHmmss, dateyyyyMMDDhhmmss);
+            ICLogger.i("SitCheck last SitCheckTime " + Runtime.lastSitCheckTiimeyyyyMMddHHmmss + " , current checktime " + dateyyyyMMDDhhmmss);
+            ICLogger.i("SitCheck minutes " + minutes + " , keepsitRange " + keepsitRange);
+            if (minutes >= keepsitRange && keepsitRange > 0) {
+                if ((runtime.getTotalStepCount() - Runtime.lastSitCheckStepCount) / minutes < Config.KeepSitJudgementRefValue) {
                     //平均 每分钟活动数 小于参考久坐计步值,表示久坐
                     ICLogger.i("SitCheck 平均 每分钟活动数 小于参考久坐计步值,表示久坐");
                     WakeLockUtil.ScreenOnWakeLockTemperary(this);
@@ -1053,50 +1064,50 @@ public class CoreService extends Service {
 
 
                     //提醒后 重置 lastCheckSitTime 以及 lastSitCheckStepCount , 重新计时
-                    Runtime.lastSitCheckStepCount=runtime.getTotalStepCount();
-                    Runtime.lastSitCheckTiimeyyyyMMddHHmmss=TimeUtil.getSystemTime3();
+                    Runtime.lastSitCheckStepCount = runtime.getTotalStepCount();
+                    Runtime.lastSitCheckTiimeyyyyMMddHHmmss = TimeUtil.getSystemTime3();
 
-                    if(Config.isAlarmTypeEnabled(Runtime.AlarmType.ALARM_SEDENTARY)){
+                    if (Config.isAlarmTypeEnabled(Runtime.AlarmType.ALARM_SEDENTARY)) {
                         runtime.setAlarmType(Runtime.AlarmType.ALARM_SEDENTARY);
 //                        Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
                         ICLogger.i("triggerSOSLocationProcess ");
                         locationClient.triggerSOSLocationProcess();
                     }
-                }else{
+                } else {
                     //只要 平均每分钟活动数大于参考值,则重置 lastCheckSitTime 以及 lastSitCheckStepCount
                     ICLogger.i("SitCheck 平均每分钟活动数大于参考值,则重置 lastCheckSitTime 以及 lastSitCheckStepCount");
-                    Runtime.lastSitCheckStepCount=runtime.getTotalStepCount();
-                    Runtime.lastSitCheckTiimeyyyyMMddHHmmss=TimeUtil.getSystemTime3();
+                    Runtime.lastSitCheckStepCount = runtime.getTotalStepCount();
+                    Runtime.lastSitCheckTiimeyyyyMMddHHmmss = TimeUtil.getSystemTime3();
                 }
             }
-        }else{
-             Runtime.lastSitCheckStepCount=-1; //不在时间段就重置数据,以便下一次使用能过重新开始计数。
+        } else {
+            Runtime.lastSitCheckStepCount = -1; //不在时间段就重置数据,以便下一次使用能过重新开始计数。
         }
 
 
     }
 
-    public void updateSleepDate(){
-        String dateyyyyMMDDhhmmss=TimeUtil.getSystemTime3();
-        String sleepdate=TimeUtil.getCurrentSleepRecordDate(dateyyyyMMDDhhmmss);
-        ICLogger.i("updateSleepDate "+sleepdate);
-        if(TimeUtil.isInSleepRange == true) {
-            runtime.getDbHelper().insertSleepRecord(new SleepRecord(dateyyyyMMDDhhmmss,sleepdate,runtime.getTotalStepCount()));
-            runtime.sleepDataReported=false; //只要记录过数据 就证明有数据没有report
-        }else{
+    public void updateSleepDate() {
+        String dateyyyyMMDDhhmmss = TimeUtil.getSystemTime3();
+        String sleepdate = TimeUtil.getCurrentSleepRecordDate(dateyyyyMMDDhhmmss);
+        ICLogger.i("updateSleepDate " + sleepdate);
+        if (TimeUtil.isInSleepRange == true) {
+            runtime.getDbHelper().insertSleepRecord(new SleepRecord(dateyyyyMMDDhhmmss, sleepdate, runtime.getTotalStepCount()));
+            runtime.sleepDataReported = false; //只要记录过数据 就证明有数据没有report
+        } else {
             if (runtime.sleepDataReported == false) {
                 //calculate sleep data and report it randomly within 1 hour
                 runtime.sleepDataReported = true;
                 int score = runtime.getDbHelper().querySleepScore(sleepdate);
                 if (score > 0) {
-                    ICLogger.i("已经有"+sleepdate+"的睡眠数据!");
+                    ICLogger.i("已经有" + sleepdate + "的睡眠数据!");
                 } else {
                     SleepInfo si = SleepInfo.getInstance();
                     si.setDate(sleepdate);
                     si.calculate_sleepInfo(runtime);
 
                     runtime.getDbHelper().updateSleepInfo(si);
-                    if (TimeUtil.getWeek().equals("周一")){
+                    if (TimeUtil.getWeek().equals("周一")) {
                         ICLogger.i("周一清除所有睡眠数据Record");
                         runtime.getDbHelper().deleteSleepData();
                     }
@@ -1112,16 +1123,16 @@ public class CoreService extends Service {
 //                    Observable.timer(randomint * 60 * 1000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {
 //                        public void call(Long param1Long) {
 //                        connection.send(protocolAPIHelper);
-                            ICLogger.i("Send  sleep info " + si.getCurrentDate()
-                                    + " deep " + si.getDeepsleep_minutes()
-                                    + " light " + si.getLightsleep_minutes()
-                                    + " score " + si.getScore()
-                            );
-                            if (Config.enableSleep) {
-                                Deliver.sendLocationMSG(protocolAPIHelper.getSleepMSG(SleepInfo.getInstance(), runtime));
-                            }else{
-                                ICLogger.i(" 没有开启睡眠协议,skip send message!");
-                            }
+                    ICLogger.i("Send  sleep info " + si.getCurrentDate()
+                            + " deep " + si.getDeepsleep_minutes()
+                            + " light " + si.getLightsleep_minutes()
+                            + " score " + si.getScore()
+                    );
+                    if (Config.enableSleep) {
+                        Deliver.sendLocationMSG(protocolAPIHelper.getSleepMSG(SleepInfo.getInstance(), runtime));
+                    } else {
+                        ICLogger.i(" 没有开启睡眠协议,skip send message!");
+                    }
 //                        }
 //                    });
 
@@ -1129,8 +1140,9 @@ public class CoreService extends Service {
             }
         }
     }
+
     public int onStartCommand(Intent paramIntent, int paramInt1, int paramInt2) {
-        if (paramIntent != null && paramIntent.getAction()!=null) {
+        if (paramIntent != null && paramIntent.getAction() != null) {
             StringBuilder stringBuilder = new StringBuilder();
             stringBuilder.append("onStartCommand action=");
             stringBuilder.append(paramIntent.getAction());
@@ -1179,7 +1191,7 @@ public class CoreService extends Service {
                 if (Config.LOG_TOFILE)
                     ICLogger.logToFile("alarmCycle", "HEART_ALARM alarmCycle  ");
                 return Service.START_STICKY;
-            }else if (ACTION_LOCATION_ALARM.equals(paramIntent.getAction())) {
+            } else if (ACTION_LOCATION_ALARM.equals(paramIntent.getAction())) {
 
 
 //                    if (cmcm_call_eiot_into_powersave_mode() == 1) {
@@ -1218,29 +1230,29 @@ public class CoreService extends Service {
                 if (Config.LOG_TOFILE) ICLogger.logToFile("alarmCycle", stringBuilder1.toString());
 //                this.locationClient.triggerLocationProcess();
 
-            }else if (Constants.OTHER_ALARM_END.equals(paramIntent.getAction())) {
+            } else if (Constants.OTHER_ALARM_END.equals(paramIntent.getAction())) {
                 ICLogger.i("OTHER_ALARM_END set Ringmode Normal vib true");
-               SilentManager.setSilentConfig(this,false);
-            }else if (Constants.OTHER_ALARM_START.equals(paramIntent.getAction())) {
+                SilentManager.setSilentConfig(this, false);
+            } else if (Constants.OTHER_ALARM_START.equals(paramIntent.getAction())) {
                 ICLogger.i("OTHER_ALARM_START set Ringmode Silent vib false");
-                SilentManager.setSilentConfig(this,true);
-            }else if (Constants.ACTION_ALARM_BLE_SCAN.equals(paramIntent.getAction())) {
-                    //循环蓝牙扫描
+                SilentManager.setSilentConfig(this, true);
+            } else if (Constants.ACTION_ALARM_BLE_SCAN.equals(paramIntent.getAction())) {
+                //循环蓝牙扫描
                 setBleScanAlarm(runtime.bleInfo.bleScanCycle);
 
-            }else if (Constants.ACTION_PRACTICE_REPORT_ALARM.equals(paramIntent.getAction())) {
+            } else if (Constants.ACTION_PRACTICE_REPORT_ALARM.equals(paramIntent.getAction())) {
                 //alarm是延迟的,所以这个判断主要是给最后一次可能无效的测量
-                if (Runtime.practising==true) {
+                if (Runtime.practising == true) {
                     //开始下一轮健康测量
                     setPracticeAlarm();
                 }
-            }else if (Constants.ACTION_CHECK_SERVER_RESPONSE.equals(paramIntent.getAction())) {
+            } else if (Constants.ACTION_CHECK_SERVER_RESPONSE.equals(paramIntent.getAction())) {
                 //暂时还使用 ScheduledThreadPoolExecutor , 时间要求不是那么的严格
-            }else if (Constants.ACTION_RETRY_SERVER_CONNECT.equals(paramIntent.getAction())) {
+            } else if (Constants.ACTION_RETRY_SERVER_CONNECT.equals(paramIntent.getAction())) {
                 //暂时还使用 ScheduledThreadPoolExecutor , 时间要求不是那么的严格
-            }else if (Constants.ACTION_CHECK_LOCATION_RESULT.equals(paramIntent.getAction())) {
+            } else if (Constants.ACTION_CHECK_LOCATION_RESULT.equals(paramIntent.getAction())) {
                 locationClient.waitAndSendLocation();
-            }else if (Constants.SLEEP_ALARM.equals(paramIntent.getAction())) {
+            } else if (Constants.SLEEP_ALARM.equals(paramIntent.getAction())) {
                 StringBuilder stringBuilder1;
                 ICLogger.i("SLEEP_ALARM");
                 is_allowed_in_sleep_mode = 1;
@@ -1288,7 +1300,7 @@ public class CoreService extends Service {
 
                 setTempAlarm();
 
-               return Service.START_STICKY;
+                return Service.START_STICKY;
             } else if (STEP_COUNT_ALARM_ACTION.equals(paramIntent.getAction())) {
                 ICLogger.i("Reset Count At 00:00 ");
                 //update stepCount and broadcast before reset
@@ -1299,7 +1311,7 @@ public class CoreService extends Service {
                 //更新 运动控制的上次步数 然后再resetstecount
                 //runtime.setLastStepCount(runtime.getTotalStepCount()-runtime.getLastStepCount());
                 //runtime.setLastStepCountForBT(runtime.getTotalStepCount()-runtime.getLastStepCountForBT());
-                 resetStepCount();
+                resetStepCount();
                 //此处本来应该把刚刚reset前运动的步数设置到计步器里,继续开始计步。
                 // 由于计步接口没有提供设置步数。所以暂时只能清零,不能解决午夜还在运动的情况,会丢失一两次的数据。但是影响不大
                 runtime.setLastStepCountForBT(0);
@@ -1319,11 +1331,11 @@ public class CoreService extends Service {
                 //此消息来源于BroadCaset,收到开始测试的消息。
                 //此时需要重置HeartRateDetect Timer
                 //倘若有 参数 PPGTestCycle,则根据这个数值进行设置
-                int ppgtestCycle=paramIntent.getIntExtra("PPGTestCycle",-1);
-                if (ppgtestCycle >0){
-                    Config.setPPGTestCycle(runtime.getContextProxy().context,ppgtestCycle);
+                int ppgtestCycle = paramIntent.getIntExtra("PPGTestCycle", -1);
+                if (ppgtestCycle > 0) {
+                    Config.setPPGTestCycle(runtime.getContextProxy().context, ppgtestCycle);
                     runtime.setPpgTestCycle(Config.getPPGTestCycle(runtime.getContextProxy().context));
-                    ICLogger.i("get and set PPGTestCycle "+ppgtestCycle);
+                    ICLogger.i("get and set PPGTestCycle " + ppgtestCycle);
                 }
                 setHeartRateDetectAlarm(runtime.getPpgTestCycle());//重置心率检测周期,并触发一次检测
 
@@ -1333,7 +1345,7 @@ public class CoreService extends Service {
                 LocationClient.setForceLocation(1);
                 setLocationAlarm(runtime.getLocationInstance().getWorkingMod());//同时重置alarm并触发定位
 
-            }else if(ACTION_CHECK_ANTIOFF_EVENT.equals(paramIntent.getAction())){
+            } else if (ACTION_CHECK_ANTIOFF_EVENT.equals(paramIntent.getAction())) {
                 //只在中断式检测过程中延时用
                 antiservice.check_ant_event();
             }
@@ -1344,93 +1356,96 @@ public class CoreService extends Service {
         return Service.START_NOT_STICKY;
     }
 
-    public boolean onUnbind(Intent paramIntent) { return false; }
+    public boolean onUnbind(Intent paramIntent) {
+        return false;
+    }
 
     //每一分钟设置一次
     public void setAlarm(int paramInt) {
 //        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,paramInt,ACTION_ALARM);
     }
 
-    public void setHeartRateDetectAlarm(int heartRateDetectAlarmCycle){
+    public void setHeartRateDetectAlarm(int heartRateDetectAlarmCycle) {
         if (Config.noPPGSensor) {
             ICLogger.i("setHeartRateDetectAlarm oPPGSensor");
             return;
         }
-        StringBuilder sb=new StringBuilder();
-        if (heartRateDetectAlarmCycle>1) {
+        StringBuilder sb = new StringBuilder();
+        if (heartRateDetectAlarmCycle > 1) {
             AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context, heartRateDetectAlarmCycle, ACTION_HEATR_RATE_START);
         }
 
-        if(runtime.check_stat_do_ppg_test()) {
+        if (runtime.check_stat_do_ppg_test()) {
             if (Runtime.practising == true) {
                 sb.append("自由锻炼中,跳过原有的循环心率检测!");
                 ICLogger.i("自由锻炼中,跳过原有的循环心率检测!");
             } else {
                 sb.append("setHeartRateDetectAlarm " + heartRateDetectAlarmCycle);
-                if(!server_starting)
+                if (!server_starting)
                     HeartRateManager.triggerPPGtest();
             }
         }
-        if (Config.LOG_TOFILE)ICLogger.logToFile("alarmCycle",sb.toString());
+        if (Config.LOG_TOFILE) ICLogger.logToFile("alarmCycle", sb.toString());
     }
 
-    public void setBleScanAlarm(int cycle){
+    public void setBleScanAlarm(int cycle) {
         //只有蓝牙扫描协议1才需要设置周期,蓝牙扫描协议0 为心跳及定位时才进行扫描
-        if (Config.BLEScanProtocol!=1) {
+        if (Config.BLEScanProtocol != 1) {
             ICLogger.i("BLEScanProtocol!=1  skip setPolingCheckAntiAlarm");
             return;
         }
-        StringBuilder sb=new StringBuilder();
-        if (cycle>=15) {
+        StringBuilder sb = new StringBuilder();
+        if (cycle >= 15) {
             //由于蓝牙扫描一次15秒,所以周期要大于等于15秒
-            AlarmHelper.setRealTimeAlarmInMicorSeconds(runtime.getContextProxy().context, cycle*1000, ACTION_ALARM_BLE_SCAN);
+            AlarmHelper.setRealTimeAlarmInMicorSeconds(runtime.getContextProxy().context, cycle * 1000, ACTION_ALARM_BLE_SCAN);
         }
-        sb.append("setBleScanAlarm " + cycle+" seconds");
+        sb.append("setBleScanAlarm " + cycle + " seconds");
         locationClient.triggerBLEProcess();
         ICLogger.i(sb.toString());
-        if (Config.LOG_TOFILE)ICLogger.logToFile("alarmCycle",sb.toString());
+        if (Config.LOG_TOFILE) ICLogger.logToFile("alarmCycle", sb.toString());
     }
 
-    public void setEmegencyLocationSTOPAlarm(int delayTimeInMinutes){
-        StringBuilder sb=new StringBuilder();
-        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,delayTimeInMinutes, ACTION_SEND_EMEGENCY_LOCATION_STOP);
-        sb.append(" tEmegencyLocationSTOPAlarm  "+ACTION_SEND_EMEGENCY_LOCATION_STOP);
+    public void setEmegencyLocationSTOPAlarm(int delayTimeInMinutes) {
+        StringBuilder sb = new StringBuilder();
+        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context, delayTimeInMinutes, ACTION_SEND_EMEGENCY_LOCATION_STOP);
+        sb.append(" tEmegencyLocationSTOPAlarm  " + ACTION_SEND_EMEGENCY_LOCATION_STOP);
 //        ICLogger.i(sb.toString());
-        if (Config.LOG_TOFILE)ICLogger.logToFile("alarmCycle",sb.toString());
+        if (Config.LOG_TOFILE) ICLogger.logToFile("alarmCycle", sb.toString());
     }
+
     public void setLocationAlarm(int mod) {
 //        int mod=runtime.getLocationInstance().getWorkingMod();
-        StringBuilder sb=new StringBuilder();
-        int cycle=60;
-        switch(mod){
+        StringBuilder sb = new StringBuilder();
+        int cycle = 60;
+        switch (mod) {
             case EMERGNECY_MOD:
             case REALTIME_MOD:
-                cycle=60;
+                cycle = 60;
                 break;
             case NORMAL_MOD:
-                cycle=15*60;
+                cycle = 15 * 60;
                 break;
             case LOWPOWER_MOD:
-                cycle=60*60;
+                cycle = 60 * 60;
                 break;
             case CUSTOM_MOD:
             case CUSTOM_MOD8_GPS:
             case CUSTOM_MOD8_WIFI:
-                cycle=runtime.getLocationInstance().getLocation_cycle();
+                cycle = runtime.getLocationInstance().getLocation_cycle();
                 break;
         }
-        if(cycle == 0)
-        {
+        if (cycle == 0) {
             ICLogger.i("locationCycle == 0 stop Location !");
-            Config.noLocationCycle=true;
+            Config.noLocationCycle = true;
         }
-        if (Config.noLocationCycle==false)
-            AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context,cycle, ACTION_LOCATION_ALARM);
+        if (Config.noLocationCycle == false)
+            AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context, cycle, ACTION_LOCATION_ALARM);
         else
-            ICLogger.i("skip set LocationAlarm " );
-        sb.append(" setLocationAlarm  "+ACTION_LOCATION_ALARM+" mod "+mod+", cycle in Seconds "+cycle);
+            ICLogger.i("skip set LocationAlarm ");
+        sb.append(" setLocationAlarm  " + ACTION_LOCATION_ALARM + " mod " + mod + ", cycle in Seconds " + cycle);
         ICLogger.i(sb.toString());
-        if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(runtime.getCacheDir(),"alarmCycle",sb.toString());
+        if (Config.LOG_TOFILE)
+            FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", sb.toString());
 
 //        if (Runtime.practising==true) {
 //            ICLogger.i("自由锻炼中,跳过原有的循环定位!");
@@ -1441,63 +1456,66 @@ public class CoreService extends Service {
 
     }
 
-    public void setHeartAlarm(){
+    public void setHeartAlarm() {
 //        int mod=runtime.getLocationInstance().getWorkingMod();
-        StringBuilder sb=new StringBuilder();
-        int cycle=runtime.getHeartBeatCycle();
+        StringBuilder sb = new StringBuilder();
+        int cycle = runtime.getHeartBeatCycle();
 
         //心跳指令默认设置
-        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,cycle, HEART_ALARM);
-        sb.append(" setHeartAlarm  "+HEART_ALARM+", cycle "+cycle);
+        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context, cycle, HEART_ALARM);
+        sb.append(" setHeartAlarm  " + HEART_ALARM + ", cycle " + cycle);
 //        locationClient.triggerLocationProcess();
         ICLogger.i(sb.toString());
-        FileOutputUtil.fileOutput(runtime.getCacheDir(),"alarmCycle",sb.toString());
+        FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", sb.toString());
 
 //        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,1, HEART_ALARM);
     }
-    public void setAntiAlarm(){
+
+    public void setAntiAlarm() {
 //        int mod=runtime.getLocationInstance().getWorkingMod();
-        StringBuilder sb=new StringBuilder();
-        int cycle=runtime.anti_test_cycle;
-        if(cycle>1) {
+        StringBuilder sb = new StringBuilder();
+        int cycle = runtime.anti_test_cycle;
+        if (cycle > 1) {
             AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context, cycle, ANTI_ALARM);
         }
-        sb.append(" setHeartAlarm  "+ANTI_ALARM+", cycle "+cycle);
+        sb.append(" setHeartAlarm  " + ANTI_ALARM + ", cycle " + cycle);
 
         ICLogger.i(sb.toString());
-        FileOutputUtil.fileOutput(runtime.getCacheDir(),"alarmCycle",sb.toString());
+        FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", sb.toString());
     }
-    public void setTempAlarm(){
+
+    public void setTempAlarm() {
 //        int mod=runtime.getLocationInstance().getWorkingMod();
-        StringBuilder sb=new StringBuilder();
-        int cycle=runtime.temp_test_Cycle;
+        StringBuilder sb = new StringBuilder();
+        int cycle = runtime.temp_test_Cycle;
 
-        if(Config.noTempSensor) {
+        if (Config.noTempSensor) {
             ICLogger.i("setTempAlarm noTempSensor");
             return;
         }
-        if (cycle>1) {
+        if (cycle > 1) {
             AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context, cycle, TEMP_ALARM);
             sb.append(" setTempAlarm  " + TEMP_ALARM + ", cycle " + cycle);
-        }else {
-            sb.append(" setTempAlarm  " + TEMP_ALARM + ", cycle " + cycle+"<=1 skip!");
+        } else {
+            sb.append(" setTempAlarm  " + TEMP_ALARM + ", cycle " + cycle + "<=1 skip!");
         }
 //        locationClient.triggerLocationProcess();
         ICLogger.i(sb.toString());
-        FileOutputUtil.fileOutput(runtime.getCacheDir(),"alarmCycle",sb.toString());
+        FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", sb.toString());
 
-        if(runtime.check_stat_do_temp_test()) {
+        if (runtime.check_stat_do_temp_test()) {
             if (Runtime.practising == true) {
                 ICLogger.i("自由锻炼中,跳过原有的循环温度检测!");
             } else {
-                if(!server_starting)
+                if (!server_starting)
                     TemperatureUtil.doTempTestInThread();
             }
         }
 
     }
+
     public void setUpLocationDataAlarm(long paramLong) {
-        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
+        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
         Intent intent = new Intent(this, CoreService.class);
         intent.setAction(ACTION_ALARM_ADD_DATAPOINTS);
         PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, FLAG_UPDATE_CURRENT);
@@ -1507,11 +1525,13 @@ public class CoreService extends Service {
         stringBuilder.append("interval=");
         stringBuilder.append(paramLong);
         ICLogger.i(stringBuilder.toString());
-        AlarmHelper.setRealTimeAlarm( runtime.getContextProxy().context,(int)((System.currentTimeMillis() + paramLong)/1000),ACTION_ALARM_ADD_DATAPOINTS);
+        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context, (int) ((System.currentTimeMillis() + paramLong) / 1000), ACTION_ALARM_ADD_DATAPOINTS);
     }
 
     public static class InnerService extends Service {
-        public IBinder onBind(Intent param1Intent) { return null; }
+        public IBinder onBind(Intent param1Intent) {
+            return null;
+        }
 
         /*给 API >= 18 的平台上用的灰色保活手段*/
         public int onStartCommand(Intent param1Intent, int param1Int1, int param1Int2) {
@@ -1530,7 +1550,7 @@ public class CoreService extends Service {
         }
 
         public void handleMessage(Message param1Message) {
-            CoreService coreService = (CoreService)this.mReference.get();
+            CoreService coreService = (CoreService) this.mReference.get();
             if (coreService == null)
                 return;
             coreService.invokeHandlerServiceChain.processUserRequest(param1Message, coreService.connection, coreService.runtime);
@@ -1539,66 +1559,70 @@ public class CoreService extends Service {
 
     private static final String TAG = "ICSrv." + CoreService.class.getSimpleName();
 
-    private ScheduledThreadPoolExecutor mTimer_retry_connect=null;
+    private ScheduledThreadPoolExecutor mTimer_retry_connect = null;
+
+    private static int retry_connect_count = 0;  //当前重试次数
+    private static int retry_connect_max_times = 6; //最大重试次数 6次 , 即只重试2分钟,下一次重试将在下一个心跳包时进行。
+    private static int retry_cocnnect_cycle = 20; //重试间隔20秒
 
-    private static int retry_connect_count=0;  //当前重试次数
-    private static int retry_connect_max_times=6; //最大重试次数 6次 , 即只重试2分钟,下一次重试将在下一个心跳包时进行。
-    private static int retry_cocnnect_cycle=20; //重试间隔20秒
     private void log(String msg) {
-        ICLogger.log(TAG,msg);
+        ICLogger.log(TAG, msg);
     }
 
-    public static CoreService getInstance(){
+    public static CoreService getInstance() {
         return mProtocolServer;
     }
 
-    public void startConnectionRetryTimer(){
+    public void startConnectionRetryTimer() {
         //联网再重试连接服务器, 不能够联网的情况下不管是不是有sim卡,以及是否联网,都进行重试,以便处理下面情况:
         //1、sim卡接触不良,掉卡,可以尝试用此法恢复
         //2、网络信号不好,造成临时掉线,但是恢复慢或不恢复,可以用此法尝试恢复
 //        if (SimSignalUtil.checkNet(runtime.getContextProxy().context) ) {
-             stopConnectionRetryTimer();
-            if (mTimer_retry_connect == null) {
-                mTimer_retry_connect = new ScheduledThreadPoolExecutor(10);
-            }
-            //如果开始进行连接重
-                // {
-            // 试,证明网络断开的,那么KeepAlive也需要重连(心跳包)
-            retry_connect_count=0;
-            KeepAlive.isConnected = false;
-            if (mTimer_retry_connect != null) {
-                mTimer_retry_connect.remove(mReConnectSrvThread);
-                mTimer_retry_connect.scheduleAtFixedRate(mReConnectSrvThread, 5000, 20000, TimeUnit.MILLISECONDS); //每次都是断网才需要重连,delay 5秒重连,并且每20秒重试一次
-            }
+        stopConnectionRetryTimer();
+        if (mTimer_retry_connect == null) {
+            mTimer_retry_connect = new ScheduledThreadPoolExecutor(10);
+        }
+        //如果开始进行连接重
+        // {
+        // 试,证明网络断开的,那么KeepAlive也需要重连(心跳包)
+        retry_connect_count = 0;
+        KeepAlive.isConnected = false;
+        if (mTimer_retry_connect != null) {
+            mTimer_retry_connect.remove(mReConnectSrvThread);
+            mTimer_retry_connect.scheduleAtFixedRate(mReConnectSrvThread, 5000, 20000, TimeUnit.MILLISECONDS); //每次都是断网才需要重连,delay 5秒重连,并且每20秒重试一次
+        }
 //        }
     }
-    private ReConnectSrvThread mReConnectSrvThread=new ReConnectSrvThread();
-    private class ReConnectSrvThread implements  Runnable{
+
+    private ReConnectSrvThread mReConnectSrvThread = new ReConnectSrvThread();
+
+    private class ReConnectSrvThread implements Runnable {
         @Override
         public void run() {
             ReConnectToServer();
         }
     }
 
-    private static int no_network_Heartbeats_Count=0;
+    private static int no_network_Heartbeats_Count = 0;
 
-    public void ReConnectToServer(){
-        long timeSincelastReceive=0;
-        if(Runtime.lastLinkReceiveStamp>0)
-            timeSincelastReceive=(System.currentTimeMillis()-Runtime.lastLinkReceiveStamp)/1000;
-        if (timeSincelastReceive>0) ICLogger.i("距离上次从服务器收到数据,已经有 " + timeSincelastReceive + " 秒!");
-        if (SimSignalUtil.checkNet(runtime.getContextProxy().context) ) {
+    public void ReConnectToServer() {
+        long timeSincelastReceive = 0;
+        if (Runtime.lastLinkReceiveStamp > 0)
+            timeSincelastReceive = (System.currentTimeMillis() - Runtime.lastLinkReceiveStamp) / 1000;
+        if (timeSincelastReceive > 0)
+            ICLogger.i("距离上次从服务器收到数据,已经有 " + timeSincelastReceive + " 秒!");
+        if (SimSignalUtil.checkNet(runtime.getContextProxy().context)) {
             //里面如果连接成功 connectionOpen 会先发送 AP00 登录包 和发送AP03 心跳包 ,
             // isServerConnected 成功则停止重试, KeepAlive会检测AP03心跳包的成功与否。此处只管socket连接是否成功
             if (connection.isServerConnected()) {
                 ICLogger.i("retry  如果连接成功则停止重试!");
-                no_network_Heartbeats_Count=0;
+                no_network_Heartbeats_Count = 0;
                 stopConnectionRetryTimer();
-            }else {
+            } else {
                 if (retry_connect_count >= retry_connect_max_times) {
 
                     no_network_Heartbeats_Count++;
-                    ICLogger.i("retry " + retry_connect_count + " 次 >= " + retry_connect_max_times + " ,停止重试!等待下一次心跳再重试! 已经第"+no_network_Heartbeats_Count+"次心跳都没有连接服务器成功!");
+                    ICLogger.i("retry " + retry_connect_count + " 次 >= " + retry_connect_max_times + " ,停止重试!等待下一次心跳再重试! 已经第" + no_network_Heartbeats_Count + "次心跳都没有连接服务器成功!");
                     stopConnectionRetryTimer();
 
                 } else {
@@ -1612,32 +1636,34 @@ public class CoreService extends Service {
 
                 }
             }
-        }else{
+        } else {
             //没有网络就不用重新尝试连接网络了。网络连接后再重新尝试联网
-            ICLogger.i("retry "+no_network_Heartbeats_Count+" 没有网络就不用重新尝试连接网络了。网络连接后再重新尝试联网!");
+            ICLogger.i("retry " + no_network_Heartbeats_Count + " 没有网络就不用重新尝试连接网络了。网络连接后再重新尝试联网!");
             no_network_Heartbeats_Count++;
             stopConnectionRetryTimer();
         }
-        if( no_network_Heartbeats_Count >12){
-            ICLogger.i("当前第"+no_network_Heartbeats_Count+"次心跳都没有连接服务器成功 > 10 ,重置SIM卡尝试重新注册网络!");
+        if (no_network_Heartbeats_Count > 12) {
+            ICLogger.i("当前第" + no_network_Heartbeats_Count + "次心跳都没有连接服务器成功 > 10 ,重置SIM卡尝试重新注册网络!");
             SimSignalUtil.send_at_to_reset_simcard(runtime); //直接下此命令不能实现断网重连,所以干脆采用关闭网络再打开的方式。
-            SimSignalUtil.setAirMode(this,"OpenAirplane");
-            mHandler.postDelayed(reopenSim,5000); //5秒后重新链接服务器。
-            no_network_Heartbeats_Count=0;//重置Sim卡后重置计数。防止后面多次重置Sim卡。
+            SimSignalUtil.setAirMode(this, "OpenAirplane");
+            mHandler.postDelayed(reopenSim, 5000); //5秒后重新链接服务器。
+            no_network_Heartbeats_Count = 0;//重置Sim卡后重置计数。防止后面多次重置Sim卡。
         }
     }
-    private Runnable reopenSim =new Runnable(){
+
+    private Runnable reopenSim = new Runnable() {
         @Override
         public void run() {
-            if (CoreService.getInstance()!=null) {
+            if (CoreService.getInstance() != null) {
                 SimSignalUtil.setAirMode(CoreService.getInstance(), "CloseAirplane");
-             //   disconnect_server();
-              //  ReConnectToServer();
+                //   disconnect_server();
+                //  ReConnectToServer();
             }
         }
     };
-    public void stopConnectionRetryTimer(){
-        if (mTimer_retry_connect !=null){
+
+    public void stopConnectionRetryTimer() {
+        if (mTimer_retry_connect != null) {
             mTimer_retry_connect.shutdownNow();
 //            while(!mTimer_retry_connect.isTerminated())
 //            {
@@ -1653,13 +1679,11 @@ public class CoreService extends Service {
         }
     }
 
-    private boolean needLogin(){
+    private boolean needLogin() {
         return true;
     }
 
 
-
-
     @Override
     public void onDestroy() {
         super.onDestroy();
@@ -1677,7 +1701,7 @@ public class CoreService extends Service {
 
     }
 
-    public void disconnect_server(){
+    public void disconnect_server() {
         this.connection.close();
     }
 
index 5ae6f87..374b5e2 100644 (file)
@@ -1,25 +1,19 @@
 package com.enqualcomm.support;
 
-import android.app.Activity;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
-import android.content.ContentResolver;
 import android.content.Context;
-import android.content.ContextWrapper;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
 import android.os.Message;
 import android.os.SystemClock;
-import android.telephony.SmsManager;
 import android.telephony.SmsMessage;
 import android.text.TextUtils;
-import android.widget.Toast;
 
 import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.EventLooperHandlerThread;
@@ -31,7 +25,6 @@ import com.enqualcomm.support.service.Deliver;
 import com.enqualcomm.support.service.SmsDatabaseChaneObserver;
 import com.enqualcomm.support.utils.APNUtil;
 import com.enqualcomm.support.utils.CameraUtil;
-import com.enqualcomm.support.utils.CellInfoUtil;
 import com.enqualcomm.support.utils.ContextProxy;
 import com.enqualcomm.support.utils.DeviceInfoUtil;
 import com.enqualcomm.support.utils.ICAudioManager;
@@ -39,7 +32,6 @@ import com.enqualcomm.support.utils.ICHttpUtil;
 import com.enqualcomm.support.utils.ICLogger;
 import com.enqualcomm.support.utils.LanguageUtils;
 import com.enqualcomm.support.utils.SendEmail;
-import com.enqualcomm.support.utils.ServiceUtil;
 import com.enqualcomm.support.utils.SimSignalUtil;
 import com.enqualcomm.support.utils.TimeUtil;
 import com.enqualcomm.support.utils.Util;
@@ -52,7 +44,6 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.concurrent.TimeUnit;
 
 import chestnut.utils.PhoneUtils;
 
@@ -63,18 +54,14 @@ import static com.enqualcomm.support.Constants.ACTION_SMSCMD_Reply;
 import static com.enqualcomm.support.Constants.ACTION_SMSCMD_TEST;
 import static com.enqualcomm.support.Constants.ACTION_SMS_RECEIVED;
 import static com.enqualcomm.support.Constants.ACTION_START_FOTA_UPDATE;
-import static com.enqualcomm.support.Constants.DIALOG_ACTION;
 import static com.enqualcomm.support.Constants.KeyReplyData;
-import static com.enqualcomm.support.Constants.contact;
-import static com.enqualcomm.support.utils.DeviceInfoUtil.getDeviceVersion;
 import static com.enqualcomm.support.utils.SimSignalUtil.send_at_cmd;
 import static com.enqualcomm.support.utils.SimSignalUtil.send_at_setImei0;
-import static com.enqualcomm.support.utils.SimSignalUtil.send_at_setImei1;
 
 
-public class ICSmsManager  extends BroadcastReceiver {
+public class ICSmsManager extends BroadcastReceiver {
 
-    private static String cell_number_to_reply=""; //this number is use for ACTION_SMSCMD_Reply
+    private static String cell_number_to_reply = ""; //this number is use for ACTION_SMSCMD_Reply
 
     private static long preTimeMillis;
     private Context mContext = null;
@@ -82,60 +69,60 @@ public class ICSmsManager  extends BroadcastReceiver {
 
     Handler mHandler;
 
-    ReplayLocation replayLocation=new ReplayLocation();
-    private boolean needshowToast=false;
+    ReplayLocation replayLocation = new ReplayLocation();
+    private boolean needshowToast = false;
 
     @Override
     public void onReceive(Context context, Intent intent) {
 
-        if (CoreService.getInstance()==null) {
+        if (CoreService.getInstance() == null) {
             ICLogger.i("CoreService still not started , skip SMS cmd!");
             return;
         }
-        mContext=context;
-        runtime=CoreService.getInstance().runtime;
+        mContext = context;
+        runtime = CoreService.getInstance().runtime;
 
 
         String action = intent.getAction();
-        ICLogger.i(" onReceive Action "+action);
+        ICLogger.i(" onReceive Action " + action);
         if (ACTION_SMSCMD.equals(action)) {
             String cmd = intent.getStringExtra("smsCmd");
             handleSMS_CMD("", cmd);
-        }else if (ACTION_SMSCMD_Reply.equals(action)) {
+        } else if (ACTION_SMSCMD_Reply.equals(action)) {
             String replydata = intent.getStringExtra(KeyReplyData);
             sendSMS(cell_number_to_reply, replydata);
             cell_number_to_reply = "";
-        }else if (ACTION_SMSCMD_TEST.equals(action)){
+        } else if (ACTION_SMSCMD_TEST.equals(action)) {
             String cmd = intent.getStringExtra("cmd");
             String arg = intent.getStringExtra("arg1");
-            handle_test_cmd(cmd,arg);
-        }else if (ACTION_SMS_RECEIVED.equals(action)) {
+            handle_test_cmd(cmd, arg);
+        } else if (ACTION_SMS_RECEIVED.equals(action)) {
             long currenttime = System.currentTimeMillis();
 //            if (currenttime - ICSmsManager.preTimeMillis > 30000L) {
-                ICSmsManager.preTimeMillis = currenttime;
+            ICSmsManager.preTimeMillis = currenttime;
 //                (new Thread(new Runnable() {
 //                    public void run() {
-                        SystemClock.sleep(3000L);
-                        if (intent == null || intent.getAction() == null) return;
-
-                        //长短信会被分拆送来,因此可能会有多个PDU。Protocol Description Unit是短信的工业标准。 
-                        Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
-                        ICLogger.i("pdu number=" + pduArray.length);
-                        String message = "";
-                        String from = null;
-                        for (int i = 0; i < pduArray.length; i++) {
-                            SmsMessage sms = SmsMessage.createFromPdu((byte[]) pduArray[i]);//将PDU转换为SmsMessage格式
-                            ICLogger.i("From : " + sms.getDisplayOriginatingAddress());
-                            ICLogger.i("SMS : " + sms.getDisplayMessageBody());
-                            from = sms.getDisplayOriginatingAddress();
-                            message += sms.getDisplayMessageBody();
-                        }
-                        ICLogger.i("收到" + from + "短信:" + message);
+            SystemClock.sleep(3000L);
+            if (intent == null || intent.getAction() == null) return;
+
+            //长短信会被分拆送来,因此可能会有多个PDU。Protocol Description Unit是短信的工业标准。 
+            Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
+            ICLogger.i("pdu number=" + pduArray.length);
+            String message = "";
+            String from = null;
+            for (int i = 0; i < pduArray.length; i++) {
+                SmsMessage sms = SmsMessage.createFromPdu((byte[]) pduArray[i]);//将PDU转换为SmsMessage格式
+                ICLogger.i("From : " + sms.getDisplayOriginatingAddress());
+                ICLogger.i("SMS : " + sms.getDisplayMessageBody());
+                from = sms.getDisplayOriginatingAddress();
+                message += sms.getDisplayMessageBody();
+            }
+            ICLogger.i("收到" + from + "短信:" + message);
 //                         Toast.makeText(context, "收到" + from + "短信:" + message, Toast.LENGTH_LONG).show();
-                        if (handleSMS_CMD(from, message) == false) {
-                            //说明不是sms命令,提示短信接收。
-                            ContextProxy.sendMsgBroadcast(context, message, 1);
-                        }
+            if (handleSMS_CMD(from, message) == false) {
+                //说明不是sms命令,提示短信接收。
+                ContextProxy.sendMsgBroadcast(context, message, 1);
+            }
 //                    }
 //                })).start();
 //            }
@@ -148,23 +135,24 @@ public class ICSmsManager  extends BroadcastReceiver {
         @Override
         public void replyCallBack(String locationResponseUrl) {
 
-            LocationClient locationClient=LocationClient.getInstance();
-            if (locationClient!=null){
+            LocationClient locationClient = LocationClient.getInstance();
+            if (locationClient != null) {
                 locationClient.setLocationResponse(null);
             }
-            sendSMS(cell_number_to_reply,"http://maps.google.com/?q="+locationResponseUrl);
-            cell_number_to_reply="";
+            sendSMS(cell_number_to_reply, "http://maps.google.com/?q=" + locationResponseUrl);
+            cell_number_to_reply = "";
 
         }
     }
-    public ICSmsManager( Runtime _runtime) {
+
+    public ICSmsManager(Runtime _runtime) {
         this.runtime = _runtime;
         this.mContext = runtime.getContextProxy().context;
-        IntentFilter intentfilter=new IntentFilter();
+        IntentFilter intentfilter = new IntentFilter();
         intentfilter.addAction(ACTION_SMSCMD_Reply);
-        this.mContext.registerReceiver(this,intentfilter);
+        this.mContext.registerReceiver(this, intentfilter);
 //        registerSmsDatabaseChangeObserver(mContext);
-        mHandler=new Handler(EventLooperHandlerThread.makeLooper(ICSmsManager.class.getSimpleName()),new Handler.Callback() {
+        mHandler = new Handler(EventLooperHandlerThread.getInstance().makeLooper(), new Handler.Callback() {
             @Override
             public boolean handleMessage(Message message) {
                 switch (message.what) {
@@ -207,7 +195,7 @@ public class ICSmsManager  extends BroadcastReceiver {
                 }
                 return false;
             }
-        }       );
+        });
 
     }
 
@@ -215,21 +203,21 @@ public class ICSmsManager  extends BroadcastReceiver {
         android.telephony.SmsManager smsManager = android.telephony.SmsManager.getDefault();
         Iterator msgit = smsManager.divideMessage(msg).iterator();
 
-        while(msgit.hasNext()) {
-            String message= (String)msgit.next();
-            ICLogger.i("reply message to "+phonenumber+", "+message);
-            if (phonenumber!=null && !phonenumber.isEmpty()) {
+        while (msgit.hasNext()) {
+            String message = (String) msgit.next();
+            ICLogger.i("reply message to " + phonenumber + ", " + message);
+            if (phonenumber != null && !phonenumber.isEmpty()) {
                 smsManager.sendTextMessage(phonenumber, (String) null, message, (PendingIntent) null, (PendingIntent) null);
             }
         }
     }
 
-    private boolean isAdminNumber(String phoneNumb){
+    private boolean isAdminNumber(String phoneNumb) {
 
         return true;
     }
 
-    private void broadCastStartFotaUpdate(Context context){
+    private void broadCastStartFotaUpdate(Context context) {
 
         Intent intent = new Intent();
         intent.setAction(ACTION_START_FOTA_UPDATE);
@@ -257,25 +245,25 @@ public class ICSmsManager  extends BroadcastReceiver {
     //SW: L02_20200208_V1
 
 
-    public String RemoveEncrypedHeader(String sms){
-        String smsPWD=Config.getSMSPwd(mContext);
-        if(!smsPWD.equals("none")){
-            if (!sms.startsWith(smsPWD)){
+    public String RemoveEncrypedHeader(String sms) {
+        String smsPWD = Config.getSMSPwd(mContext);
+        if (!smsPWD.equals("none")) {
+            if (!sms.startsWith(smsPWD)) {
                 ICLogger.i("开头不是密码!");
-            }else{
+            } else {
                 //ICLogger.i("开头不是密码!");
                 return sms;
             }
-        }else{
+        } else {
             return sms;
         }
         return sms;
     }
 
     /*
-    *  return false表示不是命令, true表示是命令,且已经执行
-    * */
-    public boolean handleSMS_CMD(String phonenumber, String sms){
+     *  return false表示不是命令, true表示是命令,且已经执行
+     * */
+    public boolean handleSMS_CMD(String phonenumber, String sms) {
         if (isAdminNumber(phonenumber)) {
 
             String ENCRYPED_HEADER = Config.getSMSPwd(mContext);
@@ -285,32 +273,32 @@ public class ICSmsManager  extends BroadcastReceiver {
 
             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";
+            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 (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+"#";
+                        sms = ENCRYPED_HEADER + "#IP#=" + ServeriIp + ":" + ServerPort + "#";
                         ICLogger.i("收到客户自定义 服务器IP设置命令,转化为 #IP#命令!");
-                    }else{
-                        sendSMS(phonenumber, imeiend+" IMEI 校验错误!");
+                    } else {
+                        sendSMS(phonenumber, imeiend + " IMEI 校验错误!");
                         return true;
                     }
-                }else{
+                } else {
                     ICLogger.i(" 设置 Server IP 命令错误。");
-                    sendSMS(phonenumber, sms+" 格式错误!");
+                    sendSMS(phonenumber, sms + " 格式错误!");
                     return true;
                 }
             }
-            if (sms.startsWith(ENCRYPED_HEADER+"#apn#=") && sms.endsWith("#")) {
+            if (sms.startsWith(ENCRYPED_HEADER + "#apn#=") && sms.endsWith("#")) {
                 String[] tmp = sms.split("#");
                 if (tmp.length == 3) {
                     String[] apnvalues = tmp[2].replace("=", "").split(",");
@@ -343,10 +331,10 @@ public class ICSmsManager  extends BroadcastReceiver {
 
                             String apnstr = APNUtil.getCurrentAPN(mContext);
                             sendSMS(phonenumber, apnstr);
-                        }else  if (apnvalues[0].equals("check")) {
-                            String mcc=runtime.getLocationInstance().getMCC();
-                            String mnc=runtime.getLocationInstance().getMNC();
-                            String apnstr = APNUtil.checkAPN(mcc,mnc,mContext);
+                        } else if (apnvalues[0].equals("check")) {
+                            String mcc = runtime.getLocationInstance().getMCC();
+                            String mnc = runtime.getLocationInstance().getMNC();
+                            String apnstr = APNUtil.checkAPN(mcc, mnc, mContext);
                             sendSMS(phonenumber, apnstr);
                         } else {
                             sendSMS(phonenumber, "apn cmd format error!");
@@ -359,30 +347,30 @@ public class ICSmsManager  extends BroadcastReceiver {
                     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()+"%";
+            } 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#=")) {
+            } 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 {
+                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:")) {
+            } 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);
+                    send_at_setImei0(runtime, imei);
                     Config.setIMEI(mContext, imei);
                     runtime.setImeiAndCid(imei, "");
                     sendSMS(phonenumber, "set IMEI " + imei + " success !");
@@ -399,13 +387,13 @@ public class ICSmsManager  extends BroadcastReceiver {
                 } else {
                     sendSMS(phonenumber, "set IMEI " + imei + "  failed ! len!=15");
                 }
-            } else if ((sms.startsWith(ENCRYPED_HEADER+"#ip#=") || sms.startsWith(ENCRYPED_HEADER+"#host#=")) && sms.endsWith("#")) {
+            } 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());
+                        Config.setCustomServer(mContext, false, protocolAPIHelper.getDefaultServerIP(), protocolAPIHelper.getDefaultServerPort());
                         reply = "reset ServerIP to " + protocolAPIHelper.getDefaultServerIP() + ":" + protocolAPIHelper.getDefaultServerPort() + " success! ";
                         Config.loadServerSettings(runtime);
                         CoreService.getInstance().disconnect_server();
@@ -418,7 +406,7 @@ public class ICSmsManager  extends BroadcastReceiver {
                         if (ipstr.length == 2) {
                             String ip = ipstr[0];
                             int port = Integer.valueOf(ipstr[1].replace("#", ""));
-                            Config.setCustomServer(mContext,true,ip,port);
+                            Config.setCustomServer(mContext, true, ip, port);
                             reply = sms + " success! ";
                             Config.loadServerSettings(runtime);
                             CoreService.getInstance().disconnect_server();
@@ -429,7 +417,7 @@ public class ICSmsManager  extends BroadcastReceiver {
                             if (ipstr.length == 2) {
                                 String ip = ipstr[0];
                                 int port = Integer.valueOf(ipstr[1].replace("#", ""));
-                                Config.setCustomServer(mContext,true,ip,port);
+                                Config.setCustomServer(mContext, true, ip, port);
                                 reply = sms + " success! ";
                                 Config.loadServerSettings(runtime);
                                 CoreService.getInstance().disconnect_server();
@@ -443,7 +431,7 @@ public class ICSmsManager  extends BroadcastReceiver {
                     reply = sms + " falied! ";
                 }
                 sendSMS(phonenumber, reply);
-            } else if (sms.startsWith(ENCRYPED_HEADER+"#setlocation#=") && sms.endsWith("#")) {
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#setlocation#=") && sms.endsWith("#")) {
                 String tmp[] = sms.split("=");
                 if (tmp.length == 2) {
                     if (tmp[1].equals("reset#")) {
@@ -459,9 +447,9 @@ public class ICSmsManager  extends BroadcastReceiver {
                                 cycle = Integer.valueOf(t[1]);
                             } catch (Exception e) {
                                 e.printStackTrace();
-                                ICLogger.e(e.getMessage(),e);
+                                ICLogger.e(e.getMessage(), e);
                             }
-                            if ( mod > 0 && cycle >= 30) {
+                            if (mod > 0 && cycle >= 30) {
                                 switch (mod) {
                                     case ICLocation.NORMAL_MOD:
                                         cycle = 60 * 15;
@@ -502,7 +490,7 @@ public class ICSmsManager  extends BroadcastReceiver {
                     sendSMS(phonenumber, "setlocation format error!");
                 }
 
-            } else if (sms.startsWith(ENCRYPED_HEADER+"#skipmovecheck#=")) {
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#skipmovecheck#=")) {
                 String tmp[] = sms.split("=");
                 if (tmp.length == 2) {
                     if (tmp[1].equals("current")) {
@@ -519,51 +507,51 @@ public class ICSmsManager  extends BroadcastReceiver {
                 } else {
                     sendSMS(phonenumber, "skipmovecheck format error!");
                 }
-            }else if(sms.startsWith(ENCRYPED_HEADER+"#wifictl#=")){
+            } 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)+ "!");
+                        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)+ "!");
+                        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+"!");
+                        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() {
                                 @Override
                                 public void run() {
-                                    Deliver.connectToWifi(SSID,PWD,encyptType);
+                                    Deliver.connectToWifi(SSID, PWD, encyptType);
                                 }
                             }, 500);
-                        }else {
+                        } 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 {
+                        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 {
@@ -572,31 +560,31 @@ public class ICSmsManager  extends BroadcastReceiver {
                 } else {
                     sendSMS(phonenumber, "WiFi Control format error!");
                 }
-            }else if(sms.startsWith(ENCRYPED_HEADER+"#logctl#=")){
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#logctl#=")) {
 
-                needshowToast=sms.contains("SDLogInfo:");
+                needshowToast = sms.contains("SDLogInfo:");
 
                 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")) {
+                    } 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,")){
+                    } else if (tmp[1].startsWith("upload,")) {
 
                         String cmdl[] = tmp[1].split(",");
                         if (cmdl.length == 2) {
-                            String logfile=cmdl[1];
+                            String logfile = cmdl[1];
 
-                            if (!logfile.isEmpty()&& ( logfile.startsWith("SDLog:")||logfile.startsWith("SDLogInfo:"))){
+                            if (!logfile.isEmpty() && (logfile.startsWith("SDLog:") || logfile.startsWith("SDLogInfo:"))) {
 
                                 String sdfilelist[] = logfile.split(":");
-                                if (sdfilelist.length==2) {
-                                    String fileOrDir=sdfilelist[1];
+                                if (sdfilelist.length == 2) {
+                                    String fileOrDir = sdfilelist[1];
                                     mHandler.postDelayed(new Runnable() {
                                         @Override
                                         public void run() {
@@ -606,14 +594,14 @@ public class ICSmsManager  extends BroadcastReceiver {
                                                 serverurl = new URL(Util.getServerLogfilePath(Config.getFtpServer(mContext), TimeUtil.getSystemTime3(), logfile, runtime));
                                             } catch (MalformedURLException e) {
                                                 e.printStackTrace();
-                                                ICLogger.e(e.getMessage(),e);
+                                                ICLogger.e(e.getMessage(), e);
                                             }
-                                            if ( new File(filepath).exists()) {
+                                            if (new File(filepath).exists()) {
                                                 Util.getDBFile();
-                                                sendSMS(phonenumber,"start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");
+                                                sendSMS(phonenumber, "start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");
 
-                                                if (logfile.startsWith("SDLogInfo:")){
-                                                    Util.ShowToast(runtime,"start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");
+                                                if (logfile.startsWith("SDLogInfo:")) {
+                                                    Util.ShowToast(runtime, "start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");
                                                 }
                                                 String logtime = TimeUtil.getSystemTime3();
 
@@ -621,17 +609,17 @@ public class ICSmsManager  extends BroadcastReceiver {
                                                     if (ftpUtils.upload(serverurl, Config.getFtpUser(mContext), Config.getFtpPWD(mContext), new File(filepath))) {
                                                         sendSMS(phonenumber, "Upload " + filepath + " to " + Config.getFtpServer(mContext) + " success!");
 
-                                                        if (logfile.startsWith("SDLogInfo:")){
-                                                            Util.ShowToast(runtime,"Upload " + filepath + " to " + Config.getFtpServer(mContext) + " success!");
+                                                        if (logfile.startsWith("SDLogInfo:")) {
+                                                            Util.ShowToast(runtime, "Upload " + filepath + " to " + Config.getFtpServer(mContext) + " success!");
                                                         }
                                                     } else {
                                                         sendSMS(phonenumber, "Upload " + filepath + " to " + Config.getFtpServer(mContext) + " failed!");
-                                                        if (logfile.startsWith("SDLogInfo:")){
-                                                            Util.ShowToast(runtime,"Upload " + filepath + " to " + Config.getFtpServer(mContext) + " failed!");
+                                                        if (logfile.startsWith("SDLogInfo:")) {
+                                                            Util.ShowToast(runtime, "Upload " + filepath + " to " + Config.getFtpServer(mContext) + " failed!");
                                                         }
                                                     }
                                                 } else {
-                                                    if (ICHttpUtil.uploadFile(filepath, runtime, logtime,mHandler)) {
+                                                    if (ICHttpUtil.uploadFile(filepath, runtime, logtime, mHandler)) {
 //                                                        sendSMS(phonenumber, "Upload " + filepath + " to " + Config.getFtpServer(mContext) + " success!");
 //                                                        if (logfile.startsWith("SDLogInfo:")){
 //                                                            Util.ShowToast(runtime,"Upload " + filepath + " to " + Config.getFtpServer(mContext) + " success!");
@@ -645,33 +633,33 @@ public class ICSmsManager  extends BroadcastReceiver {
                                                 }
                                             } else {
                                                 sendSMS(phonenumber, filepath + " not exist !");
-                                                if (logfile.startsWith("SDLogInfo:")){
-                                                    Util.ShowToast(runtime,filepath + " not exist !");
+                                                if (logfile.startsWith("SDLogInfo:")) {
+                                                    Util.ShowToast(runtime, filepath + " not exist !");
                                                 }
                                             }
                                         }
                                     }, 500);
 
-                                }else{
-                                    sendSMS(phonenumber,  " SDLog format error !");
+                                } else {
+                                    sendSMS(phonenumber, " SDLog format error !");
                                 }
 
-                            }else{
+                            } else {
                                 mHandler.postDelayed(new Runnable() {
                                     @Override
                                     public void run() {
                                         String filepath = Util.getLogfilePath(runtime, logfile);
                                         URL serverurl = null;
                                         try {
-                                            serverurl = new URL(Util.getServerLogfilePath(Config.getFtpServer(mContext), TimeUtil.getSystemTime3(), logfile,runtime));
+                                            serverurl = new URL(Util.getServerLogfilePath(Config.getFtpServer(mContext), TimeUtil.getSystemTime3(), logfile, runtime));
                                         } catch (MalformedURLException e) {
                                             e.printStackTrace();
-                                            ICLogger.e(e.getMessage(),e);
+                                            ICLogger.e(e.getMessage(), e);
                                         }
                                         if (Util.LogfileExist(runtime, logfile)) {
                                             Util.getDBFile();
-                                            sendSMS(phonenumber, "start Upload " + logfile + " to " + Config.getFtpServer(mContext) +" ...");
-                                            String logtime=TimeUtil.getSystemTime3();
+                                            sendSMS(phonenumber, "start Upload " + logfile + " to " + Config.getFtpServer(mContext) + " ...");
+                                            String logtime = TimeUtil.getSystemTime3();
 
                                             if (upload_logs_via_ftp) {
                                                 if (ftpUtils.upload(serverurl, Config.getFtpUser(mContext), Config.getFtpPWD(mContext), new File(filepath))) {
@@ -679,8 +667,8 @@ public class ICSmsManager  extends BroadcastReceiver {
                                                 } else {
                                                     sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) + " failed!");
                                                 }
-                                            }else{
-                                                if (ICHttpUtil.uploadFile(filepath,runtime,logtime,mHandler)) {
+                                            } else {
+                                                if (ICHttpUtil.uploadFile(filepath, runtime, logtime, mHandler)) {
 //                                                    sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) + " success!");
                                                 } else {
 //                                                    sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) + " failed!");
@@ -696,41 +684,41 @@ public class ICSmsManager  extends BroadcastReceiver {
 
 //                            sendSMS(phonenumber, "upload FtpLogServer to " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));
 
-                        }else{
+                        } else {
                             sendSMS(phonenumber, "upload logfile format error!");
                         }
 
                     } 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));
+                            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, "set LogFtpServer format error! " + sms);
                         }
                     }
                 } else {
-                    sendSMS(phonenumber, "set LogFtp ctl format error! "+sms);
+                    sendSMS(phonenumber, "set LogFtp ctl format error! " + sms);
                 }
 
-            }else if (sms.startsWith(ENCRYPED_HEADER+"#TP#=")) {
+            } 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()){
+                        if (Util.is_FT6236U_upgrade_firmware_support()) {
                             Util.FT6236U_getVer();
-                            String ver=Util.FT6236U_getVer();
-                            sendSMS(phonenumber, " Current FT6236U Firmware Version is "+ver+"!");
-                        }else {
+                            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()){
+                        if (Util.is_FT6236U_upgrade_firmware_support()) {
                             Util.FT6236U_getVer();
-                            String ver=Util.FT6236U_getVer();
+                            String ver = Util.FT6236U_getVer();
                             if (ver.startsWith("A1")) {
                                 if (Util.FT6236U_upgrade_firmware()) {
                                     Util.FT6236U_getVer();
@@ -739,10 +727,10 @@ public class ICSmsManager  extends BroadcastReceiver {
                                 } else {
                                     sendSMS(phonenumber, " FT6236U Firmware upgrade failed !");
                                 }
-                            }else{
-                                sendSMS(phonenumber, " FT6236U current Firmware version is "+ver+"  , upgrade only support A1 to A3  !");
+                            } else {
+                                sendSMS(phonenumber, " FT6236U current Firmware version is " + ver + "  , upgrade only support A1 to A3  !");
                             }
-                        }else {
+                        } else {
                             sendSMS(phonenumber, " system Not Support FT6236U upgrade Firmware!");
                         }
                     } else {
@@ -751,138 +739,139 @@ public class ICSmsManager  extends BroadcastReceiver {
                 } else {
                     sendSMS(phonenumber, "TP cmd format error!");
                 }
-            }else if (sms.startsWith(ENCRYPED_HEADER+"#USB#=")) {
+            } 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]+"!");
+                    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{
+                    } else {
                         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();
+            } 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#")) {
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#FactoryResetCheckSim#")) {
                 sendSMS(phonenumber, "do FactoryResetCheckSim ok!");
                 CoreService.DevliverStringMessage("FactoryResetCheckSim");
-            }else if (sms.startsWith(ENCRYPED_HEADER+"#poweroffCheckSim#")) {
+            } 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#")) {
+            } 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#")) {
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#reboot#")) {
                 sendSMS(phonenumber, "do reboot ok!");
                 CoreService.DevliverStringMessage("Reboot");
-            }else if (sms.startsWith(ENCRYPED_HEADER+"#poweroff#")) {
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#poweroff#")) {
                 sendSMS(phonenumber, "do poweroff ok!");
                 CoreService.DevliverStringMessage("poweroff");
-            }else if (sms.startsWith(ENCRYPED_HEADER+"#packagevers#")) {
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#packagevers#")) {
                 sendSMS(phonenumber, DeviceInfoUtil.getPackageVersions(mContext));
-            }else if (sms.startsWith(ENCRYPED_HEADER+"#getWeather#")) {
+            } 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 + "#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.setClass(mContext, MainActivity.class);
                 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                 mContext.startActivity(intent);
-            } else if (sms.startsWith(ENCRYPED_HEADER+"#PW=")&& sms.endsWith("#")) {
+            } 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);
+                    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));
+                    } else {
+                        Config.setSMSPwd(mContext, tmp[1].replace("#", ""));
+                        sendSMS(phonenumber, "SET SMS PW ok " + Config.getSMSPwd(mContext));
                     }
                 } else {
                     sendSMS(phonenumber, "set SMSCMD PWD format error!");
                 }
-            } else if (sms.startsWith(ENCRYPED_HEADER+"#sos=")&& sms.endsWith("#")) {
+            } 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 str_sosNums = tmp[1].replace("#", "");
+                    String[] soslist = str_sosNums.split(";");
+                    if (soslist.length >= 1 && soslist.length <= 3) {
                         String phNum1 = soslist[0];
-                        String phNum2 ="";
+                        String phNum2 = "";
                         String phNum3 = "";
-                        if (soslist.length>1) phNum2=soslist[1];
-                        if (soslist.length>2) phNum3=soslist[2];
+                        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));
+                        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);
+                        runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
 
                         sendSMS(phonenumber, "set SOS number ok!");
 
-                    }else{
+                    } else {
                         sendSMS(phonenumber, "set SOS number format Error!");
                     }
 
                 } else {
                     sendSMS(phonenumber, "set SMSCMD PWD format error!");
                 }
-            } else if (sms.equals(ENCRYPED_HEADER+"#listen#")) {
+            } else if (sms.equals(ENCRYPED_HEADER + "#listen#")) {
                 sendSMS(phonenumber, "start listen !");
 //                CellInfoUtil.dialSilent(runtime.getContextProxy().context,phonenumber);
-                ICAudioManager.needMute=true;
+                ICAudioManager.needMute = true;
                 mHandler.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){
+                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("#")) {
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#setLogSrv#=") && sms.endsWith("#")) {
                 String tmp[] = sms.split("=");
                 if (tmp.length == 2) {
-                    String strtmp=tmp[1].replace("#","");
+                    String strtmp = tmp[1].replace("#", "");
 
-                    if (strtmp.contains("/")){
+                    if (strtmp.contains("/")) {
                         /* #setLogSrv#=http://icfota.snicker.com.cn:8089/UploadFile.jsp*/
-                        Config.setLogServerIP(mContext,strtmp,8089);
-                        sendSMS(phonenumber, "set setLogSrv to "+strtmp+"!");
-                    }else {
+                        Config.setLogServerIP(mContext, strtmp, 8089);
+                        sendSMS(phonenumber, "set setLogSrv to " + strtmp + "!");
+                    } else {
                         /* #setLogSrv#=icfota.snicker.com.cn:8089 */
-                         String[] ipstr = strtmp.split(":");
+                        String[] ipstr = strtmp.split(":");
                         if (ipstr.length == 2) {
                             String ip = ipstr[0];
                             int port = Integer.valueOf(ipstr[1].replace("#", ""));
-                            Config.setLogServerIP(mContext,ip,port);
-                            sendSMS(phonenumber, "set setLogSrv to "+strtmp+"!");
+                            Config.setLogServerIP(mContext, ip, port);
+                            sendSMS(phonenumber, "set setLogSrv to " + strtmp + "!");
                         } else {
                             sendSMS(phonenumber, " setLogSrv cmd Format error!");
                         }
@@ -891,50 +880,50 @@ public class ICSmsManager  extends BroadcastReceiver {
                 } else {
                     sendSMS(phonenumber, " setLogSrv cmd Format error!");
                 }
-            }else if (sms.startsWith(ENCRYPED_HEADER+"#setFotaSrv#=")&& sms.endsWith("#")) {
+            } 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+"!");
+                    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#")) {
+            } else if (sms.equals(ENCRYPED_HEADER + "#FotaUpdate#")) {
 
-                cell_number_to_reply=phonenumber;
+                cell_number_to_reply = phonenumber;
                 broadCastStartFotaUpdate(mContext);
                 sendSMS(phonenumber, "start fota update !");
-            } else if (sms.equals(ENCRYPED_HEADER+"#FotaUpdateWiFi#=")){
+            } 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);
+                    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);
+                        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("connect to Wifi SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + ", encryptType " + encyptType + "!");
                         sb.append(" And start to Update");
-                        cell_number_to_reply=phonenumber;
+                        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);
+                                Deliver.connectToWifi(SSID, PWD, encyptType);
                                 broadCastStartFotaUpdate(mContext);
                             }
                         }, 500);
-                    }else {
+                    } else {
                         sendSMS(phonenumber, "FotaUpdateWiFi Control format error!");
                     }
                 } else {
@@ -942,107 +931,103 @@ public class ICSmsManager  extends BroadcastReceiver {
                 }
 
 
-            }else if (sms.startsWith(ENCRYPED_HEADER+"#nolocationcycle#=")&& sms.endsWith("#")) {
+            } 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");
+                    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){
+                        LocationClient locationClient = LocationClient.getInstance();
+                        if (locationClient != null) {
                             ICLogger.i("triggerLocationProcess ");
                             locationClient.triggerLocationProcess();
                         }
-                    }else if (strtmp.equalsIgnoreCase("true")){
-                        Util.setSystemProperties("persist.sys.NoLocationCycle","true");
+                    } 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 {
+                    } else if (strtmp.equalsIgnoreCase("current")) {
+                        sendSMS(phonenumber, "current noLocationCycle " + Config.getNoLocationCycleFlag() + "!");
+                    } else {
                         sendSMS(phonenumber, " nolocationcycle cmd Format error!");
                     }
                 } else {
                     sendSMS(phonenumber, " nolocationcycle cmd Format error!");
                 }
-            }else if (sms.startsWith(ENCRYPED_HEADER+"#setprotocol#=")&& sms.endsWith("#")) {
+            } 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) {
+                    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.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{
+                        } else {
                             sendSMS(phonenumber, "current is Beehome Protocol!");
                         }
 
-                    }else if(strtmp.equalsIgnoreCase("jiai")){
-                        if(Config.protocol_no!=Config.PROTOCOL_JIAI) {
+                    } 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.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
-                        {
+                        } else {
                             sendSMS(phonenumber, "current is JiAi Protocol!");
                         }
-                    }else if(strtmp.equalsIgnoreCase("ic")){
-                        if(Config.protocol_no!=Config.PROTOCOL_IC) {
+                    } 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.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
-                        {
+                        } else {
                             sendSMS(phonenumber, "current is IC Protocol!");
                         }
-                    }else if(strtmp.equalsIgnoreCase("fzd")){
-                        if(Config.protocol_no!=Config.PROTOCOL_FZD) {
+                    } 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.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
-                        {
+                        } else {
                             sendSMS(phonenumber, "current is fzd Protocol!");
                         }
-                    }else if(strtmp.equalsIgnoreCase("mqtt")){
-                        if(Config.protocol_no!=Config.PROTOCOL_MQTT) {
+                    } 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.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
-                        {
+                        } else {
                             sendSMS(phonenumber, "current is mqtt Protocol!");
                         }
-                    }else if(TextUtils.isDigitsOnly(strtmp)) {
-                        int protocolno=Integer.parseInt(strtmp);
+                    } else if (TextUtils.isDigitsOnly(strtmp)) {
+                        int protocolno = Integer.parseInt(strtmp);
                         switch (protocolno) {
                             case 0:
                             case 1:
@@ -1052,31 +1037,30 @@ public class ICSmsManager  extends BroadcastReceiver {
                                 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.");
+                                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;
+                                break;
                             default:
                                 sendSMS(phonenumber, "setprotocol only support  Protocol 0/1/2/3/4 by now! ");
                                 break;
                         }
 
-                    }else{
+                    } else {
                         sendSMS(phonenumber, " only support protocol jiAi , ic , beehome , fzd , mqtt !");
                     }
                 } else {
                     sendSMS(phonenumber, " setprotocol cmd Format error!");
                 }
 
-            }else if(sms.startsWith(ENCRYPED_HEADER+"#maillog#=")){
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#maillog#=")) {
                 String tmp[] = sms.split("=");
                 if (tmp.length == 2) {
-                    String mailaddr=tmp[1];
-                    if (!mailaddr.contains("@"))
-                    {
+                    String mailaddr = tmp[1];
+                    if (!mailaddr.contains("@")) {
                         sendSMS(phonenumber, "mail address error !");
 
-                    }else {
+                    } else {
                         mHandler.postDelayed(new Runnable() {
                             @Override
                             public void run() {
@@ -1089,10 +1073,10 @@ public class ICSmsManager  extends BroadcastReceiver {
                                 if (new File(logfile).exists()) {
 
                                     sendSMS(phonenumber, "mail " + fileOrDir + " to " + mailaddr + " ...");
-                                    Util.ShowToast(runtime,"mail " + fileOrDir + " to " + mailaddr + " ...");
+                                    Util.ShowToast(runtime, "mail " + fileOrDir + " to " + mailaddr + " ...");
 
                                     String logtime = TimeUtil.getSystemTime3();
-                                    if (SendEmail.getInstance().sendLogViaMail(logfile,mailaddr, logtime)) {
+                                    if (SendEmail.getInstance().sendLogViaMail(logfile, mailaddr, logtime)) {
                                         sendSMS(phonenumber, "mail " + fileOrDir + " to " + mailaddr + " success!");
 //                                        Util.ShowToast(runtime,"mail " + fileOrDir + " to " + mailaddr + " success!");
                                     } else {
@@ -1109,33 +1093,32 @@ public class ICSmsManager  extends BroadcastReceiver {
                             }
 
 
-
                         }, 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 {
+                    sendSMS(phonenumber, "upload logfile format error!");
+                }
 
 
-            }else if(sms.startsWith(ENCRYPED_HEADER+"#capture#")) {
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#capture#")) {
 
                 mHandler.post(new Runnable() {
-                        @Override
-                        public void run() {
-                            (new CameraUtil(mContext)).getPictur("capture"+TimeUtil.getSystemTime3());
-                        }
-                    });
+                    @Override
+                    public void run() {
+                        (new CameraUtil(mContext)).getPictur("capture" + TimeUtil.getSystemTime3());
+                    }
+                });
 
-            }else if(sms.startsWith(ENCRYPED_HEADER+"#monitor#")) {
+            } else if (sms.startsWith(ENCRYPED_HEADER + "#monitor#")) {
 
                 mHandler.post(new Runnable() {
                     @Override
                     public void run() {
-                        CoreService.getInstance().DevliverStringMessage("StartMonitor","10");
+                        CoreService.getInstance().DevliverStringMessage("StartMonitor", "10");
                     }
                 });
 
@@ -1145,23 +1128,25 @@ public class ICSmsManager  extends BroadcastReceiver {
                  *   。。。。。
                  * 添加新命令道这里
                  */
-            }else {
+            } else {
                 return false;
             }
             return true;
-        }else{
+        } else {
             return false;
         }
     }
+
     public final Uri SMS_MESSAGE_URI = Uri.parse("content://sms");
     private SmsDatabaseChaneObserver mSmsDBChangeObserver;
+
     private void registerSmsDatabaseChangeObserver(Context contextWrapper) {
         //因为,某些机型修改rom导致没有getContentResolver
         try {
             mSmsDBChangeObserver = new SmsDatabaseChaneObserver(contextWrapper.getContentResolver(), mHandler);
             contextWrapper.getContentResolver().registerContentObserver(SMS_MESSAGE_URI, true, mSmsDBChangeObserver);
         } catch (Throwable e) {
-            ICLogger.e(e.getMessage(),e);
+            ICLogger.e(e.getMessage(), e);
         }
     }
 
@@ -1174,59 +1159,60 @@ public class ICSmsManager  extends BroadcastReceiver {
     }
 
 
-    private void handle_test_cmd(String cmd,String arg){
+    private void handle_test_cmd(String cmd, String arg) {
 
-        ICLogger.i("receive test Cmd "+cmd+" arg "+arg);
-        if(cmd.startsWith("testDialog,")) {
-            String list[]=cmd.split(",");
-            int msgtype=0;
+        ICLogger.i("receive test Cmd " + cmd + " arg " + arg);
+        if (cmd.startsWith("testDialog,")) {
+            String list[] = cmd.split(",");
+            int msgtype = 0;
             try {
                 msgtype = Integer.parseInt(list[1]);
-            }catch ( Exception e){}
-            if(CoreService.getInstance()!=null)
-            CoreService.getInstance().getRuntime().getContextProxy().sendMsgBroadcast(arg, msgtype);
-        }else if(cmd.startsWith("playnotifiy")) {
+            } catch (Exception e) {
+            }
+            if (CoreService.getInstance() != null)
+                CoreService.getInstance().getRuntime().getContextProxy().sendMsgBroadcast(arg, msgtype);
+        } else if (cmd.startsWith("playnotifiy")) {
 
             AudioService.getInstance().play(runtime.getContextProxy().context.getAssets(), "ring_msg.mp3");
             VibrateUtil.getInstance(runtime.getContextProxy().context).VibrateOn(true);
 
-        }else if(cmd.startsWith("DeliverSMS")) {
+        } else if (cmd.startsWith("DeliverSMS")) {
 
-           if(CoreService.getInstance()!=null){
-               Deliver.sendLocationMSG(protocolAPIHelper.getLBSLocationMSG(runtime));
-           }
+            if (CoreService.getInstance() != null) {
+                Deliver.sendLocationMSG(protocolAPIHelper.getLBSLocationMSG(runtime));
+            }
 
-        }else if(cmd.startsWith("resetsim")) {
+        } else if (cmd.startsWith("resetsim")) {
 
-            if(CoreService.getInstance()!=null){
+            if (CoreService.getInstance() != null) {
                 SimSignalUtil.send_at_to_reset_simcard(CoreService.getInstance().runtime);
             }
 
-        }else if(cmd.startsWith("airplane")) {
+        } else if (cmd.startsWith("airplane")) {
 
 
-            if(CoreService.getInstance()!=null){
+            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");
+                        SimSignalUtil.setAirMode(CoreService.getInstance(), "CloseAirplane");
                     }
-                },5000);
+                }, 5000);
             }
-        }else if(cmd.startsWith("testCMDRecords")) {
+        } else if (cmd.startsWith("testCMDRecords")) {
 
-            if(CoreService.getInstance()!=null){
-                StringMessage msg=protocolAPIHelper.getLBSLocationMSG(runtime);
+            if (CoreService.getInstance() != null) {
+                StringMessage msg = protocolAPIHelper.getLBSLocationMSG(runtime);
                 runtime.getDbHelper().insertCMDRecord(msg);
                 Deliver.dumpMessage(msg);
                 Util.mSleep(2000);
-                msg=protocolAPIHelper.getLBSLocationMSG(runtime);
+                msg = protocolAPIHelper.getLBSLocationMSG(runtime);
                 runtime.getDbHelper().insertCMDRecord(msg);
                 Deliver.dumpMessage(msg);
                 Util.mSleep(2000);
-                msg=protocolAPIHelper.getLBSLocationMSG(runtime);
+                msg = protocolAPIHelper.getLBSLocationMSG(runtime);
                 runtime.getDbHelper().insertCMDRecord(msg);
                 Deliver.dumpMessage(msg);
 
@@ -1258,23 +1244,21 @@ public class ICSmsManager  extends BroadcastReceiver {
 */
 
             }
-        }else if(cmd.startsWith("testBT1")) {
+        } else if (cmd.startsWith("testBT1")) {
 
-            if(CoreService.getInstance()!=null)
+            if (CoreService.getInstance() != null)
                 CoreService.getInstance().setBleScanAlarm(20);
 
 
+        } else if (cmd.startsWith("BPLA,")) {
 
-        }else if(cmd.startsWith("BPLA,")) {
-
-            String list[]=cmd.split(",");
-            if(list.length==2){
+            String list[] = cmd.split(",");
+            if (list.length == 2) {
 
-                LanguageUtils.changeLanguageByIndex(mContext,list[1]);
+                LanguageUtils.changeLanguageByIndex(mContext, list[1]);
             }
 
 
-
         }
     }
 }
\ No newline at end of file
index 900a3fc..bdcb663 100644 (file)
@@ -306,7 +306,7 @@ public class LocationClient {
             }
         });
 
-        mhandler = new Handler(EventLooperHandlerThread.makeLooper(LocationClient.class.getSimpleName()),locationCallback);
+        mhandler = new Handler(EventLooperHandlerThread.getInstance().makeLooper(), locationCallback);
         btHelper.setBLEScanTimeout(OneBLEScanTimeOUT);
         gLocationCline = this;
         //GPS 监听管理初始化
@@ -322,11 +322,9 @@ public class LocationClient {
     }
 
     public interface LocationResponseUrl {
-        abstract public void replyCallBack(String locationResponseUrl);
+        void replyCallBack(String locationResponseUrl);
     }
 
-    ;
-
     private void handler2GTo4G() {
         int networktype = this.mSignalUtil.getNetworkType();
         int singal = runtime.getSignalStrength();
@@ -573,7 +571,7 @@ public class LocationClient {
             return false;
         }
     };
-    Handler mhandler ;
+    Handler mhandler;
 
 
     boolean wifi_ok = false, gps_ok = false, lbs_ok = false, gps_nosignal = false;
index f9f601c..d44f80f 100644 (file)
 package com.enqualcomm.support;
 
-import android.content.Context;
 import android.location.Criteria;
-import android.location.GpsSatellite;
-import android.location.GpsStatus;
 import android.location.GpsStatus.NmeaListener;
-
 import android.location.Location;
 import android.location.LocationListener;
 import android.location.LocationManager;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.Message;
 import android.provider.Settings;
 
 import com.enqualcomm.support.bean.EventLooperHandlerThread;
 import com.enqualcomm.support.bean.ICLocation;
+import com.enqualcomm.support.bean.ICLocation.GPS_locationStatus;
 import com.enqualcomm.support.bean.Runtime;
-import com.enqualcomm.support.utils.FileOutputUtil;
 import com.enqualcomm.support.utils.ICLogger;
 import com.enqualcomm.support.utils.TimeUtil;
-import com.enqualcomm.support.bean.ICLocation.GPS_locationStatus;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
 
-import rx.Single;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.functions.Action1;
+import java.text.DecimalFormat;
 
 import static android.location.LocationManager.GPS_PROVIDER;
 
 public class NMEAListener implements NmeaListener, LocationListener {
-  private static boolean listening = false;
+    private static boolean listening = false;
 
-  public boolean isListening() {
-    return listening;
-  }
+    public boolean isListening() {
+        return listening;
+    }
 
-  private LocationManager locationManager;
-  private String locationInfo;
+    private LocationManager locationManager;
+    private String locationInfo;
 
-  private double longitude;
-  private double latitude;
+    private double longitude;
+    private double latitude;
 
-  private boolean noStop = false;
+    private boolean noStop = false;
 
 
-  private int SearchTimeout = 120;
-  private int noSignalCount = 0;
-  private int searchCout = 0;
-  private GPS_CURRENT_STATUS gpsMode;
-  int numberOfSatellites;
-  Runtime runtime;
+    private int SearchTimeout = 120;
+    private int noSignalCount = 0;
+    private int searchCout = 0;
+    private GPS_CURRENT_STATUS gpsMode;
+    int numberOfSatellites;
+    Runtime runtime;
 
-  private static int MaxFixedTimes = 3;
+    private static int MaxFixedTimes = 3;
 
-  private static int locationFixedCount = 0;
+    private static int locationFixedCount = 0;
 
 
-  private static location_callback mCallback = null;
+    private static location_callback mCallback = null;
 
-  public interface location_callback {
-    public void on_locating_changed(GPS_locationStatus gps_status);
-  }
+    public interface location_callback {
+        public void on_locating_changed(GPS_locationStatus gps_status);
+    }
 
-  public static void set_callback(location_callback callback) {
-    mCallback = callback;
-  }
+    public static void set_callback(location_callback callback) {
+        mCallback = callback;
+    }
 
-  private GPS_locationStatus gps_status = new GPS_locationStatus();
+    private GPS_locationStatus gps_status = new GPS_locationStatus();
 
-  public GPS_locationStatus get_gps_status() {
-    return gps_status;
-  }
+    public GPS_locationStatus get_gps_status() {
+        return gps_status;
+    }
 
 
-  public void setNoStop(boolean nostop) {
-    if (Config.noLocationCycle==false)
-      noStop = nostop;
-    else
-        ICLogger.i("skip setNoStop " + nostop);
-    ICLogger.i("setNoStop " + nostop);
-    if (noStop == false) {
-      switch (runtime.getLocationInstance().getWorkingMod()) {
-        case ICLocation.CUSTOM_MOD:
-        case ICLocation.CUSTOM_MOD8_GPS:
-        case ICLocation.EMERGNECY_MOD:
-        case ICLocation.REALTIME_MOD:
-          //GPS 定位模式不关闭GPS,防止 1分钟定位超时后,重新关闭开启GPS。
-          //不给GPS继续定位的机会,造成第一次定位困难!
-          break;
-        case ICLocation.LOWPOWER_MOD:
-        case ICLocation.NORMAL_MOD:
-        case ICLocation.CUSTOM_MOD8_WIFI:
-        default:
-          ICLogger.i("非GPS定位模式,关闭GPS");
-          //非GPS定位模式的话,需要关闭GPS。
-          stopListen();
-          break;
-      }
+    public void setNoStop(boolean nostop) {
+        if (Config.noLocationCycle == false)
+            noStop = nostop;
+        else
+            ICLogger.i("skip setNoStop " + nostop);
+        ICLogger.i("setNoStop " + nostop);
+        if (noStop == false) {
+            switch (runtime.getLocationInstance().getWorkingMod()) {
+                case ICLocation.CUSTOM_MOD:
+                case ICLocation.CUSTOM_MOD8_GPS:
+                case ICLocation.EMERGNECY_MOD:
+                case ICLocation.REALTIME_MOD:
+                    //GPS 定位模式不关闭GPS,防止 1分钟定位超时后,重新关闭开启GPS。
+                    //不给GPS继续定位的机会,造成第一次定位困难!
+                    break;
+                case ICLocation.LOWPOWER_MOD:
+                case ICLocation.NORMAL_MOD:
+                case ICLocation.CUSTOM_MOD8_WIFI:
+                default:
+                    ICLogger.i("非GPS定位模式,关闭GPS");
+                    //非GPS定位模式的话,需要关闭GPS。
+                    stopListen();
+                    break;
+            }
 
+        }
     }
-  }
 
-  public NMEAListener(LocationManager paramLocationManager, Runtime paramRuntime) {
-    this.locationManager = paramLocationManager;
-    this.runtime = paramRuntime;
+    public NMEAListener(LocationManager paramLocationManager, Runtime paramRuntime) {
+        this.locationManager = paramLocationManager;
+        this.runtime = paramRuntime;
 
-    temHandler=new Handler(EventLooperHandlerThread.makeLooper(NMEAListener.class.getSimpleName()),new Handler.Callback() {
-      @Override
-      public boolean handleMessage(Message message) {
+        temHandler = new Handler(EventLooperHandlerThread.getInstance().makeLooper(), message -> {
 
-        if (message.what == MSG_WHAT_GPS_TIMEOUT || message.what == MSG_WHAT_GPS_NOSTAR) {
-          //no start
-          //do nothing
+            if (message.what == MSG_WHAT_GPS_TIMEOUT || message.what == MSG_WHAT_GPS_NOSTAR) {
+                //no start
+                //do nothing
 
-        } else if (message.what == MSG_WHAT_GPS_FIXED) {
-          //fixed
-         /*
-        只有当前GPS已经定位,且location不为空才给 runtime赋值GPS坐标。
-        延迟三秒后才设置runtime的定位标志,以便稳定坐标值。
-         */
-          runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_FIXED);
+            } else if (message.what == MSG_WHAT_GPS_FIXED) {
+                //fixed
+                 /*
+                只有当前GPS已经定位,且location不为空才给 runtime赋值GPS坐标。
+                延迟三秒后才设置runtime的定位标志,以便稳定坐标值。
+                 */
+                runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_FIXED);
 
-        }
+            }
 
-        if (!noStop) {
-          ICLogger.i("handleMessage MSG_WHAT_GPS_TIMEOUT/ MSG_WHAT_GPS_NOSTAR/ MSG_WHAT_GPS_FIXED " + message.what);
+            if (!noStop) {
+                ICLogger.i("handleMessage MSG_WHAT_GPS_TIMEOUT/ MSG_WHAT_GPS_NOSTAR/ MSG_WHAT_GPS_FIXED " + message.what);
 
-          stopListen();
-        }
-        return true;
-      }
-    } );
-  }
+                stopListen();
+            }
+            return true;
+        });
+    }
 
-  static int satindex = 0;
+    static int satindex = 0;
 
-  public void onNmeaReceived(long paramLong, String nmeastr) {
+    public void onNmeaReceived(long paramLong, String nmeastr) {
 //    EqcAlgorithmNative.native_EqcAlgorithmMethod5(paramString);
 //    ICLogger.i("Nmea :"+nmeastr+" "+paramLong);
 
-    if (Config.LOG_TOFILE)
-      ICLogger.logToFile("Nmea", nmeastr);
-
-    if (nmeastr.startsWith("$RD_RSSI")) {
-        //每组NMEA数据的头,只适用于 SL8521E,9820E
-        gps_status.numSatelliteList.clear();
-        gps_status.search_time_cost = searchCout;
-        runtime.getLocationInstance().numSatelliteList.clear(); //清除 SNR >0的卫星
-        runtime.getLocationInstance().max3Satellite.clear(); //清除 最大3个星值
-    }
-
-    if (nmeastr.startsWith("$GPVTG")) {
-      //每组NMEA数据的尾,只适用于 SL8521E,9820E
-      searchCout++;
-      //最后一页,打印搜星情况,并作一些判断。
-      StringBuilder sb = new StringBuilder();
-      sb.append("搜索" + searchCout + "次,搜索到卫星个数" + gps_status.satlite_numbss + ", [SNR>0] =" + runtime.getLocationInstance().numSatelliteList.size());
-      sb.append(", Max 5 SNR [");
-      for (int i = 0; i < runtime.getLocationInstance().max3Satellite.size(); i++) {
-        sb.append(runtime.getLocationInstance().max3Satellite.get(i).getSnr() + ",");
-      }
-      sb.append("]");
-      if (Config.LOG_TOFILE)
-        ICLogger.logToFile( "GPS", sb.toString());
-
-      ICLogger.i(sb.toString());
-      // 卫星总数小于2 ,或者 snr小于20
-      if (runtime.getLocationInstance().numSatelliteList.size() < 3 && (runtime.getLocationInstance().max3Satellite.size() > 0 ? (runtime.getLocationInstance().max3Satellite.get(0).getSnr() < 20 ? true : false) : true)) {
-        noSignalCount++;
-      }else{
-        noSignalCount=0;//只要有一次满足有信号,则重新开始计数。
-      }
-
-
-      StringBuilder sb2 = new StringBuilder();
-      if (!noStop) {
-        if (searchCout > ICLocation.MAX_GPS_SEARCH_TIMEOUT) {
-          sb2.append(" 搜索" + searchCout + "次未定位,超过" + ICLocation.MAX_GPS_SEARCH_TIMEOUT + "限制退出GPS定位");
-
-          runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT);
-
-          stop(MSG_WHAT_GPS_TIMEOUT);
-        }
-        if (noSignalCount > ICLocation.MAX_GPS_NOSIGNAL_COUNT) {
-          sb2.append(" 搜索" + searchCout + "次,超过" + noSignalCount + "次没有收到星,退出GPS定位");
-          runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT);
-          stop(MSG_WHAT_GPS_NOSTAR);
+        if (Config.LOG_TOFILE)
+            ICLogger.logToFile("Nmea", nmeastr);
+
+        if (nmeastr.startsWith("$RD_RSSI")) {
+            //每组NMEA数据的头,只适用于 SL8521E,9820E
+            gps_status.numSatelliteList.clear();
+            gps_status.search_time_cost = searchCout;
+            runtime.getLocationInstance().numSatelliteList.clear(); //清除 SNR >0的卫星
+            runtime.getLocationInstance().max3Satellite.clear(); //清除 最大3个星值
         }
-      }
-      ICLogger.i(sb2.toString());
-      if (Config.LOG_TOFILE)
-        ICLogger.logToFile("GPS", sb2.toString());
 
-
-      if (mCallback != null)
-        mCallback.on_locating_changed(get_gps_status());
-    }
-    if (nmeastr.startsWith("$GPGLL,") ||nmeastr.startsWith("$GNGLL,")) {
-      String tmplist[] = nmeastr.split(",");
+        if (nmeastr.startsWith("$GPVTG")) {
+            //每组NMEA数据的尾,只适用于 SL8521E,9820E
+            searchCout++;
+            //最后一页,打印搜星情况,并作一些判断。
+            StringBuilder sb = new StringBuilder();
+            sb.append("搜索" + searchCout + "次,搜索到卫星个数" + gps_status.satlite_numbss + ", [SNR>0] =" + runtime.getLocationInstance().numSatelliteList.size());
+            sb.append(", Max 5 SNR [");
+            for (int i = 0; i < runtime.getLocationInstance().max3Satellite.size(); i++) {
+                sb.append(runtime.getLocationInstance().max3Satellite.get(i).getSnr() + ",");
+            }
+            sb.append("]");
+            if (Config.LOG_TOFILE)
+                ICLogger.logToFile("GPS", sb.toString());
+
+            ICLogger.i(sb.toString());
+            // 卫星总数小于2 ,或者 snr小于20
+            if (runtime.getLocationInstance().numSatelliteList.size() < 3 && (runtime.getLocationInstance().max3Satellite.size() > 0 ? (runtime.getLocationInstance().max3Satellite.get(0).getSnr() < 20 ? true : false) : true)) {
+                noSignalCount++;
+            } else {
+                noSignalCount = 0;//只要有一次满足有信号,则重新开始计数。
+            }
+
+
+            StringBuilder sb2 = new StringBuilder();
+            if (!noStop) {
+                if (searchCout > ICLocation.MAX_GPS_SEARCH_TIMEOUT) {
+                    sb2.append(" 搜索" + searchCout + "次未定位,超过" + ICLocation.MAX_GPS_SEARCH_TIMEOUT + "限制退出GPS定位");
+
+                    runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT);
+
+                    stop(MSG_WHAT_GPS_TIMEOUT);
+                }
+                if (noSignalCount > ICLocation.MAX_GPS_NOSIGNAL_COUNT) {
+                    sb2.append(" 搜索" + searchCout + "次,超过" + noSignalCount + "次没有收到星,退出GPS定位");
+                    runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT);
+                    stop(MSG_WHAT_GPS_NOSTAR);
+                }
+            }
+            ICLogger.i(sb2.toString());
+            if (Config.LOG_TOFILE)
+                ICLogger.logToFile("GPS", sb2.toString());
+
+
+            if (mCallback != null)
+                mCallback.on_locating_changed(get_gps_status());
+        }
+        if (nmeastr.startsWith("$GPGLL,") || nmeastr.startsWith("$GNGLL,")) {
+            String tmplist[] = nmeastr.split(",");
 //      GPGLL编辑
 //(地理定位信息)
 //      例:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D
@@ -213,12 +198,12 @@ public class NMEAListener implements NmeaListener, LocationListener {
 //      字段5:UTC时间,hhmmss.sss格式
 //      字段6:状态,A=定位,V=未定位
 //      字段7:校验值($与*之间的数异或后的值)
-      String Lat = tmplist[1];
-      String lon = tmplist[3];
-      String fixed = tmplist[6];
+            String Lat = tmplist[1];
+            String lon = tmplist[3];
+            String fixed = tmplist[6];
 //      ICLogger.i("GPGLL Lat="+Lat+",Lon="+lon+",fixed="+fixed);
 
-    } else if (nmeastr.startsWith("$GPRMC,")||nmeastr.startsWith("$GNRMC,")) {
+        } else if (nmeastr.startsWith("$GPRMC,") || nmeastr.startsWith("$GNRMC,")) {
 //      GPRMC编辑
 //(推荐定位信息数据格式)
 //      例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
@@ -236,22 +221,22 @@ public class NMEAListener implements NmeaListener, LocationListener {
 //      字段11:磁偏角方向,E=东W=西
 //      字段12:模式,A=自动,D=差分,E=估测,N=数据无效(3.0协议内容)
 //      字段13:校验值($与*之间的数异或后的值)
-      String tmplist[] = nmeastr.split(",");
-      String utctime = tmplist[1];
-      String Lat = tmplist[3];
-      String lon = tmplist[5];
-      String fixed = tmplist[2];
-      String speed = tmplist[7];
+            String tmplist[] = nmeastr.split(",");
+            String utctime = tmplist[1];
+            String Lat = tmplist[3];
+            String lon = tmplist[5];
+            String fixed = tmplist[2];
+            String speed = tmplist[7];
 //      ICLogger.i("GPRMC GPSTime="+utctime+",Lat="+Lat+",Lon="+lon+",fixed="+fixed+",speed="+speed);
 //      if (Config.LOG_TOFILE)
 //        FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "GPS", "GPRMC GPSTime="+utctime+",Lat="+Lat+",Lon="+lon+",fixed="+fixed+",speed="+speed);
-      if (fixed.trim().equals("A")) {
-        if (speed.trim().isEmpty()) speed = "0.0";
-        runtime.getLocationInstance().setSpeed(Float.valueOf(speed));
-      }
+            if (fixed.trim().equals("A")) {
+                if (speed.trim().isEmpty()) speed = "0.0";
+                runtime.getLocationInstance().setSpeed(Float.valueOf(speed));
+            }
 
 
-    } else if (nmeastr.startsWith("$GPGSV,")||nmeastr.startsWith("$GLGSV,")||nmeastr.startsWith("$GAGSV,")||nmeastr.startsWith("$GBGSV,")||nmeastr.startsWith("$BDGSV,")) {
+        } else if (nmeastr.startsWith("$GPGSV,") || nmeastr.startsWith("$GLGSV,") || nmeastr.startsWith("$GAGSV,") || nmeastr.startsWith("$GBGSV,") || nmeastr.startsWith("$BDGSV,")) {
 
 //    GPGSV编辑
 //            (可见卫星信息)
@@ -274,64 +259,64 @@ public class NMEAListener implements NmeaListener, LocationListener {
 ////    字段15:信噪比(00-99)dbHz
 //    字段16:校验值($与*之间的数异或后的值)
 
-      String tmplist[] = nmeastr.split(",");
-      int maxPageCount = 0;
-      int currentPage = 0;
-      int SatlitesCount = 0;
-
-      try {
-        maxPageCount = Integer.valueOf(tmplist[1]);
-      } catch (Exception e) {
-      }
-      try {
-        currentPage = Integer.valueOf(tmplist[2]);
-      } catch (Exception e) {
-      }
-      try {
-        SatlitesCount = Integer.valueOf(tmplist[3]);
-      } catch (Exception e) {
-      }
-      if (maxPageCount > 0 && currentPage == 1) {
-        //第一页把数组初始化一遍。
-        satindex = 0;
-        gps_status.satlite_numbss = SatlitesCount;
-      }
-      int satcount = (tmplist.length - 4) / 4;
+            String tmplist[] = nmeastr.split(",");
+            int maxPageCount = 0;
+            int currentPage = 0;
+            int SatlitesCount = 0;
+
+            try {
+                maxPageCount = Integer.valueOf(tmplist[1]);
+            } catch (Exception e) {
+            }
+            try {
+                currentPage = Integer.valueOf(tmplist[2]);
+            } catch (Exception e) {
+            }
+            try {
+                SatlitesCount = Integer.valueOf(tmplist[3]);
+            } catch (Exception e) {
+            }
+            if (maxPageCount > 0 && currentPage == 1) {
+                //第一页把数组初始化一遍。
+                satindex = 0;
+                gps_status.satlite_numbss = SatlitesCount;
+            }
+            int satcount = (tmplist.length - 4) / 4;
 //      ICLogger.i("Nmea :"+nmeastr+" "+satcount);
-      runtime.getLocationInstance().set_adding_satlite_flag(true);
-      for (int i = 0; i < satcount; i++) {
-        satindex++;
-        String prn = tmplist[i * 4 + 4];
-        String snr = tmplist[i * 4 + 4 + 3];
-        if (snr.contains("*")) {
-          snr = snr.substring(0, snr.indexOf("*"));
-        }
-        if (snr.trim().isEmpty()) {
-          snr = "0";
-        }
+            runtime.getLocationInstance().set_adding_satlite_flag(true);
+            for (int i = 0; i < satcount; i++) {
+                satindex++;
+                String prn = tmplist[i * 4 + 4];
+                String snr = tmplist[i * 4 + 4 + 3];
+                if (snr.contains("*")) {
+                    snr = snr.substring(0, snr.indexOf("*"));
+                }
+                if (snr.trim().isEmpty()) {
+                    snr = "0";
+                }
 //        ICLogger.i("Sat=" + satindex + ",prn=" + prn + ",snr=" + snr);
 
-        int intprn = 0;
-        try {
-          intprn = Integer.valueOf(prn);
-        } catch (Exception e) {
-        }
-        float floatsnr = 0;
-        try {
-          floatsnr = Float.valueOf(snr);
-        } catch (Exception e) {
-        }
-        if (floatsnr > 0) {
-          //排序取得最大3个SNR
-          get3MaxSnrSatellite(new ICLocation.GpsSatellitePriv(intprn, floatsnr));
-          runtime.getLocationInstance().numSatelliteList.add(new ICLocation.GpsSatellitePriv(intprn, floatsnr));
-          gps_status.numSatelliteList.add(new ICLocation.GpsSatellitePriv(intprn, floatsnr));
-        }
-      }
-
-      runtime.getLocationInstance().set_adding_satlite_flag(false);
-
-    } else if (nmeastr.startsWith("$GPGGA,")||nmeastr.startsWith("$GNGGA,")) {
+                int intprn = 0;
+                try {
+                    intprn = Integer.valueOf(prn);
+                } catch (Exception e) {
+                }
+                float floatsnr = 0;
+                try {
+                    floatsnr = Float.valueOf(snr);
+                } catch (Exception e) {
+                }
+                if (floatsnr > 0) {
+                    //排序取得最大3个SNR
+                    get3MaxSnrSatellite(new ICLocation.GpsSatellitePriv(intprn, floatsnr));
+                    runtime.getLocationInstance().numSatelliteList.add(new ICLocation.GpsSatellitePriv(intprn, floatsnr));
+                    gps_status.numSatelliteList.add(new ICLocation.GpsSatellitePriv(intprn, floatsnr));
+                }
+            }
+
+            runtime.getLocationInstance().set_adding_satlite_flag(false);
+
+        } else if (nmeastr.startsWith("$GPGGA,") || nmeastr.startsWith("$GNGGA,")) {
 
 //    GPGGA编辑
 //(定位信息)
@@ -353,84 +338,85 @@ public class NMEAListener implements NmeaListener, LocationListener {
 //    字段14:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)
 //    字段15:校验值($与*之间的数异或后的值)
 
-      String tmplist[] = nmeastr.split(",");
-      String utctime = tmplist[1];
-      String Lat = tmplist[2];
-      String lon = tmplist[4];
-      String latname= tmplist[3];
-      String lonname=tmplist[5];
-      String fixed = tmplist[6];
-      String usedStarts = tmplist[7];
-      String hdop = tmplist[8];
-
-
-      if ((fixed.trim().equals("1")) || (fixed.trim().equals("2")) || (fixed.trim().equals("6"))) {
-
-
-        // 转换GPS坐标为度,以便在各种应用中可以方便查找。
-        try {
-          latitude = Double.valueOf(Lat);
-          longitude = Double.valueOf(lon);
-        } catch (Exception e){}
-        // 转换单位,从分转换到度
-
-        double intdu = (int) (longitude / 100f); //小数转换到分为单位
-        double du = (longitude - intdu * 100) / 60f;
-        double last = intdu + du;
-        longitude = last;
-        intdu = (int) (latitude / 100f); //小数转换到分为单位
-        du = (latitude - intdu * 100) / 60f;
-        last = intdu + du;
-        latitude = last;
-
-        // 经纬度 保留4位小数点
-        DecimalFormat df = new DecimalFormat("#.0000000");
-        String strLatitude = df.format(latitude);
-        String strLongitude = df.format(longitude);
-
-        //定位
-        StringBuilder sb = new StringBuilder();
-        sb.append("GPGGA, location time= " + TimeUtil.getLocalTime() + ", FixedCount=" + locationFixedCount + ", GPSTime=" + utctime + ", Lat("+latname+")=" + Lat + " (" + strLatitude + "), Lon("+lonname+")=" + lon + " (" + strLongitude + "), fixed=" + fixed + ", hdop=" + hdop + ", usedStarts=" + usedStarts);
-        ICLogger.i(sb.toString());
-        if (Config.LOG_TOFILE)
-          ICLogger.logToFile( "GPS", sb.toString());
-        //定位了,
-        if (hdop != null && hdop.trim().length() > 0 && Float.valueOf(hdop) < ICLocation.MAX_HDOP) {
-          locationFixedCount++;
-        } else {
-          ICLogger.i("HDOP is larger than " + ICLocation.MAX_HDOP + " , skip this location!");
-          if (Config.LOG_TOFILE)
-            ICLogger.logToFile( "GPS", "HDOP is larger than " + ICLocation.MAX_HDOP + " , skip this location!");
-        }
-        if (locationFixedCount > MaxFixedTimes) {
+            String tmplist[] = nmeastr.split(",");
+            String utctime = tmplist[1];
+            String Lat = tmplist[2];
+            String lon = tmplist[4];
+            String latname = tmplist[3];
+            String lonname = tmplist[5];
+            String fixed = tmplist[6];
+            String usedStarts = tmplist[7];
+            String hdop = tmplist[8];
+
+
+            if ((fixed.trim().equals("1")) || (fixed.trim().equals("2")) || (fixed.trim().equals("6"))) {
+
+
+                // 转换GPS坐标为度,以便在各种应用中可以方便查找。
+                try {
+                    latitude = Double.valueOf(Lat);
+                    longitude = Double.valueOf(lon);
+                } catch (Exception e) {
+                }
+                // 转换单位,从分转换到度
+
+                double intdu = (int) (longitude / 100f); //小数转换到分为单位
+                double du = (longitude - intdu * 100) / 60f;
+                double last = intdu + du;
+                longitude = last;
+                intdu = (int) (latitude / 100f); //小数转换到分为单位
+                du = (latitude - intdu * 100) / 60f;
+                last = intdu + du;
+                latitude = last;
+
+                // 经纬度 保留4位小数点
+                DecimalFormat df = new DecimalFormat("#.0000000");
+                String strLatitude = df.format(latitude);
+                String strLongitude = df.format(longitude);
+
+                //定位
+                StringBuilder sb = new StringBuilder();
+                sb.append("GPGGA, location time= " + TimeUtil.getLocalTime() + ", FixedCount=" + locationFixedCount + ", GPSTime=" + utctime + ", Lat(" + latname + ")=" + Lat + " (" + strLatitude + "), Lon(" + lonname + ")=" + lon + " (" + strLongitude + "), fixed=" + fixed + ", hdop=" + hdop + ", usedStarts=" + usedStarts);
+                ICLogger.i(sb.toString());
+                if (Config.LOG_TOFILE)
+                    ICLogger.logToFile("GPS", sb.toString());
+                //定位了,
+                if (hdop != null && hdop.trim().length() > 0 && Float.valueOf(hdop) < ICLocation.MAX_HDOP) {
+                    locationFixedCount++;
+                } else {
+                    ICLogger.i("HDOP is larger than " + ICLocation.MAX_HDOP + " , skip this location!");
+                    if (Config.LOG_TOFILE)
+                        ICLogger.logToFile("GPS", "HDOP is larger than " + ICLocation.MAX_HDOP + " , skip this location!");
+                }
+                if (locationFixedCount > MaxFixedTimes) {
                /*
                 只有当前GPS已经定位,且location不为空才给 runtime赋值GPS坐标。
                 延迟MaxFixedTimes秒后才设置runtime的定位标志,以便稳定坐标值。
               */
-          runtime.getLocationInstance().setLocation(Lat, lon);
-          runtime.getLocationInstance().setLocationGPS(strLatitude, strLongitude);
-          runtime.getLocationInstance().setLocationlatlonName(latname,lonname);
-          runtime.getLocationInstance().setUsedStarts(Integer.valueOf(usedStarts.trim()));
-          runtime.getLocationInstance().setHod(Float.valueOf(hdop.trim()));
-          runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_FIXED);
-          ICLogger.i("定位" + locationFixedCount + "次 > " + MaxFixedTimes + ", set LOCATION_FIXED ");
-          if (Config.LOG_TOFILE)
-            ICLogger.logToFile("GPS", "定位" + locationFixedCount + "次 > " + MaxFixedTimes + ", set LOCATION_FIXED ");
-          if (!noStop) {
-            stopListen();
-          }
-        }
-        gps_status.locating_status = 1; //fixed
-      } else {
-        gps_status.locating_status = 0; //notfixed
-      }
-      try {
-        gps_status.hdop = Float.valueOf(hdop.trim());
-        gps_status.used_gps_numbs = Integer.valueOf(usedStarts.trim());
-      } catch (Exception e) {
-      }
-
-    } else if (nmeastr.startsWith("$GPGSA,")||nmeastr.startsWith("$GNGSA,")) {
+                    runtime.getLocationInstance().setLocation(Lat, lon);
+                    runtime.getLocationInstance().setLocationGPS(strLatitude, strLongitude);
+                    runtime.getLocationInstance().setLocationlatlonName(latname, lonname);
+                    runtime.getLocationInstance().setUsedStarts(Integer.valueOf(usedStarts.trim()));
+                    runtime.getLocationInstance().setHod(Float.valueOf(hdop.trim()));
+                    runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_FIXED);
+                    ICLogger.i("定位" + locationFixedCount + "次 > " + MaxFixedTimes + ", set LOCATION_FIXED ");
+                    if (Config.LOG_TOFILE)
+                        ICLogger.logToFile("GPS", "定位" + locationFixedCount + "次 > " + MaxFixedTimes + ", set LOCATION_FIXED ");
+                    if (!noStop) {
+                        stopListen();
+                    }
+                }
+                gps_status.locating_status = 1; //fixed
+            } else {
+                gps_status.locating_status = 0; //notfixed
+            }
+            try {
+                gps_status.hdop = Float.valueOf(hdop.trim());
+                gps_status.used_gps_numbs = Integer.valueOf(usedStarts.trim());
+            } catch (Exception e) {
+            }
+
+        } else if (nmeastr.startsWith("$GPGSA,") || nmeastr.startsWith("$GNGSA,")) {
 
 //    GPGSA编辑
 //( 当前卫星信息)
@@ -463,91 +449,91 @@ public class NMEAListener implements NmeaListener, LocationListener {
 //        //定位
 //        ICLogger.i("GPGSA fixed="+fixed+",hdop="+hdop);
 //      }
+        }
     }
-  }
 
-  public void onProviderDisabled(String paramString) {
-  }
+    public void onProviderDisabled(String paramString) {
+    }
 
-  public void onProviderEnabled(String paramString) {
-  }
+    public void onProviderEnabled(String paramString) {
+    }
 
-  @Override
-  public void onLocationChanged(Location location) {
+    @Override
+    public void onLocationChanged(Location location) {
 
-  }
+    }
 
-  public void onStatusChanged(String paramString, int paramInt, Bundle paramBundle) {
-  }
+    public void onStatusChanged(String paramString, int paramInt, Bundle paramBundle) {
+    }
 
-  public boolean gpsColdStart() {
+    public boolean gpsColdStart() {
 //冷启动
-    Bundle bundle = null;
-    locationManager.sendExtraCommand("gps", "force_xtra_injection", bundle); //command
-    locationManager.sendExtraCommand("gps", "force_time_injection", bundle);
-    boolean b1 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundle);
-    return b1;
+        Bundle bundle = null;
+        locationManager.sendExtraCommand("gps", "force_xtra_injection", bundle); //command
+        locationManager.sendExtraCommand("gps", "force_time_injection", bundle);
+        boolean b1 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundle);
+        return b1;
 
-  }
+    }
 
-  public boolean gpsWormStart() {
+    public boolean gpsWormStart() {
 
 //温启动
-    Bundle bundleWarm = new Bundle();
-    bundleWarm.putBoolean("ephemeris", true);
-    locationManager.sendExtraCommand("gps", "force_xtra_injection", bundleWarm); //command
-    locationManager.sendExtraCommand("gps", "force_time_injection", bundleWarm);
-    boolean b2 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundleWarm);
-    return b2;
-  }
-
-  public boolean gpsHotStart() {
+        Bundle bundleWarm = new Bundle();
+        bundleWarm.putBoolean("ephemeris", true);
+        locationManager.sendExtraCommand("gps", "force_xtra_injection", bundleWarm); //command
+        locationManager.sendExtraCommand("gps", "force_time_injection", bundleWarm);
+        boolean b2 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundleWarm);
+        return b2;
+    }
+
+    public boolean gpsHotStart() {
 //热启动
-    Bundle bundleHot = new Bundle();
-    bundleHot.putBoolean("almanac", true);
-    locationManager.sendExtraCommand("gps", "force_xtra_injection", bundleHot); //command
-    locationManager.sendExtraCommand("gps", "force_time_injection", bundleHot);
-    boolean b3 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundleHot);
-    return b3;
-  }
+        Bundle bundleHot = new Bundle();
+        bundleHot.putBoolean("almanac", true);
+        locationManager.sendExtraCommand("gps", "force_xtra_injection", bundleHot); //command
+        locationManager.sendExtraCommand("gps", "force_time_injection", bundleHot);
+        boolean b3 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundleHot);
+        return b3;
+    }
 
 
-  private final int MSG_WHAT_GPS_FIXED = 300;
-  private final int MSG_WHAT_GPS_TIMEOUT = 100;
-  private final int MSG_WHAT_GPS_NOSTAR = 200;
-  private final int MSG_WHAT_GPS_FIXED_NO_STOP = 400;
+    private final int MSG_WHAT_GPS_FIXED = 300;
+    private final int MSG_WHAT_GPS_TIMEOUT = 100;
+    private final int MSG_WHAT_GPS_NOSTAR = 200;
+    private final int MSG_WHAT_GPS_FIXED_NO_STOP = 400;
 
-  Handler temHandler;
+    Handler temHandler;
 
-  private void get3MaxSnrSatellite(ICLocation.GpsSatellitePriv gst) {
+    private void get3MaxSnrSatellite(ICLocation.GpsSatellitePriv gst) {
 
-    float snr = gst.getSnr();
-    for (int k = 0; k < runtime.getLocationInstance().max3Satellite.size(); k++) {
-      if (runtime.getLocationInstance().max3Satellite.get(k).getPrn() == gst.getPrn())
-        runtime.getLocationInstance().max3Satellite.remove(k);
-    }
-    runtime.getLocationInstance().max3Satellite.add(gst);//先添加进来。
-
-    //从大到小排序
-    for (int i = 0; i < runtime.getLocationInstance().max3Satellite.size(); i++) {
-      for (int j = i; j < runtime.getLocationInstance().max3Satellite.size(); j++) {
-        if (runtime.getLocationInstance().max3Satellite.get(i).getSnr() < runtime.getLocationInstance().max3Satellite.get(j).getSnr()) {
-          ICLocation.GpsSatellitePriv ts = runtime.getLocationInstance().max3Satellite.get(j);
-          runtime.getLocationInstance().max3Satellite.remove(j);
-          runtime.getLocationInstance().max3Satellite.add(i, ts);//大的放前面
+        float snr = gst.getSnr();
+        for (int k = 0; k < runtime.getLocationInstance().max3Satellite.size(); k++) {
+            if (runtime.getLocationInstance().max3Satellite.get(k).getPrn() == gst.getPrn())
+                runtime.getLocationInstance().max3Satellite.remove(k);
+        }
+        runtime.getLocationInstance().max3Satellite.add(gst);//先添加进来。
+
+        //从大到小排序
+        for (int i = 0; i < runtime.getLocationInstance().max3Satellite.size(); i++) {
+            for (int j = i; j < runtime.getLocationInstance().max3Satellite.size(); j++) {
+                if (runtime.getLocationInstance().max3Satellite.get(i).getSnr() < runtime.getLocationInstance().max3Satellite.get(j).getSnr()) {
+                    ICLocation.GpsSatellitePriv ts = runtime.getLocationInstance().max3Satellite.get(j);
+                    runtime.getLocationInstance().max3Satellite.remove(j);
+                    runtime.getLocationInstance().max3Satellite.add(i, ts);//大的放前面
+                }
+            }
+        }
+        if (runtime.getLocationInstance().max3Satellite.size() > 5) { //超过三个,谁小就删掉
+            runtime.getLocationInstance().max3Satellite.remove(5);
         }
-      }
-    }
-    if (runtime.getLocationInstance().max3Satellite.size() > 5) { //超过三个,谁小就删掉
-      runtime.getLocationInstance().max3Satellite.remove(5);
-    }
 
-  }
+    }
 
-  //停止定位
-  private void stop(int id) {
+    //停止定位
+    private void stop(int id) {
 
-    // 经纬度 保留6位小数点
+        // 经纬度 保留6位小数点
 //    DecimalFormat df = new DecimalFormat("#.000000");
 //    String strLatitude = df.format(latitude);
 //    String strLongitude = df.format(longitude);
@@ -555,86 +541,88 @@ public class NMEAListener implements NmeaListener, LocationListener {
 //    runtime.setLongitude(strLongitude);
 //
 //    ICLogger.i("Location " +runtime.getLocationInstance().getLocationStat().name());
-    //发送停止消息
-    temHandler.sendEmptyMessage(id);
-  }
+        //发送停止消息
+        temHandler.sendEmptyMessage(id);
+    }
 
-  boolean isFrist = true;
+    boolean isFrist = true;
 
 
-  public boolean startListen() {
+    public boolean startListen() {
 
-    if (this.listening == false) {
-      Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, true);
+        if (this.listening == false) {
+            Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, true);
 
-      runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_OPEN);
+            runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_OPEN);
 
-      Criteria criteria = new Criteria();
-      criteria.setAccuracy(Criteria.ACCURACY_FINE);// 设置为最大精度
-      criteria.setAltitudeRequired(false);//不要求海拔信息
-      criteria.setBearingRequired(false);// 不要求方位信息
-      criteria.setCostAllowed(true);//是否允许付费
-      criteria.setPowerRequirement(Criteria.POWER_LOW);// 对电量的要求
+            Criteria criteria = new Criteria();
+            criteria.setAccuracy(Criteria.ACCURACY_FINE);// 设置为最大精度
+            criteria.setAltitudeRequired(false);//不要求海拔信息
+            criteria.setBearingRequired(false);// 不要求方位信息
+            criteria.setCostAllowed(true);//是否允许付费
+            criteria.setPowerRequirement(Criteria.POWER_LOW);// 对电量的要求
 
-      String provider = locationManager.getBestProvider(criteria, true);
+            String provider = locationManager.getBestProvider(criteria, true);
 
 
-      ICLogger.i("GPS StartListen with Provider " + provider);
+            ICLogger.i("GPS StartListen with Provider " + provider);
 
-      if (Config.LOG_TOFILE) ICLogger.logToFile("GPS", "GPS StartListen with Provider " + provider);
+            if (Config.LOG_TOFILE)
+                ICLogger.logToFile("GPS", "GPS StartListen with Provider " + provider);
 
-      this.locationManager.requestLocationUpdates(provider, 0L, 0.0F, this);
+            this.locationManager.requestLocationUpdates(provider, 0L, 0.0F, this);
 
-      this.listening = true;
-      noSignalCount = 0;
-      longitude = 0;
-      latitude = 0;
-      searchCout = 0;
-      locationFixedCount = 0;
-      gpsMode = GPS_CURRENT_STATUS.GPS_LISTENING;
+            this.listening = true;
+            noSignalCount = 0;
+            longitude = 0;
+            latitude = 0;
+            searchCout = 0;
+            locationFixedCount = 0;
+            gpsMode = GPS_CURRENT_STATUS.GPS_LISTENING;
 //      locationManager.addGpsStatusListener(statusListener);//监听搜星状态
-      locationManager.addNmeaListener(this); //监听NMEA 协议数据。
+            locationManager.addNmeaListener(this); //监听NMEA 协议数据。
+
+            //做个热启动
+            return true;//gpsHotStart();
+        } else {
+            ICLogger.i(" location listening, skip !");
 
-      //做个热启动
-      return true;//gpsHotStart();
-    } else {
-      ICLogger.i(" location listening, skip !");
+            runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_SEARCHING);
 
-      runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_SEARCHING);
+            if (Config.LOG_TOFILE) ICLogger.logToFile("GPS", " location listening, skip !");
 
-      if (Config.LOG_TOFILE) ICLogger.logToFile("GPS", " location listening, skip !");
+            return true;
+        }
+    }
 
-      return true;
+    public boolean isGpsOpening() {
+        return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
     }
-  }
-  public boolean isGpsOpening() {
-    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
-  }
-
-  public void stopListen() {
-    this.locationManager.removeNmeaListener(this);
-    this.locationManager.removeUpdates(this);
-    ICLogger.i("stopListen 定位 ");
-    if (Config.LOG_TOFILE) ICLogger.logToFile("GPS", "stopListen 定位 ");
-    if (listening==true) {
-       this.listening = false;
-      Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, false);
-      ICLogger.i("stopListen 定位 done ");
-    }else{
-      if (isGpsOpening()){
-        Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, false);
-        ICLogger.i("flag stoped but gps still opening , stop GPS!");
-      }else {
-        ICLogger.i("stopListen 定位 already stop skip stopListen");
-      }
+
+    public void stopListen() {
+        this.locationManager.removeNmeaListener(this);
+        this.locationManager.removeUpdates(this);
+        ICLogger.i("stopListen 定位 ");
+        if (Config.LOG_TOFILE) ICLogger.logToFile("GPS", "stopListen 定位 ");
+        if (listening == true) {
+            this.listening = false;
+            Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, false);
+            ICLogger.i("stopListen 定位 done ");
+        } else {
+            if (isGpsOpening()) {
+                Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, false);
+                ICLogger.i("flag stoped but gps still opening , stop GPS!");
+            } else {
+                ICLogger.i("stopListen 定位 already stop skip stopListen");
+            }
+        }
+    }
+
+    public enum GPS_CURRENT_STATUS {
+        GPS_LISTENING,
+        GPS_FIXED,
+        GPS_NOTFIXED,
+        GPS_TIMEOUT,
+        GPS_NOSINGAL,
     }
-  }
-
-  public enum  GPS_CURRENT_STATUS {
-    GPS_LISTENING,
-    GPS_FIXED,
-    GPS_NOTFIXED,
-    GPS_TIMEOUT,
-    GPS_NOSINGAL,
-  }
 }
index e54eaa9..23a2654 100644 (file)
@@ -100,9 +100,8 @@ public class BTHelper {
 
         if (lecallback == null)
             lecallback = new BLeScanCallback();
-        if (mHandler == null)
-        {
-             mHandler = new Handler(EventLooperHandlerThread.makeLooper(BTHelper.class.getSimpleName()));
+        if (mHandler == null) {
+            mHandler = new Handler(EventLooperHandlerThread.getInstance().makeLooper());
         }
 
     }
@@ -146,9 +145,8 @@ public class BTHelper {
             ICLogger.i("BT startLeScan");
             if (lecallback == null)
                 lecallback = new BLeScanCallback();
-            if (mHandler == null)
-            {
-                mHandler = new Handler(EventLooperHandlerThread.makeLooper(BTHelper.class.getSimpleName()));
+            if (mHandler == null) {
+                mHandler = new Handler(EventLooperHandlerThread.getInstance().makeLooper());
             }
             mBtAdapter.startLeScan(lecallback);
             mHandler.postDelayed(mRunable_stopBleScan, BLETimeoutForOneScan * 1000);
@@ -287,7 +285,7 @@ public class BTHelper {
 
         @Override
         public void run() {
-            ICLogger.i("BT stopLeScan "+Thread.currentThread().getName());
+            ICLogger.i("BT stopLeScan " + Thread.currentThread().getName());
             mBtAdapter.stopLeScan(lecallback);
             //开始扫描前是关闭的,就关闭它
             //                if(!enabledBeforScan)
index 7c62275..af04b72 100644 (file)
@@ -1,26 +1,31 @@
 package com.enqualcomm.support.bean;
 
+import android.os.HandlerThread;
 import android.os.Looper;
 
-import com.enqualcomm.support.utils.ICLogger;
+public class EventLooperHandlerThread {
+    private final Looper looper;
 
-public class EventLooperHandlerThread  extends Thread {
-    public Looper looper;
-
-    public EventLooperHandlerThread(String name){
-        super("Thread_"+name);
+    private EventLooperHandlerThread() {
+        HandlerThread handlerThread = new HandlerThread("ic:share-handler-thread");
+        handlerThread.start();
+        looper = handlerThread.getLooper();
     }
-    @Override
-    public void run() {
-        Looper.prepare();//创建与当前线程相关的Looper
-        looper = Looper.myLooper();//获取当前线程的Looper对象
-        ICLogger.i("EventLooperHandlerThread run");
-        Looper.loop();//调用此方法,消息才会循环处理
+
+    private static EventLooperHandlerThread sInstance = null;
+
+    public static EventLooperHandlerThread getInstance() {
+        if (sInstance == null) {
+            synchronized (EventLooperHandlerThread.class) {
+                if (sInstance == null) {
+                    sInstance = new EventLooperHandlerThread();
+                }
+            }
+        }
+        return sInstance;
     }
 
-    public static Looper makeLooper(String name){
-        EventLooperHandlerThread eventLooperHandlerThread=new EventLooperHandlerThread(name);
-        eventLooperHandlerThread.start();
-        return eventLooperHandlerThread.looper;
+    public Looper makeLooper() {
+        return looper;
     }
 }
index 427bd5e..cc84dde 100644 (file)
@@ -560,7 +560,7 @@ public class AntiMonitorService extends AbstractInvokeHandlerService {
         mRuntime = paramRuntime;
         mContext = mRuntime.getContextProxy().context;
         mConnection = paramConnection;
-        if (Config.UsePolingCheckWeared == false) {
+        if (!Config.UsePolingCheckWeared) {
             ICLogger.i("启用中断式佩戴检测!");
             startSensor();
         } else {
@@ -570,7 +570,7 @@ public class AntiMonitorService extends AbstractInvokeHandlerService {
 
     @Override
     public void onDetach(Connection paramConnection, Runtime paramRuntime) {
-        if (Config.UsePolingCheckWeared == false) {
+        if (!Config.UsePolingCheckWeared) {
             mSensorManager.unregisterListener(mSensorEventListener);
         }
     }
index 425f41c..316e998 100644 (file)
@@ -10,7 +10,7 @@ import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
 import android.os.Build;
 import android.os.Handler;
-import android.os.Message;
+import android.os.HandlerThread;
 import android.os.Parcelable;
 import android.os.PowerManager;
 import android.os.SystemClock;
@@ -19,29 +19,24 @@ import com.enqualcomm.support.Config;
 import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.R;
-import com.enqualcomm.support.adapter.BTHelper;
-import com.enqualcomm.support.bean.EventLooperHandlerThread;
-import com.enqualcomm.support.bean.VoiceContent;
-import com.enqualcomm.support.utils.DBHelper;
-import com.enqualcomm.support.utils.TemperatureUtil;
-import com.enqualcomm.support.utils.TimeUtil;
-import com.ic.protocols.protocolAPIHelper;
 import com.enqualcomm.support.bean.Contact;
+import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
+import com.enqualcomm.support.bean.VoiceContent;
 import com.enqualcomm.support.bean.voicePacket;
 import com.enqualcomm.support.service.base.AbstractConnectionService;
 import com.enqualcomm.support.utils.Connection;
-import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.utils.FileCache;
 import com.enqualcomm.support.utils.ICLogger;
 import com.enqualcomm.support.utils.NettyConnection;
-import com.enqualcomm.support.utils.ServiceUtil;
 import com.enqualcomm.support.utils.SharPreferenceUtil;
 import com.enqualcomm.support.utils.SimSignalUtil;
+import com.enqualcomm.support.utils.TemperatureUtil;
+import com.enqualcomm.support.utils.TimeUtil;
 import com.enqualcomm.support.utils.Util;
+import com.ic.protocols.protocolAPIHelper;
 
 import java.util.concurrent.LinkedBlockingDeque;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.ReentrantLock;
 
@@ -55,78 +50,81 @@ import static com.enqualcomm.support.bean.Content.CONTACT_CATEGORY_GROUP;
  * 负责发送除了login,心跳之外的所有指令
  */
 public class Deliver extends AbstractConnectionService {
-  private static final String RECEIVE_WAKE_LOCKTAG = "ReceiveWakelockTag";
-  
-  private static PowerManager.WakeLock WifiListWakeLock;
-  
-  public static boolean haveSendH42 = false;
-  
-  private static int isAppSetWifi = 0;
-
-  private static boolean sendloopruning=false;
-
-
-  private static ReentrantLock mLock = new ReentrantLock();
-  private static ReentrantLock lock = new ReentrantLock();
-  private static Condition mCondition = mLock.newCondition();
-
-  public static LinkedBlockingDeque<StringMessage> queue = new LinkedBlockingDeque(200);
-
-  private static FileCache fileCache;
-  private static Connection connection;
-
-  public static boolean is_active_location = false;
-  
-  private static PowerManager.WakeLock ReceiveWakeLock;
-  
-  private Handler delayHandler;
-  
-  private Runnable delayTh;
-  
-  private Connection mConnection;
-
-  private ConWifiReceiver mMyWifiReceiver;
-  
-  private static Runtime mRuntime;
-  
-  private static boolean wakeLockWifiList = false;
-  
-  private static boolean wakeLockWifiSet = false;
-  
-  private static  boolean wifiEnabled;
-
-  public static Runnable delaySendMSG;
-  private static Handler mSendMSGHandler;
-
-  static {
-    mSendMSGHandler = new Handler(EventLooperHandlerThread.makeLooper(Deliver.class.getSimpleName()));
-    delaySendMSG = new Runnable() {
-      @Override
-      public void run() {
-        sendloopruning=true;
-        if (getAndSendMsgFromQueue()==true){
-          //数据发送成功,则5秒后进行下一轮发送(while 循环用sleep会很占资源造成死锁
-          mSendMSGHandler.postDelayed(delaySendMSG,5000L);
-        }else{
-          //没有数据可以发送,则退出sendloop
-          sendloopruning=false;
-        }
-      }
-    };
-  }
-  public Deliver(Connection paramNettyConnection, Runtime paramRuntime) {
-    connection = paramNettyConnection;
-    mRuntime = paramRuntime;
-    //把queue 保存在磁盘中的缓存文件
-    //此文件只缓存 除了 登录指令AP00,心跳AP03以及voice 分包指令以外的需要上传的指令。初步规划为 定位AP01和心率/血压 APHT
-    fileCache = new FileCache(paramRuntime.getFileDir());
-  }
-
-  private static boolean checkNetwork(){
-    boolean ret=true;
-    boolean dateConnectionLinked=SimSignalUtil.checkNet(mRuntime.getContextProxy().context);
-
-    if (dateConnectionLinked) {
+    private static final String RECEIVE_WAKE_LOCKTAG = "ReceiveWakelockTag";
+
+    private static PowerManager.WakeLock WifiListWakeLock;
+
+    public static boolean haveSendH42 = false;
+
+    private static int isAppSetWifi = 0;
+
+    private static boolean sendloopruning = false;
+
+
+    private static ReentrantLock mLock = new ReentrantLock();
+    private static ReentrantLock lock = new ReentrantLock();
+    private static Condition mCondition = mLock.newCondition();
+
+    public static LinkedBlockingDeque<StringMessage> queue = new LinkedBlockingDeque(200);
+
+    private static FileCache fileCache;
+    private static Connection connection;
+
+    public static boolean is_active_location = false;
+
+    private static PowerManager.WakeLock ReceiveWakeLock;
+
+    private Handler delayHandler;
+
+    private Runnable delayTh;
+
+    private Connection mConnection;
+
+    private ConWifiReceiver mMyWifiReceiver;
+
+    private static Runtime mRuntime;
+
+    private static boolean wakeLockWifiList = false;
+
+    private static boolean wakeLockWifiSet = false;
+
+    private static boolean wifiEnabled;
+
+    public static Runnable delaySendMSG;
+    private static final Handler mSendMSGHandler;
+
+    static {
+        HandlerThread handlerThread = new HandlerThread("ic:deliver-handlerThread");
+        handlerThread.start();
+        mSendMSGHandler = new Handler(handlerThread.getLooper());
+        delaySendMSG = new Runnable() {
+            @Override
+            public void run() {
+                sendloopruning = true;
+                if (getAndSendMsgFromQueue()) {
+                    //数据发送成功,则5秒后进行下一轮发送(while 循环用sleep会很占资源造成死锁
+                    mSendMSGHandler.postDelayed(delaySendMSG, 5000L);
+                } else {
+                    //没有数据可以发送,则退出sendLoop
+                    sendloopruning = false;
+                }
+            }
+        };
+    }
+
+    public Deliver(Connection paramNettyConnection, Runtime paramRuntime) {
+        connection = paramNettyConnection;
+        mRuntime = paramRuntime;
+        //把queue 保存在磁盘中的缓存文件
+        //此文件只缓存 除了 登录指令AP00,心跳AP03以及voice 分包指令以外的需要上传的指令。初步规划为 定位AP01和心率/血压 APHT
+        fileCache = new FileCache(paramRuntime.getFileDir());
+    }
+
+    private static boolean checkNetwork() {
+        boolean ret = true;
+        boolean dateConnectionLinked = SimSignalUtil.checkNet(mRuntime.getContextProxy().context);
+
+        if (dateConnectionLinked) {
 //      int signal = mRuntime.getSignalStrength();
 //      int networkType = SimSignalUtil.getInstance((mRuntime.getContextProxy()).context).getNetworkType();
 //      if (signal + 110 < getMinSignalStrength(networkType)) {
@@ -134,704 +132,709 @@ public class Deliver extends AbstractConnectionService {
 //        //如果信号不好,把msg放回去
 //        ret = false;
 //      }
-      if (connection.isServerConnected() == false || !mRuntime.isServerProtocolConnected()) {
-        ICLogger.i("服务器无法访问,或者协议状态失常");
-        ret = false;
-      }
-    }else{
-      ICLogger.i("数据网络没有连接");
-      ret=false;
+            if (connection.isServerConnected() == false || !mRuntime.isServerProtocolConnected()) {
+                ICLogger.i("服务器无法访问,或者协议状态失常");
+                ret = false;
+            }
+        } else {
+            ICLogger.i("数据网络没有连接");
+            ret = false;
+        }
+        return ret;
     }
-    return ret;
-  }
-  public static void triggerSendThread() {
-
 
-    if(sendloopruning==false) {
-      ICLogger.i("triggerSendThread !");
-      mSendMSGHandler.post(delaySendMSG);
-    }else{
-      ICLogger.i("triggerSendThread running skip !");
+    public static void triggerSendThread() {
+        if (!sendloopruning) {
+            ICLogger.i("triggerSendThread !");
+            mSendMSGHandler.post(delaySendMSG);
+        } else {
+            ICLogger.i("triggerSendThread running skip !");
+        }
     }
 
-//    delaySendMSG.run();
-//    mSendMSGHandler.sendEmptyMessage(1);
-  }
-  private static int CheckCount=0;
-  private static boolean checkNeedServerResponse(StringMessage cmd){
-
-    boolean NeedCheckServerResponse;
-    if(cmd!=null &&
-            Config.protocol_no==Config.PROTOCOL_FZD  &&
-            (protocolAPIHelper.isCmdStr(cmd).equals("UD") || protocolAPIHelper.isCmdStr(cmd).equals("UD2"))
-    ){
-      NeedCheckServerResponse=false;
-    }else{
-      NeedCheckServerResponse=true;
-    }
-    return NeedCheckServerResponse;
-  }
-  public static void dumpMessage(StringMessage msg){
-
-    StringBuilder sb = new StringBuilder("StringMessage ");
-    if (msg!=null) {
-      sb.append("index ").append(msg.getIndex())
-              .append("\nDate ").append(msg.getDate()).append(msg.getTime())
-              .append("\nflag ").append(msg.haveSent())
-              .append("\ntopic ").append(msg.cmd())
-              .append("\ncmd ").append(msg.isFromCache()).append("\n");
+    private static int CheckCount = 0;
+
+    private static boolean checkNeedServerResponse(StringMessage cmd) {
+
+        boolean NeedCheckServerResponse;
+        if (cmd != null &&
+                Config.protocol_no == Config.PROTOCOL_FZD &&
+                (protocolAPIHelper.isCmdStr(cmd).equals("UD") || protocolAPIHelper.isCmdStr(cmd).equals("UD2"))
+        ) {
+            NeedCheckServerResponse = false;
+        } else {
+            NeedCheckServerResponse = true;
+        }
+        return NeedCheckServerResponse;
     }
+
+    public static void dumpMessage(StringMessage msg) {
+
+        StringBuilder sb = new StringBuilder("StringMessage ");
+        if (msg != null) {
+            sb.append("index ").append(msg.getIndex())
+                    .append("\nDate ").append(msg.getDate()).append(msg.getTime())
+                    .append("\nflag ").append(msg.haveSent())
+                    .append("\ntopic ").append(msg.cmd())
+                    .append("\ncmd ").append(msg.isFromCache()).append("\n");
+        }
 //    ICLogger.i(sb.toString());
 
-  }
-  public static boolean getAndSendMsgFromQueue(){
-    boolean ret=false;
-    if (mRuntime.getUseQueue()) {
-      ICLogger.i("queue locked "+mLock.isLocked());
-      if(mLock.isLocked()) return false;
-      mLock.lock();
-      try
-      {
-        String str;
-        //如果没有数据从缓存中尝试读取
-
-        //检查刚刚发送出去的包是否需要检查server response
-
-        StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();
-        dumpMessage(msgWait);
+    }
 
-        if(msgWait!=null) {
-          //如果需要,且没有服务器反馈
-            //刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。
-            //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!
-            ICLogger.i("checkSrvResponse " + CheckCount + " times for " + msgWait.cmd() + " " + msgWait.isFromCache() + " index " + msgWait.getIndex());
-            if (msgWait.getIndex() >= 0) {
-              mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);//设置为未发送
-            }
-            dumpMessage(msgWait);
-            CheckCount++;
-            //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送
-            if (CheckCount > 5) {
-              ICLogger.i("checkSrvResponse CheckCount=" + CheckCount + " Timeout or cmd is null, skip ");
-
-              //C5要的临时版本,去掉盲点续传。
-
-              if( Config.discard_cmd_after_retryfailed) {
-                if (msgWait.getIndex() >= 0) {
-                  //有些协议需要对盲点数据进行修改(盲点数据可能是不同的topic),在此对数据修改后更新数据库
-                  mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 3);//设置为盲点不发送
-                }
+    public static boolean getAndSendMsgFromQueue() {
+        boolean ret = false;
+        if (mRuntime.getUseQueue()) {
+            ICLogger.i("queue locked " + mLock.isLocked() +
+                    "  current Thread is == > "
+                    + Thread.currentThread().getName());
+            if (mLock.isLocked()) return false;
+            mLock.lock();
+            try {
+                String str;
+                //如果没有数据从缓存中尝试读取
+
+                //检查刚刚发送出去的包是否需要检查server response
+
+                StringMessage msgWait = mRuntime.getDbHelper().queryWaitCMDRecord();
                 dumpMessage(msgWait);
-              }
-              if (Config.LOG_TOFILE)
-                ICLogger.logToFile("APILog", "response timeout skip!  ");
-              CheckCount = 0;
-              if (mLock != null && mLock.isLocked())
-                mLock.unlock();
-              return false;
-            }
 
-        }
+                if (msgWait != null) {
+                    //如果需要,且没有服务器反馈
+                    //刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。
+                    //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!
+                    ICLogger.i("checkSrvResponse " + CheckCount + " times for " + msgWait.cmd() + " " + msgWait.isFromCache() + " index " + msgWait.getIndex());
+                    if (msgWait.getIndex() >= 0) {
+                        mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);//设置为未发送
+                    }
+                    dumpMessage(msgWait);
+                    CheckCount++;
+                    //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送
+                    if (CheckCount > 5) {
+                        ICLogger.i("checkSrvResponse CheckCount=" + CheckCount + " Timeout or cmd is null, skip ");
+
+                        //C5要的临时版本,去掉盲点续传。
+
+                        if (Config.discard_cmd_after_retryfailed) {
+                            if (msgWait.getIndex() >= 0) {
+                                //有些协议需要对盲点数据进行修改(盲点数据可能是不同的topic),在此对数据修改后更新数据库
+                                mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 3);//设置为盲点不发送
+                            }
+                            dumpMessage(msgWait);
+                        }
+                        if (Config.LOG_TOFILE)
+                            ICLogger.logToFile("APILog", "response timeout skip!  ");
+                        CheckCount = 0;
+                        if (mLock != null && mLock.isLocked())
+                            mLock.unlock();
+                        return false;
+                    }
 
-          StringBuilder stringBuilder = new StringBuilder();
-          if (checkNetwork()) {
-            StringMessage msgSent;
-            if( Config.discard_cmd_after_retryfailed) {
-              //如果可以丢弃数据,则直接查找没发送的数据即可
-              msgSent = mRuntime.getDbHelper().queryNotSentCMDRecord();
-            }else{
-              //如果有盲点续传问题,不丢弃,则先查找丢掉的数据(重试失败的)先进行重传。
-              msgSent = mRuntime.getDbHelper().queryDiscardCMDRecord();
-              if(msgSent==null) {
-                //如果没有丢弃的数据,直接查找未发送的数据进行
-                msgSent = mRuntime.getDbHelper().queryNotSentCMDRecord();
-              }
-            }
-            dumpMessage(msgSent);
-            if (msgSent != null) {
-              String cmd = msgSent.isFromCache();
-              String topic = msgSent.cmd();
-              stringBuilder.append(topic);
-              stringBuilder.append(" ");
-              stringBuilder.append(cmd);
-              stringBuilder.append("\n");
-              if (checkNetwork()) {
-
-                connection.send(msgSent);
-                //如果需要CheckResponse
-                if (checkNeedServerResponse(msgSent)==true){
-                    ICLogger.i("checkSrvResponse "+topic+" "+cmd);
-                    mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),1); //设置为等待响应
-                }else{
-                    ICLogger.i("no need checkSrvResponse "+topic+" "+cmd);
-                    mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),2); //直接设置为已经响应
                 }
-                ret=true;
-              } else {
-                //已经拿到的缓存,如果刚巧没有网络,就原路放回去
-                ICLogger.i("网络不通,不能发送!");
-                if (msgSent.getIndex() >= 0) {
-                  mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 0); //设置为未发送
+
+                StringBuilder stringBuilder = new StringBuilder();
+                if (checkNetwork()) {
+                    StringMessage msgSent;
+                    if (Config.discard_cmd_after_retryfailed) {
+                        //如果可以丢弃数据,则直接查找没发送的数据即可
+                        msgSent = mRuntime.getDbHelper().queryNotSentCMDRecord();
+                    } else {
+                        //如果有盲点续传问题,不丢弃,则先查找丢掉的数据(重试失败的)先进行重传。
+                        msgSent = mRuntime.getDbHelper().queryDiscardCMDRecord();
+                        if (msgSent == null) {
+                            //如果没有丢弃的数据,直接查找未发送的数据进行
+                            msgSent = mRuntime.getDbHelper().queryNotSentCMDRecord();
+                        }
+                    }
+                    dumpMessage(msgSent);
+                    if (msgSent != null) {
+                        String cmd = msgSent.isFromCache();
+                        String topic = msgSent.cmd();
+                        stringBuilder.append(topic);
+                        stringBuilder.append(" ");
+                        stringBuilder.append(cmd);
+                        stringBuilder.append("\n");
+                        if (checkNetwork()) {
+                            connection.send(msgSent);
+                            //如果需要CheckResponse
+                            if (checkNeedServerResponse(msgSent) == true) {
+                                ICLogger.i("checkSrvResponse " + topic + " " + cmd);
+                                mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 1); //设置为等待响应
+                            } else {
+                                ICLogger.i("no need checkSrvResponse " + topic + " " + cmd);
+                                mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 2); //直接设置为已经响应
+                            }
+                            ret = true;
+                        } else {
+                            //已经拿到的缓存,如果刚巧没有网络,就原路放回去
+                            ICLogger.i("网络不通,不能发送!");
+                            if (msgSent.getIndex() >= 0) {
+                                mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 0); //设置为未发送
+                            }
+                            dumpMessage(msgSent);
+                            ret = false;
+                        }
+                    } else {
+                        stringBuilder.append("no message!\n");
+                    }
                 }
-                dumpMessage(msgSent);
-                ret=false;
-              }
-            }else{
-             stringBuilder.append("no message!\n");
+                str = stringBuilder.toString();
+                ICLogger.i("send cached cmd : \n" + str);
+                //ICLogger.i("\n"+queue.size()+" left in Queue!");
+            } finally {
+                if (mLock != null && mLock.isLocked())
+                    mLock.unlock();
             }
-          }
-          str = stringBuilder.toString();
-        ICLogger.i("send cached cmd : \n"+str);
-        //ICLogger.i("\n"+queue.size()+" left in Queue!");
-      }finally {
-        if(mLock!=null && mLock.isLocked())
-          mLock.unlock();
-      }
-    }
-    return ret;
-  }
-
-  public static void resetCMDReocrdsDB(){
-    //正常应该只有一个在wait的记录,如果开机的时候,可能需要处理一下第一条记录
-    StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();
-    dumpMessage(msgWait);
-    if (msgWait!=null) {
-      if( Config.discard_cmd_after_retryfailed) {
-        while(msgWait!=null) {
-          //所有缓存数据都设置为放弃发送
-          mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 3);
-          msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();
         }
-      }else {
-        mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);//设置为未发送
-      }
+        return ret;
     }
-  }
-  public static void sendLocationMSG( String Msg){
 
-    if(Msg==null ||Msg.trim().isEmpty()){
-      ICLogger.i("命令为空,跳过发送!");
-      return ;
+    public static void resetCMDReocrdsDB() {
+        //正常应该只有一个在wait的记录,如果开机的时候,可能需要处理一下第一条记录
+        StringMessage msgWait = mRuntime.getDbHelper().queryWaitCMDRecord();
+        dumpMessage(msgWait);
+        if (msgWait != null) {
+            if (Config.discard_cmd_after_retryfailed) {
+                while (msgWait != null) {
+                    //所有缓存数据都设置为放弃发送
+                    mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 3);
+                    msgWait = mRuntime.getDbHelper().queryWaitCMDRecord();
+                }
+            } else {
+                mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);//设置为未发送
+            }
+        }
     }
-    sendLocationMSG(protocolAPIHelper.genStringMessage("queue",Msg));
-  }
-  public static void sendLocationMSG( StringMessage Msg){
-    if(Msg==null ){
-      ICLogger.i("命令为空,跳过发送!");
-      return ;
+
+    public static void sendLocationMSG(String Msg) {
+
+        if (Msg == null || Msg.trim().isEmpty()) {
+            ICLogger.i("命令为空,跳过发送!");
+            return;
+        }
+        sendLocationMSG(protocolAPIHelper.genStringMessage("queue", Msg));
     }
 
-    if(mRuntime.getUseQueue()){
-      long id=mRuntime.getDbHelper().insertCMDRecord(Msg);
-      Msg.setIndex((int)id);
-      dumpMessage(Msg);
-      triggerSendThread();
-    }else {
-      if (checkNetwork()) {
-        ICLogger.i(" first send " + Msg);
-        connection.send(Msg);
-      } else {
-        ICLogger.i("offline skip  " + Msg);
-        if (Config.LOG_TOFILE) ICLogger.logToFile( "APILog", " offlineskip  " + Msg.cmd()+" "+Msg.isFromCache());
-      }
+    public static void sendLocationMSG(StringMessage Msg) {
+        if (Msg == null) {
+            ICLogger.i("命令为空,跳过发送!");
+            return;
+        }
+
+        if (mRuntime.getUseQueue()) {
+            long id = mRuntime.getDbHelper().insertCMDRecord(Msg);
+            Msg.setIndex((int) id);
+            dumpMessage(Msg);
+            triggerSendThread();
+        } else {
+            if (checkNetwork()) {
+                ICLogger.i(" first send " + Msg);
+                connection.send(Msg);
+            } else {
+                ICLogger.i("offline skip  " + Msg);
+                if (Config.LOG_TOFILE)
+                    ICLogger.logToFile("APILog", " offlineskip  " + Msg.cmd() + " " + Msg.isFromCache());
+            }
+        }
     }
-}
-  private static int getMinSignalStrength(int paramInt) {
-    int b = -105;
-    switch (paramInt) {
-      case SimSignalUtil.IS_4G:
-        b = -100;
-        break;
-      case SimSignalUtil.IS_2G:
-      case SimSignalUtil.IS_3G:
-      default:
-        break;
+
+    private static int getMinSignalStrength(int paramInt) {
+        int b = -105;
+        switch (paramInt) {
+            case SimSignalUtil.IS_4G:
+                b = -100;
+                break;
+            case SimSignalUtil.IS_2G:
+            case SimSignalUtil.IS_3G:
+            default:
+                break;
+        }
+        return b;
     }
-    return b;
-  }
-
-  public static PowerManager.WakeLock WakeLockForGetWifiList(Runtime paramRuntime) {
-    PowerManager.WakeLock wakeLock = ((PowerManager)(paramRuntime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Deliver.class.getSimpleName());
-    wakeLock.acquire(120000L);
-    return wakeLock;
-  }
-  
-  private boolean isSilence(Runtime paramRuntime) {
-    return SharPreferenceUtil.getPrefBoolean((paramRuntime.getContextProxy()).context, "KEY_ISSILENCE", false);
-  }
-  
-  public static void releaseWakeLockForGetWifiList() {
-    if (WifiListWakeLock == null) {
-      ICLogger.i("WifiListWakeLock 没有加锁");
-      return;
-    } 
-    if (WifiListWakeLock.isHeld()) {
-      WifiListWakeLock.release();
-      WifiListWakeLock = null;
-    } 
-  }
-  
-  public PowerManager.WakeLock getWakeLock() {
-    PowerManager.WakeLock wakeLock = ((PowerManager)(this.mRuntime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Deliver.class.getSimpleName());
-    wakeLock.acquire(40000L);
-    return wakeLock;
-  }
-  
-  public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {}
-  
-  public void onAttach(Connection paramConnection, Runtime paramRuntime) {}
-
-  @Override
-  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {
-   return false; }
-  
-  public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) { return false; }
-  
-  public void onDetach(Connection paramConnection, Runtime paramRuntime) {}
-  
-  public boolean onReceive(StringMessage paramStringMessage, Connection paramConnection, final Runtime paramRuntime) {
-    this.mConnection = paramConnection;
-    this.mRuntime = paramRuntime;
-    String cmd = paramStringMessage.cmd();
-    if(Config.protocol_no==Config.PROTOCOL_MQTT)
-    {
-      cmd=protocolAPIHelper.isCmdStr(paramStringMessage);
+
+    public static PowerManager.WakeLock WakeLockForGetWifiList(Runtime paramRuntime) {
+        PowerManager.WakeLock wakeLock = ((PowerManager) (paramRuntime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Deliver.class.getSimpleName());
+        wakeLock.acquire(120000L);
+        return wakeLock;
     }
-    //如果需要检测是否响应。
-    StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();
-    dumpMessage(msgWait);
-    if(msgWait!=null) {
-      ICLogger.i("====== checkSrvResponse cmd " + cmd + " msg " + protocolAPIHelper.isCmdStr(msgWait));
-      if (cmd.equals(protocolAPIHelper.isCmdStr(msgWait))) {
-        ICLogger.i("checkSrvResponse " + cmd + " " + protocolAPIHelper.isCmdStr(msgWait) + " is responsed!");
-        mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 2);//设置为已读
-        CheckCount = 0;
-      }
+
+    private boolean isSilence(Runtime paramRuntime) {
+        return SharPreferenceUtil.getPrefBoolean((paramRuntime.getContextProxy()).context, "KEY_ISSILENCE", false);
     }
 
-    ICLogger.i("Deliver receive cmd " + paramStringMessage.cmd());
-    if (cmd.equals("SentVoicePacket") ) {
-      //收到BP07 表示服务器收到一个voicePacket 分包成功,开始检查下一个包是否存在需要发送。
-      //收到SentVoicePacket 表示 有一个VoiceMessage要发送,需要从第0个包开始发送语音分包。
-      voicePacket voicepacket = voicePacket.getInstanceSent();
-      if (voicepacket.getCurrentIndexToSent() < voicepacket.getPacketCount()) {
-        ICLogger.i("voicepacket " + voicepacket.getName() + " filetype " + voicepacket.getFiletype() + " , datatype " + voicepacket.getDateType() +" "+ voicepacket.getPacketTime() + " send " + (voicepacket.getCurrentIndexToSent() + 1) + "/" + voicepacket.getPacketCount());
-        if(mConnection instanceof  NettyConnection) {
-          ((NettyConnection) mConnection).sendMsg("RAWPACKET",
-                  protocolAPIHelper.getVoicePacketItem(voicepacket.getPacketTime(),
-                          voicepacket.getPacketCount(),
-                          (voicepacket.getCurrentIndexToSent() + 1),
-                          voicepacket.getVoicePacketWithIndex(voicepacket.getCurrentIndexToSent()).getPacketLen(),
-                          voicepacket.getVoicePacketWithIndex(voicepacket.getCurrentIndexToSent()).getPacketData(), voicepacket.getFiletype(), voicepacket.getDateType())
-          );
+    public static void releaseWakeLockForGetWifiList() {
+        if (WifiListWakeLock == null) {
+            ICLogger.i("WifiListWakeLock 没有加锁");
+            return;
         }
-      } else {
-        ICLogger.i("voicepacket " + voicepacket.getName() + " filetype " + voicepacket.getFiletype() + " , datatype " + voicepacket.getDateType() + " " + voicepacket.getPacketTime() + " sent Done!");
-      }
-      return true;
-    } else if ("PhotoRemoteTaken".equals(paramStringMessage.cmd())) {
-      //接收到拍照完毕命令,发送照片
-
-      String msgUrl=paramStringMessage.isFromCache();
-     ICLogger.i("receive taken photo to send "+msgUrl);
-    //创建voiceConent并添加到数据
-    final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, "123", msgUrl,2,2);
-
-    // 把voiceContent拆解成1024的分包
-    Util.parseToVoicePacketSent(voiceContent);
-    //trigger 分包发送
-    if (CoreService.getInstance().getConnection()!=null) {
-
-
-      //H88 专用功能拍照时检测用户体温心率
-      if(Util.getSystemProperties("persist.sys.do_check_condition","false").equals("true")) {
-        //开启测温
-        if(mRuntime.check_stat_do_temp_test()) {
-          TemperatureUtil.DoTempTest();
+        if (WifiListWakeLock.isHeld()) {
+            WifiListWakeLock.release();
+            WifiListWakeLock = null;
         }
+    }
 
-        Util.mSleep(5000);
-        //开启测量PPG
-        if(mRuntime.check_stat_do_ppg_test()) {
-          HeartRateManager.triggerPPGtest();
-        }
-      }
+    public PowerManager.WakeLock getWakeLock() {
+        PowerManager.WakeLock wakeLock = ((PowerManager) (this.mRuntime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Deliver.class.getSimpleName());
+        wakeLock.acquire(40000L);
+        return wakeLock;
+    }
 
-      CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
+    public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {
     }
-    return true;
-  } else if ("poweroffCheckSim".equals(paramStringMessage.cmd())) {
-      paramRuntime.setShutdown(true);
-
-          if (SimSignalUtil.hasSimCard(paramRuntime.getContextProxy().context))
-          {
-            ICLogger.i("Has Sim Card Skip poweroff!");
-            Util.ShowToast(paramRuntime,"Has Sim Card Skip poweroff!");
-            return true;
-          }else{
-            Util.ShowToast(paramRuntime,"Do poweroff!");
-         }
-      mSendMSGHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          Util.shutdown();
-        }
-      },2000);
-      return true;
-    } else if ("FactoryResetCheckSim".equals(paramStringMessage.cmd())) {
-
-        if (SimSignalUtil.hasSimCard(paramRuntime.getContextProxy().context))
-        {
-          ICLogger.i("Has Sim Card Skip FactoryReset!");
-          Util.ShowToast(paramRuntime,"Has Sim Card Skip FactoryReset!");
-
-          return true;
-        }else{
-          Util.ShowToast(paramRuntime,"Do FactoryReset!");
-        }
-      mSendMSGHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          Util.doMasterClear(paramRuntime.getContextProxy().context);
-        }
-      },2000);
-      return true;
-    } else if ("poweroff".equals(paramStringMessage.cmd())) {
-      paramRuntime.setShutdown(true);
-      mSendMSGHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          Util.shutdown();
-        }
-      },2000);
-      return true;
-    } else if ("FactoryReset".equals(paramStringMessage.cmd())) {
-      mSendMSGHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          Util.doMasterClear(paramRuntime.getContextProxy().context);
+
+    public void onAttach(Connection paramConnection, Runtime paramRuntime) {
+    }
+
+    @Override
+    public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {
+        return false;
+    }
+
+    public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) {
+        return false;
+    }
+
+    public void onDetach(Connection paramConnection, Runtime paramRuntime) {
+    }
+
+    public boolean onReceive(StringMessage paramStringMessage, Connection paramConnection, final Runtime paramRuntime) {
+        this.mConnection = paramConnection;
+        this.mRuntime = paramRuntime;
+        String cmd = paramStringMessage.cmd();
+        if (Config.protocol_no == Config.PROTOCOL_MQTT) {
+            cmd = protocolAPIHelper.isCmdStr(paramStringMessage);
         }
-      },2000);
-      return true;
-    } else if ("Reboot".equals(paramStringMessage.cmd())) {
-      mSendMSGHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          Util.reboot(paramRuntime.getContextProxy().context);
+        //如果需要检测是否响应。
+        StringMessage msgWait = mRuntime.getDbHelper().queryWaitCMDRecord();
+        dumpMessage(msgWait);
+        if (msgWait != null) {
+            ICLogger.i("====== checkSrvResponse cmd " + cmd + " msg " + protocolAPIHelper.isCmdStr(msgWait));
+            if (cmd.equals(protocolAPIHelper.isCmdStr(msgWait))) {
+                ICLogger.i("checkSrvResponse " + cmd + " " + protocolAPIHelper.isCmdStr(msgWait) + " is responsed!");
+                mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 2);//设置为已读
+                CheckCount = 0;
+            }
         }
-      },2000);
-      return true;
-    } else if ("heartbeat".equals(paramStringMessage.cmd())) {
-      //每次心跳,查询一下 是否有语音消息需要接收。
-//      paramConnection.send(protocolAPIHelper.genStringMessage("AP05",protocolAPIHelper.AP05(true)));
 
-    } else if ("getWeather".equals(paramStringMessage.cmd())) {
-      ICLogger.i("获取天气");
-      mConnection.send(protocolAPIHelper.getWeatherMSG(mRuntime));
-    } else if ("NewVoice".equals(paramStringMessage.cmd()))
-    {
-      mSendMSGHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          final Context context = (Deliver.this.mRuntime.getContextProxy()).context;
-
-          Contact param2Contact = new Contact(CATEGORY_GROUP, (mRuntime.getContextProxy()).context.getResources().getString(R.string.all_group), Contact.GROUP_ALL);
-          int i = mRuntime.getContextProxy().getTelephonyManager().getCallState();
-          if (!mRuntime.getBatteryLow() && 1 != i && 2 != i) {
-            if (Config.do_broadCast_message)
-            {
-
-              ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED+" "+paramStringMessage.isFromCache());
-              //广播 voice消息
-              Intent intent = new Intent();
-              intent.setAction(Constants.ACTION_MESSAGE_RECEIVED);
-              intent.putExtra(Constants.KEY_MESSAGE_TYPE,"voice");
-              intent.putExtra(Constants.KEY_MESSAGE_FROM,"广播消息");
-              intent.putExtra(Constants.KEY_MESSAGE_URL,paramStringMessage.isFromCache());
-
-              //   playVoice(context,paramStringMessage.isFromCache());
-              context.sendBroadcast(intent);
+        ICLogger.i("Deliver receive cmd " + paramStringMessage.cmd());
+        if (cmd.equals("SentVoicePacket")) {
+            //收到BP07 表示服务器收到一个voicePacket 分包成功,开始检查下一个包是否存在需要发送。
+            //收到SentVoicePacket 表示 有一个VoiceMessage要发送,需要从第0个包开始发送语音分包。
+            voicePacket voicepacket = voicePacket.getInstanceSent();
+            if (voicepacket.getCurrentIndexToSent() < voicepacket.getPacketCount()) {
+                ICLogger.i("voicepacket " + voicepacket.getName() + " filetype " + voicepacket.getFiletype() + " , datatype " + voicepacket.getDateType() + " " + voicepacket.getPacketTime() + " send " + (voicepacket.getCurrentIndexToSent() + 1) + "/" + voicepacket.getPacketCount());
+                if (mConnection instanceof NettyConnection) {
+                    ((NettyConnection) mConnection).sendMsg("RAWPACKET",
+                            protocolAPIHelper.getVoicePacketItem(voicepacket.getPacketTime(),
+                                    voicepacket.getPacketCount(),
+                                    (voicepacket.getCurrentIndexToSent() + 1),
+                                    voicepacket.getVoicePacketWithIndex(voicepacket.getCurrentIndexToSent()).getPacketLen(),
+                                    voicepacket.getVoicePacketWithIndex(voicepacket.getCurrentIndexToSent()).getPacketData(), voicepacket.getFiletype(), voicepacket.getDateType())
+                    );
+                }
+            } else {
+                ICLogger.i("voicepacket " + voicepacket.getName() + " filetype " + voicepacket.getFiletype() + " , datatype " + voicepacket.getDateType() + " " + voicepacket.getPacketTime() + " sent Done!");
             }
+            return true;
+        } else if ("PhotoRemoteTaken".equals(paramStringMessage.cmd())) {
+            //接收到拍照完毕命令,发送照片
+
+            String msgUrl = paramStringMessage.isFromCache();
+            ICLogger.i("receive taken photo to send " + msgUrl);
+            //创建voiceConent并添加到数据
+            final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, "123", msgUrl, 2, 2);
+
+            // 把voiceContent拆解成1024的分包
+            Util.parseToVoicePacketSent(voiceContent);
+            //trigger 分包发送
+            if (CoreService.getInstance().getConnection() != null) {
 
-            if (Config.noVoiceNotifyDialog==false) {
 
-              Intent intent = new Intent();
-              //显示提示窗口
-              intent.setAction(DIALOG_ACTION);
-              intent.putExtra("contact", (Parcelable) param2Contact);
-              context.sendBroadcast(intent);
+                //H88 专用功能拍照时检测用户体温心率
+                if (Util.getSystemProperties("persist.sys.do_check_condition", "false").equals("true")) {
+                    //开启测温
+                    if (mRuntime.check_stat_do_temp_test()) {
+                        TemperatureUtil.DoTempTest();
+                    }
+
+                    Util.mSleep(5000);
+                    //开启测量PPG
+                    if (mRuntime.check_stat_do_ppg_test()) {
+                        HeartRateManager.triggerPPGtest();
+                    }
+                }
+
+                CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
             }
+            return true;
+        } else if ("poweroffCheckSim".equals(paramStringMessage.cmd())) {
+            paramRuntime.setShutdown(true);
+
+            if (SimSignalUtil.hasSimCard(paramRuntime.getContextProxy().context)) {
+                ICLogger.i("Has Sim Card Skip poweroff!");
+                Util.ShowToast(paramRuntime, "Has Sim Card Skip poweroff!");
+                return true;
+            } else {
+                Util.ShowToast(paramRuntime, "Do poweroff!");
+            }
+            mSendMSGHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    Util.shutdown();
+                }
+            }, 2000);
+            return true;
+        } else if ("FactoryResetCheckSim".equals(paramStringMessage.cmd())) {
 
-          }
-        }
-      },500);
-
-    return true;
-  }else if ("findDev".equals(paramStringMessage.cmd())) {
-
-      mSendMSGHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          final Context context = (Deliver.this.mRuntime.getContextProxy()).context;
-          Intent intent = new Intent();
-          ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED+" "+paramStringMessage.isFromCache());
-          //显示提示窗口
-          intent.setAction(DIALOG_ACTION);
-          intent.putExtra("findDev", "Find Device");
-          context.sendBroadcast(intent);
-        }
-      },500);
-
-      return true;
-    }else if ("takephoto".equals(paramStringMessage.cmd())) {
-
-      mSendMSGHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          final Context context = (Deliver.this.mRuntime.getContextProxy()).context;
-          Intent intent = new Intent();
-          ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED+" "+paramStringMessage.isFromCache());
-          //显示提示窗口
-          intent.setAction(DIALOG_ACTION);
-          intent.putExtra("takephoto", "Take Photo !");
-          context.sendBroadcast(intent);
-        }
-      },500);
+            if (SimSignalUtil.hasSimCard(paramRuntime.getContextProxy().context)) {
+                ICLogger.i("Has Sim Card Skip FactoryReset!");
+                Util.ShowToast(paramRuntime, "Has Sim Card Skip FactoryReset!");
+
+                return true;
+            } else {
+                Util.ShowToast(paramRuntime, "Do FactoryReset!");
+            }
+            mSendMSGHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    Util.doMasterClear(paramRuntime.getContextProxy().context);
+                }
+            }, 2000);
+            return true;
+        } else if ("poweroff".equals(paramStringMessage.cmd())) {
+            paramRuntime.setShutdown(true);
+            mSendMSGHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    Util.shutdown();
+                }
+            }, 2000);
+            return true;
+        } else if ("FactoryReset".equals(paramStringMessage.cmd())) {
+            mSendMSGHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    Util.doMasterClear(paramRuntime.getContextProxy().context);
+                }
+            }, 2000);
+            return true;
+        } else if ("Reboot".equals(paramStringMessage.cmd())) {
+            mSendMSGHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    Util.reboot(paramRuntime.getContextProxy().context);
+                }
+            }, 2000);
+            return true;
+        } else if ("heartbeat".equals(paramStringMessage.cmd())) {
+            //每次心跳,查询一下 是否有语音消息需要接收。
+//      paramConnection.send(protocolAPIHelper.genStringMessage("AP05",protocolAPIHelper.AP05(true)));
 
-      return true;
+        } else if ("getWeather".equals(paramStringMessage.cmd())) {
+            ICLogger.i("获取天气");
+            mConnection.send(protocolAPIHelper.getWeatherMSG(mRuntime));
+        } else if ("NewVoice".equals(paramStringMessage.cmd())) {
+            mSendMSGHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    final Context context = (Deliver.this.mRuntime.getContextProxy()).context;
+
+                    Contact param2Contact = new Contact(CATEGORY_GROUP, (mRuntime.getContextProxy()).context.getResources().getString(R.string.all_group), Contact.GROUP_ALL);
+                    int i = mRuntime.getContextProxy().getTelephonyManager().getCallState();
+                    if (!mRuntime.getBatteryLow() && 1 != i && 2 != i) {
+                        if (Config.do_broadCast_message) {
+
+                            ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED + " " + paramStringMessage.isFromCache());
+                            //广播 voice消息
+                            Intent intent = new Intent();
+                            intent.setAction(Constants.ACTION_MESSAGE_RECEIVED);
+                            intent.putExtra(Constants.KEY_MESSAGE_TYPE, "voice");
+                            intent.putExtra(Constants.KEY_MESSAGE_FROM, "广播消息");
+                            intent.putExtra(Constants.KEY_MESSAGE_URL, paramStringMessage.isFromCache());
+
+                            //   playVoice(context,paramStringMessage.isFromCache());
+                            context.sendBroadcast(intent);
+                        }
+
+                        if (Config.noVoiceNotifyDialog == false) {
+
+                            Intent intent = new Intent();
+                            //显示提示窗口
+                            intent.setAction(DIALOG_ACTION);
+                            intent.putExtra("contact", (Parcelable) param2Contact);
+                            context.sendBroadcast(intent);
+                        }
 
-    }else if ("StartMonitor".equals(paramStringMessage.cmd())) {
+                    }
+                }
+            }, 500);
 
-      String recordfilepath=Util.getRecordfilePath(mRuntime, TimeUtil.getSystemTime3());
-      int recordtime=Integer.parseInt(paramStringMessage.isFromCache().trim());
-      mSendMSGHandler.post(new Runnable() {
-        @Override
-        public void run() {
-          AudioService.getInstance().startRecord(recordfilepath);
-        }
-      });
-      mSendMSGHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          AudioService.getInstance().stopRecord();
-          ICLogger.i("Monitor Record to send "+recordfilepath);
-          //创建voiceConent并添加到数据
-          /**
-           *        *        * 1 语音——  1.监听语音      *   2.SOS语音      *      3.扩展
-           *        *          * 2 图片——        1.签到图片      *   2.指令图片      *   3.设备图片      *   4.扩展
-           */
-          final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, "123", recordfilepath,1,1);
-
-          // 把voiceContent拆解成1024的分包
-          Util.parseToVoicePacketSent(voiceContent);
-          //trigger 分包发送
-          if (CoreService.getInstance().getConnection()!=null)
-            CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
+            return true;
+        } else if ("findDev".equals(paramStringMessage.cmd())) {
+
+            mSendMSGHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    final Context context = (Deliver.this.mRuntime.getContextProxy()).context;
+                    Intent intent = new Intent();
+                    ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED + " " + paramStringMessage.isFromCache());
+                    //显示提示窗口
+                    intent.setAction(DIALOG_ACTION);
+                    intent.putExtra("findDev", "Find Device");
+                    context.sendBroadcast(intent);
+                }
+            }, 500);
+
+            return true;
+        } else if ("takephoto".equals(paramStringMessage.cmd())) {
+
+            mSendMSGHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    final Context context = (Deliver.this.mRuntime.getContextProxy()).context;
+                    Intent intent = new Intent();
+                    ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED + " " + paramStringMessage.isFromCache());
+                    //显示提示窗口
+                    intent.setAction(DIALOG_ACTION);
+                    intent.putExtra("takephoto", "Take Photo !");
+                    context.sendBroadcast(intent);
+                }
+            }, 500);
+
+            return true;
+
+        } else if ("StartMonitor".equals(paramStringMessage.cmd())) {
+
+            String recordfilepath = Util.getRecordfilePath(mRuntime, TimeUtil.getSystemTime3());
+            int recordtime = Integer.parseInt(paramStringMessage.isFromCache().trim());
+            mSendMSGHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    AudioService.getInstance().startRecord(recordfilepath);
+                }
+            });
+            mSendMSGHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    AudioService.getInstance().stopRecord();
+                    ICLogger.i("Monitor Record to send " + recordfilepath);
+                    //创建voiceConent并添加到数据
+                    /**
+                     *        *        * 1 语音——        1.监听语音      *   2.SOS语音      *      3.扩展
+                     *        *          * 2 图片——      1.签到图片      *   2.指令图片      *   3.设备图片      *   4.扩展
+                     */
+                    final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, "123", recordfilepath, 1, 1);
+
+                    // 把voiceContent拆解成1024的分包
+                    Util.parseToVoicePacketSent(voiceContent);
+                    //trigger 分包发送
+                    if (CoreService.getInstance().getConnection() != null)
+                        CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
+                }
+            }, recordtime * 1000);
+
+            return true;
         }
-      },recordtime*1000);
 
-      return true;
+        return false;
     }
 
-    return false;
-  }
-
-
-
-  private void playVoice(Context paramContext,String voicefile) {
-    AudioService.getInstance().play(voicefile);
-  }
-
-  public static void releaseOneWakeLock() {
-    if (ReceiveWakeLock == null) {
-      ICLogger.i("ReceiveWakeLock 没有加锁");
-      return;
-    } 
-    if (!wakeLockWifiList && !wakeLockWifiSet && ReceiveWakeLock.isHeld()) {
-      ReceiveWakeLock.release();
-      ReceiveWakeLock = null;
-    } 
-  }
-  
-  public void releaseReceiveWakeLock() {
-    if (this.ReceiveWakeLock == null) {
-      ICLogger.i("ReceiveWakeLock 没有加锁");
-      return;
-    } 
-    if (this.ReceiveWakeLock.isHeld()) {
-      this.ReceiveWakeLock.release();
-      this.wakeLockWifiList = false;
-      this.wakeLockWifiSet = false;
-      this.ReceiveWakeLock = null;
-    } 
-  }
-  public static void connectToWifi(String ssid,String pwd,String encryptType){
-    int networkid;
-    final WifiManager wifiManager = mRuntime.getContextProxy().getWifiManager();
-    wifiEnabled = wifiManager.isWifiEnabled();
-    if (!wifiEnabled)
-    {
-      //没开就打开wifi
-      Util.turnOnWifiForConnect(mRuntime.getContextProxy().context, mRuntime);
-    }
-    if (Util.isConnectWifi(mRuntime.getContextProxy().context)) {
-      networkid = wifiManager.getConnectionInfo().getNetworkId();
-      wifiManager.disconnect();
-      wifiManager.removeNetwork(networkid);
-      wifiManager.saveConfiguration();
+
+    private void playVoice(Context paramContext, String voicefile) {
+        AudioService.getInstance().play(voicefile);
     }
 
-    Deliver.isAppSetWifi = 1;
-    WifiConfiguration wifiConfiguration = Util.GetconfigWifiInfo(mRuntime.getContextProxy().context, ssid, pwd, encryptType);
-    networkid = wifiConfiguration.networkId;
-    wifiManager.removeNetwork(networkid);
-    wifiManager.saveConfiguration();
-    networkid = wifiManager.addNetwork(wifiConfiguration);
-    if (Util.connectWifiByReflectMethod(mRuntime.getContextProxy().context, networkid) == null && !wifiManager.enableNetwork(networkid, true)) {
-      ICLogger.i("连接失败 3");
-      SystemClock.sleep(3000L);
-      String isUserOpen = Util.getSystemProperties("persist.sys.ic.wifi_enable", "false");
-      ICLogger.d("is open by user == > " + isUserOpen);
-      if ("false".equals(isUserOpen)) {
-        //用户手动打开的,那么就不关闭wifi了
-        wifiManager.setWifiEnabled(false);
-      }
-       wakeLockWifiSet = false;
-      releaseOneWakeLock();
-      WifiListWakeLock = Deliver.WakeLockForGetWifiList(mRuntime);
-
-      return;
+    public static void releaseOneWakeLock() {
+        if (ReceiveWakeLock == null) {
+            ICLogger.i("ReceiveWakeLock 没有加锁");
+            return;
+        }
+        if (!wakeLockWifiList && !wakeLockWifiSet && ReceiveWakeLock.isHeld()) {
+            ReceiveWakeLock.release();
+            ReceiveWakeLock = null;
+        }
     }
 
-    if(!wifiEnabled ){
-      //原来wifi没开就关闭wifi
-      Util.turnOffWifiForSleep(mRuntime.getContextProxy().context, mRuntime);
+    public void releaseReceiveWakeLock() {
+        if (this.ReceiveWakeLock == null) {
+            ICLogger.i("ReceiveWakeLock 没有加锁");
+            return;
+        }
+        if (this.ReceiveWakeLock.isHeld()) {
+            this.ReceiveWakeLock.release();
+            this.wakeLockWifiList = false;
+            this.wakeLockWifiSet = false;
+            this.ReceiveWakeLock = null;
+        }
     }
 
-  }
-  public void setWakeupAlarm(Runtime paramRuntime) {
-    AlarmManager alarmManager = (AlarmManager)(paramRuntime.getContextProxy()).context.getSystemService(Context.ALARM_SERVICE);
-    Intent intent = new Intent((paramRuntime.getContextProxy()).context, CoreService.class);
-    intent.setAction(ACTION_WAKEUP_ALARM);
-    PendingIntent pendingIntent = PendingIntent.getService((paramRuntime.getContextProxy()).context, 0, intent, FLAG_UPDATE_CURRENT);
-    alarmManager.cancel(pendingIntent);
-    long l = SystemClock.elapsedRealtime();
-    StringBuilder stringBuilder = new StringBuilder();
-    stringBuilder.append("SDK_INT=");
-    stringBuilder.append(Build.VERSION.SDK_INT);
-    stringBuilder.append(",m=,");
-    stringBuilder.append(23);
-    stringBuilder.append(",kitkat=");
-    stringBuilder.append(19);
-    ICLogger.i(stringBuilder.toString());
-    if (Build.VERSION.SDK_INT >= 19) {
-      alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
-      return;
-    } 
-    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
-  }
-
-  class ConWifiReceiver extends BroadcastReceiver {
-    ConWifiReceiver() {
+    public static void connectToWifi(String ssid, String pwd, String encryptType) {
+        int networkid;
+        final WifiManager wifiManager = mRuntime.getContextProxy().getWifiManager();
+        wifiEnabled = wifiManager.isWifiEnabled();
+        if (!wifiEnabled) {
+            //没开就打开wifi
+            Util.turnOnWifiForConnect(mRuntime.getContextProxy().context, mRuntime);
+        }
+        if (Util.isConnectWifi(mRuntime.getContextProxy().context)) {
+            networkid = wifiManager.getConnectionInfo().getNetworkId();
+            wifiManager.disconnect();
+            wifiManager.removeNetwork(networkid);
+            wifiManager.saveConfiguration();
+        }
+
+        Deliver.isAppSetWifi = 1;
+        WifiConfiguration wifiConfiguration = Util.GetconfigWifiInfo(mRuntime.getContextProxy().context, ssid, pwd, encryptType);
+        networkid = wifiConfiguration.networkId;
+        wifiManager.removeNetwork(networkid);
+        wifiManager.saveConfiguration();
+        networkid = wifiManager.addNetwork(wifiConfiguration);
+        if (Util.connectWifiByReflectMethod(mRuntime.getContextProxy().context, networkid) == null && !wifiManager.enableNetwork(networkid, true)) {
+            ICLogger.i("连接失败 3");
+            SystemClock.sleep(3000L);
+            String isUserOpen = Util.getSystemProperties("persist.sys.ic.wifi_enable", "false");
+            ICLogger.d("is open by user == > " + isUserOpen);
+            if ("false".equals(isUserOpen)) {
+                //用户手动打开的,那么就不关闭wifi了
+                wifiManager.setWifiEnabled(false);
+            }
+            wakeLockWifiSet = false;
+            releaseOneWakeLock();
+            WifiListWakeLock = Deliver.WakeLockForGetWifiList(mRuntime);
+
+            return;
+        }
+
+        if (!wifiEnabled) {
+            //原来wifi没开就关闭wifi
+            Util.turnOffWifiForSleep(mRuntime.getContextProxy().context, mRuntime);
+        }
+
     }
 
-    public void onReceive(final Context var1, Intent var2) {
-      String var3 = var2.getAction();
-      StringBuilder var4 = new StringBuilder();
-      var4.append(" receive action=");
-      var4.append(var3);
-      var4.append(" isAppSetWifi=");
-      var4.append(Deliver.isAppSetWifi);
-      ICLogger.i(var4.toString());
-      if (var3.equals("android.net.conn.CONNECTIVITY_CHANGE")) {
-        if (Deliver.isAppSetWifi == 0) {
-          return;
+    public void setWakeupAlarm(Runtime paramRuntime) {
+        AlarmManager alarmManager = (AlarmManager) (paramRuntime.getContextProxy()).context.getSystemService(Context.ALARM_SERVICE);
+        Intent intent = new Intent((paramRuntime.getContextProxy()).context, CoreService.class);
+        intent.setAction(ACTION_WAKEUP_ALARM);
+        PendingIntent pendingIntent = PendingIntent.getService((paramRuntime.getContextProxy()).context, 0, intent, FLAG_UPDATE_CURRENT);
+        alarmManager.cancel(pendingIntent);
+        long l = SystemClock.elapsedRealtime();
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append("SDK_INT=");
+        stringBuilder.append(Build.VERSION.SDK_INT);
+        stringBuilder.append(",m=,");
+        stringBuilder.append(23);
+        stringBuilder.append(",kitkat=");
+        stringBuilder.append(19);
+        ICLogger.i(stringBuilder.toString());
+        if (Build.VERSION.SDK_INT >= 19) {
+            alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
+            return;
         }
+        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
+    }
 
-        if (Deliver.isAppSetWifi == 1) {
-          Deliver.isAppSetWifi = 0;
-          if (Deliver.this.delayHandler != null) {
-            Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
-            Deliver.this.delayHandler = null;
-          }
+    class ConWifiReceiver extends BroadcastReceiver {
+        ConWifiReceiver() {
         }
 
-        WifiManager var5 = (WifiManager)var1.getSystemService(Context.WIFI_SERVICE);
-        if (((ConnectivityManager)var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
-          ICLogger.i("连接成功");
-          Deliver.isAppSetWifi = 0;
-          Deliver.haveSendH42 = true;
-          Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());
-          if (Deliver.this.delayHandler != null) {
-            Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
-            Deliver.this.delayHandler = null;
-          }
-
-          var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
-          Deliver.this.mMyWifiReceiver = null;
-          Deliver.this.wakeLockWifiSet = false;
-          Deliver.this.releaseOneWakeLock();
-          Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
-        } else {
-          StringBuilder var6 = new StringBuilder();
-          var6.append("连接失败 222 delayHandler=");
-          var6.append(Deliver.this.delayHandler);
-          ICLogger.i(var6.toString());
-          Deliver.isAppSetWifi = 2;
-          var5.reconnect();
-          if (Deliver.this.delayHandler == null) {
-            Deliver.this.delayHandler = new Handler();
-            Deliver.this.delayTh = new Runnable() {
-              public void run() {
-                StringBuilder var1x = new StringBuilder();
-                var1x.append("连接失败 超时 wifiEnabled=");
-                var1x.append(Deliver.this.wifiEnabled);
-                ICLogger.i(var1x.toString());
-                if (Deliver.isAppSetWifi != 1) {
-                  Deliver.isAppSetWifi = 0;
-                  var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
-                  Deliver.this.mMyWifiReceiver = null;
-                  WifiManager var3 = (WifiManager)var1.getSystemService(Context.WIFI_SERVICE);
-                  if (((ConnectivityManager)var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
-                    ICLogger.i("连接成功 1");
+        public void onReceive(final Context var1, Intent var2) {
+            String var3 = var2.getAction();
+            StringBuilder var4 = new StringBuilder();
+            var4.append(" receive action=");
+            var4.append(var3);
+            var4.append(" isAppSetWifi=");
+            var4.append(Deliver.isAppSetWifi);
+            ICLogger.i(var4.toString());
+            if (var3.equals("android.net.conn.CONNECTIVITY_CHANGE")) {
+                if (Deliver.isAppSetWifi == 0) {
+                    return;
+                }
+
+                if (Deliver.isAppSetWifi == 1) {
+                    Deliver.isAppSetWifi = 0;
+                    if (Deliver.this.delayHandler != null) {
+                        Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
+                        Deliver.this.delayHandler = null;
+                    }
+                }
+
+                WifiManager var5 = (WifiManager) var1.getSystemService(Context.WIFI_SERVICE);
+                if (((ConnectivityManager) var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
+                    ICLogger.i("连接成功");
+                    Deliver.isAppSetWifi = 0;
                     Deliver.haveSendH42 = true;
                     Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());
+                    if (Deliver.this.delayHandler != null) {
+                        Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
+                        Deliver.this.delayHandler = null;
+                    }
+
+                    var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
+                    Deliver.this.mMyWifiReceiver = null;
                     Deliver.this.wakeLockWifiSet = false;
                     Deliver.this.releaseOneWakeLock();
                     Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
-                  } else {
-                    int var2 = var3.getConnectionInfo().getNetworkId();
-                    if (var2 != -1) {
-                      var3.disableNetwork(var2);
+                } else {
+                    StringBuilder var6 = new StringBuilder();
+                    var6.append("连接失败 222 delayHandler=");
+                    var6.append(Deliver.this.delayHandler);
+                    ICLogger.i(var6.toString());
+                    Deliver.isAppSetWifi = 2;
+                    var5.reconnect();
+                    if (Deliver.this.delayHandler == null) {
+                        Deliver.this.delayHandler = new Handler();
+                        Deliver.this.delayTh = new Runnable() {
+                            public void run() {
+                                StringBuilder var1x = new StringBuilder();
+                                var1x.append("连接失败 超时 wifiEnabled=");
+                                var1x.append(Deliver.this.wifiEnabled);
+                                ICLogger.i(var1x.toString());
+                                if (Deliver.isAppSetWifi != 1) {
+                                    Deliver.isAppSetWifi = 0;
+                                    var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
+                                    Deliver.this.mMyWifiReceiver = null;
+                                    WifiManager var3 = (WifiManager) var1.getSystemService(Context.WIFI_SERVICE);
+                                    if (((ConnectivityManager) var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
+                                        ICLogger.i("连接成功 1");
+                                        Deliver.haveSendH42 = true;
+                                        Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());
+                                        Deliver.this.wakeLockWifiSet = false;
+                                        Deliver.this.releaseOneWakeLock();
+                                        Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
+                                    } else {
+                                        int var2 = var3.getConnectionInfo().getNetworkId();
+                                        if (var2 != -1) {
+                                            var3.disableNetwork(var2);
 //                      ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));
-                      Deliver.this.wakeLockWifiSet = false;
-                      Deliver.this.releaseOneWakeLock();
-                      Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
-                    } else {
-                      ICLogger.i("连接失败 2-2");
+                                            Deliver.this.wakeLockWifiSet = false;
+                                            Deliver.this.releaseOneWakeLock();
+                                            Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
+                                        } else {
+                                            ICLogger.i("连接失败 2-2");
 //                      ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));
-                      Deliver.this.wakeLockWifiSet = false;
-                      Deliver.this.releaseOneWakeLock();
-                      Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
-                    }
-
-                    if (!Deliver.this.wifiEnabled) {
-                      var3.setWifiEnabled(false);
+                                            Deliver.this.wakeLockWifiSet = false;
+                                            Deliver.this.releaseOneWakeLock();
+                                            Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
+                                        }
+
+                                        if (!Deliver.this.wifiEnabled) {
+                                            var3.setWifiEnabled(false);
+                                        }
+                                    }
+
+                                    Deliver.this.delayHandler = null;
+                                }
+                            }
+                        };
+                        Deliver.this.delayHandler.postDelayed(Deliver.this.delayTh, 30000L);
                     }
-                  }
-
-                  Deliver.this.delayHandler = null;
                 }
-              }
-            };
-            Deliver.this.delayHandler.postDelayed(Deliver.this.delayTh, 30000L);
-          }
-        }
-      }
+            }
 
+        }
     }
-  }
-  
+
 
 }
 
index 2fbb439..fa75ad6 100644 (file)
@@ -10,29 +10,26 @@ import android.hardware.SensorEventListener;
 import android.hardware.SensorManager;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.HandlerThread;
 import android.os.Message;
 import android.os.Messenger;
 import android.os.PowerManager;
-import android.util.Log;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.LocationClient;
-import com.enqualcomm.support.bean.EventLooperHandlerThread;
-import com.enqualcomm.support.bean.StringMessage;
-import com.enqualcomm.support.utils.ICHttpUtil;
-import com.enqualcomm.support.utils.Util;
-import com.ic.jni.ICJniUtils;
-import com.ic.protocols.protocolAPIHelper;
 import com.enqualcomm.support.bean.Runtime;
+import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.heartRateStatus;
 import com.enqualcomm.support.service.base.AbstractInvokeHandlerService;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.ICLogger;
-import com.enqualcomm.support.utils.NettyConnection;
 import com.enqualcomm.support.utils.SimSignalUtil;
 import com.enqualcomm.support.utils.TimeUtil;
+import com.enqualcomm.support.utils.Util;
+import com.ic.jni.ICJniUtils;
+import com.ic.protocols.protocolAPIHelper;
 
 import java.util.Random;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -48,396 +45,397 @@ import static com.enqualcomm.support.Constants.key_ppg;
 import static com.enqualcomm.support.Constants.key_spo2;
 
 public class HeartRateManager extends AbstractInvokeHandlerService implements SensorEventListener {
-  private int mNetworkType;
+    private int mNetworkType;
 
-  private SimSignalUtil mSignalUtil;
+    private SimSignalUtil mSignalUtil;
 
-  private Runtime runtime;
-  private Connection connection;
+    private Runtime runtime;
+    private Connection connection;
 
-  private ScheduledThreadPoolExecutor timerPPG=null;
-  private static Handler mHandler=null;
+    private ScheduledThreadPoolExecutor timerPPG = null;
+    private static Handler mHandler = null;
 
-  private void checkWarning(){
-    //ppg
-    if(runtime.getHRS().ppg_threshold_max>0 && runtime.getHRS().getPPG() >runtime.getHRS().ppg_threshold_max){
+    private void checkWarning() {
+        //ppg
+        if (runtime.getHRS().ppg_threshold_max > 0 && runtime.getHRS().getPPG() > runtime.getHRS().ppg_threshold_max) {
 
-      if(runtime.setAlarmType(Runtime.AlarmType.ALARM_HEART_RATE_HIGH)) {
-        //trigger AP10 报警定位
+            if (runtime.setAlarmType(Runtime.AlarmType.ALARM_HEART_RATE_HIGH)) {
+                //trigger AP10 报警定位
 //        Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-        ICLogger.i("triggerSOSLocationProcess ");
-        LocationClient.getInstance().triggerSOSLocationProcess();
-      }
+                ICLogger.i("triggerSOSLocationProcess ");
+                LocationClient.getInstance().triggerSOSLocationProcess();
+            }
 
-    }else if ( runtime.getHRS().ppg_threshold_min>0 && runtime.getHRS().getPPG()<runtime.getHRS().ppg_threshold_min) {
-      if( runtime.setAlarmType(Runtime.AlarmType.ALARM_HEART_RATE_LOW)) {
-        //trigger AP10 报警定位
+        } else if (runtime.getHRS().ppg_threshold_min > 0 && runtime.getHRS().getPPG() < runtime.getHRS().ppg_threshold_min) {
+            if (runtime.setAlarmType(Runtime.AlarmType.ALARM_HEART_RATE_LOW)) {
+                //trigger AP10 报警定位
 //        Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-        ICLogger.i("triggerSOSLocationProcess ");
-        LocationClient.getInstance().triggerSOSLocationProcess();
-      }
-    }
+                ICLogger.i("triggerSOSLocationProcess ");
+                LocationClient.getInstance().triggerSOSLocationProcess();
+            }
+        }
 
-    //bph
-    if(runtime.getHRS().bph_threshold_max>0 && runtime.getHRS().getBPH() >runtime.getHRS().bph_threshold_max){
+        //bph
+        if (runtime.getHRS().bph_threshold_max > 0 && runtime.getHRS().getBPH() > runtime.getHRS().bph_threshold_max) {
 
-      if(runtime.setAlarmType(Runtime.AlarmType.ALARM_BPH_HIGH)) {
-        //trigger AP10 报警定位
-        ICLogger.i("triggerSOSLocationProcess ");
-        LocationClient.getInstance().triggerSOSLocationProcess();
+            if (runtime.setAlarmType(Runtime.AlarmType.ALARM_BPH_HIGH)) {
+                //trigger AP10 报警定位
+                ICLogger.i("triggerSOSLocationProcess ");
+                LocationClient.getInstance().triggerSOSLocationProcess();
 //        Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-      }
+            }
 
-    }else if ( runtime.getHRS().bph_threshold_min>0 && runtime.getHRS().getBPH()<runtime.getHRS().bph_threshold_min) {
-      if(runtime.setAlarmType(Runtime.AlarmType.ALARM_BPH_LOW)) {
-        //trigger AP10 报警定位
-        ICLogger.i("triggerSOSLocationProcess ");
-        LocationClient.getInstance().triggerSOSLocationProcess();
+        } else if (runtime.getHRS().bph_threshold_min > 0 && runtime.getHRS().getBPH() < runtime.getHRS().bph_threshold_min) {
+            if (runtime.setAlarmType(Runtime.AlarmType.ALARM_BPH_LOW)) {
+                //trigger AP10 报警定位
+                ICLogger.i("triggerSOSLocationProcess ");
+                LocationClient.getInstance().triggerSOSLocationProcess();
 //        Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-      }
-    }
+            }
+        }
 
-    //bpl
-    if(runtime.getHRS().bpl_threshold_max>0 && runtime.getHRS().getBPL() >runtime.getHRS().bpl_threshold_max){
+        //bpl
+        if (runtime.getHRS().bpl_threshold_max > 0 && runtime.getHRS().getBPL() > runtime.getHRS().bpl_threshold_max) {
 
-     if(runtime.setAlarmType(Runtime.AlarmType.ALARM_BPL_HIGH)) {
-       //trigger AP10 报警定位
-       ICLogger.i("triggerSOSLocationProcess ");
-       LocationClient.getInstance().triggerSOSLocationProcess();
+            if (runtime.setAlarmType(Runtime.AlarmType.ALARM_BPL_HIGH)) {
+                //trigger AP10 报警定位
+                ICLogger.i("triggerSOSLocationProcess ");
+                LocationClient.getInstance().triggerSOSLocationProcess();
 //       Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-     }
+            }
 
-    }else if ( runtime.getHRS().bpl_threshold_min>0 && runtime.getHRS().getBPL()<runtime.getHRS().bpl_threshold_min) {
-      if(runtime.setAlarmType(Runtime.AlarmType.ALARM_BPL_LOW)) {
-        //trigger AP10 报警定位
-        ICLogger.i("triggerSOSLocationProcess ");
-        LocationClient.getInstance().triggerSOSLocationProcess();
+        } else if (runtime.getHRS().bpl_threshold_min > 0 && runtime.getHRS().getBPL() < runtime.getHRS().bpl_threshold_min) {
+            if (runtime.setAlarmType(Runtime.AlarmType.ALARM_BPL_LOW)) {
+                //trigger AP10 报警定位
+                ICLogger.i("triggerSOSLocationProcess ");
+                LocationClient.getInstance().triggerSOSLocationProcess();
 //        Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-      }
+            }
 
+        }
     }
-  }
-
-  private static final String HEART_ACTION = "com.ic.action.BLOOD_HEART";
-  private void sendHeartBroadcast(int count,int spo2) {
-    Intent pedIntent = new Intent();
-    pedIntent.setAction(HEART_ACTION);
-    pedIntent.putExtra("BLOOD_HEART", count);
-    pedIntent.putExtra("BLOOD_SPO2", spo2);
-    ICLogger.i("sendHeartBroadcast "+HEART_ACTION+" BLOOD_HEART "+count+" BLOOD_SPO2 "+spo2);
-    runtime.getContextProxy().context.sendBroadcast(pedIntent);
-  }
-  public HeartRateManager(Runtime _runtime,Connection _connection){
-    runtime=_runtime;
-    connection=_connection;
-    currentStat= heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_CLOSED;
-    isTimerStarted=false;
-    mSensorManager = (SensorManager) runtime.getContextProxy().context.getSystemService(SENSOR_SERVICE);
-    mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
-    mHandler = new Handler(EventLooperHandlerThread.makeLooper(HeartRateManager.class.getSimpleName()),new Handler.Callback() {
-      @Override
-      public boolean handleMessage(Message message) {
 
-        switch (message.what) {
-          case 100: {
-            //只有检测PPG成功,且网络连接中才发送数据
-            if (runtime.getHRS().getHeartrateWorkingStat() == heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS) {
-              runtime.getHRS().setLastTestTime(TimeUtil.getSystemTime3());
-              //发送PPG给Launcher,显示在主界面用
-              sendHeartBroadcast(runtime.getHRS().getPPG(),runtime.getHRS().getSpo2());
-              if(Runtime.practising==true){
-                ICLogger.i("自由锻炼中,设置测量心率! "+runtime.getHRS().getPPG()+","+runtime.getHRS().getBPH()+","+runtime.getHRS().getBPL()+","+runtime.getHRS().getSpo2());
-                Runtime.healthInfo.setPPGECGData(runtime.getHRS().getPPG(),runtime.getHRS().getBPH(),runtime.getHRS().getBPL(),runtime.getHRS().getSpo2());
-
-                //因为心率和定位用时都比温度多,但是定位和心率不一定谁用时多,所以两个都需要检测是否结束
-                if(Runtime.healthInfo.check_info_item_finished()){
-                  Runtime.healthInfo.appendBuffer(Runtime.healthInfo.getHealthInfoString());
-                  ICLogger.i("自由锻炼中,测量完成,添加一条记录! 当前条数 "+Runtime.healthInfo.getInfoCount());
-                  Runtime.healthInfo.reset();
-                }
-                if(Runtime.healthInfo.getInfoCount()>=(30-1)){
-                  //超过30次发送数据给服务器
-                  ICLogger.i("自由锻炼中,发送数据给服务器 "+Runtime.healthInfo.getBufferData().length);
-                  mHandler.post(new Runnable() {
-                    @Override
-                    public void run() {
+    private static final String HEART_ACTION = "com.ic.action.BLOOD_HEART";
+
+    private void sendHeartBroadcast(int count, int spo2) {
+        Intent pedIntent = new Intent();
+        pedIntent.setAction(HEART_ACTION);
+        pedIntent.putExtra("BLOOD_HEART", count);
+        pedIntent.putExtra("BLOOD_SPO2", spo2);
+        ICLogger.i("sendHeartBroadcast " + HEART_ACTION + " BLOOD_HEART " + count + " BLOOD_SPO2 " + spo2);
+        runtime.getContextProxy().context.sendBroadcast(pedIntent);
+    }
+
+    public HeartRateManager(Runtime _runtime, Connection _connection) {
+        runtime = _runtime;
+        connection = _connection;
+        currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_CLOSED;
+        isTimerStarted = false;
+        mSensorManager = (SensorManager) runtime.getContextProxy().context.getSystemService(SENSOR_SERVICE);
+        mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
+        HandlerThread handlerThread = new HandlerThread("ic:heart-handler-thread");
+        handlerThread.start();
+        mHandler = new Handler(handlerThread.getLooper(), message -> {
+            switch (message.what) {
+                case 100: {
+                    //只有检测PPG成功,且网络连接中才发送数据
+                    if (runtime.getHRS().getHeartrateWorkingStat() == heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS) {
+                        runtime.getHRS().setLastTestTime(TimeUtil.getSystemTime3());
+                        //发送PPG给Launcher,显示在主界面用
+                        sendHeartBroadcast(runtime.getHRS().getPPG(), runtime.getHRS().getSpo2());
+                        if (Runtime.practising == true) {
+                            ICLogger.i("自由锻炼中,设置测量心率! " + runtime.getHRS().getPPG() + "," + runtime.getHRS().getBPH() + "," + runtime.getHRS().getBPL() + "," + runtime.getHRS().getSpo2());
+                            Runtime.healthInfo.setPPGECGData(runtime.getHRS().getPPG(), runtime.getHRS().getBPH(), runtime.getHRS().getBPL(), runtime.getHRS().getSpo2());
+
+                            //因为心率和定位用时都比温度多,但是定位和心率不一定谁用时多,所以两个都需要检测是否结束
+                            if (Runtime.healthInfo.check_info_item_finished()) {
+                                Runtime.healthInfo.appendBuffer(Runtime.healthInfo.getHealthInfoString());
+                                ICLogger.i("自由锻炼中,测量完成,添加一条记录! 当前条数 " + Runtime.healthInfo.getInfoCount());
+                                Runtime.healthInfo.reset();
+                            }
+                            if (Runtime.healthInfo.getInfoCount() >= (30 - 1)) {
+                                //超过30次发送数据给服务器
+                                ICLogger.i("自由锻炼中,发送数据给服务器 " + Runtime.healthInfo.getBufferData().length);
+                                mHandler.post(new Runnable() {
+                                    @Override
+                                    public void run() {
 //                      ICHttpUtil.uploadData(Runtime.healthInfo.getBufferDataStr(),runtime,TimeUtil.getSystemTime2(),null);
-                      Deliver.sendLocationMSG(protocolAPIHelper.getPRACTICE());
-                      //发送过后重置
-                      Runtime.healthInfo.resetBuffer();
+                                        Deliver.sendLocationMSG(protocolAPIHelper.getPRACTICE());
+                                        //发送过后重置
+                                        Runtime.healthInfo.resetBuffer();
+                                    }
+                                });
+                            }
+                        } else {
+                            StringMessage PPGDATA = protocolAPIHelper.getPPG_ECG_MSG(runtime);
+                            //发送给EQC服务器的
+                            sendBroadcastPPGResult();
+                            //因为协议中没有时间变量,所以只能实时传输,如果恰巧没有网络也只能丢弃,有时间变量的话,可以考虑通过deliver的buffer来进行缓存发送
+                            if (PPGDATA == null) {
+                                StringMessage ppgd = protocolAPIHelper.getPPG_MSG(runtime.getHRS().getPPG(), runtime);
+                                StringMessage bloodd = protocolAPIHelper.getBlood_MSG(runtime.getHRS().getBPH(), runtime.getHRS().getBPL(), runtime);
+                                StringMessage oxd = protocolAPIHelper.getOxygen_MSG(runtime.getHRS().getSpo2(), runtime);
+                                Deliver.sendLocationMSG(ppgd);
+                                Deliver.sendLocationMSG(bloodd);
+                                Deliver.sendLocationMSG(oxd);
+
+                                checkWarning();
+
+                            } else {
+                                Deliver.sendLocationMSG(PPGDATA);
+                                ICLogger.i("Send PPG " + PPGDATA.isFromCache());
+                                checkWarning();
+                            }
+                        }
+
+                    } else {
+                        ICLogger.i("PPG Failed for Timeout!");
                     }
-                  });
+                    stopPPG();
                 }
-              }else {
-                StringMessage PPGDATA = protocolAPIHelper.getPPG_ECG_MSG(runtime);
-                //发送给EQC服务器的
-                sendBroadcastPPGResult();
-                //因为协议中没有时间变量,所以只能实时传输,如果恰巧没有网络也只能丢弃,有时间变量的话,可以考虑通过deliver的buffer来进行缓存发送
-                if (PPGDATA == null) {
-                  StringMessage ppgd = protocolAPIHelper.getPPG_MSG(runtime.getHRS().getPPG(), runtime);
-                  StringMessage bloodd = protocolAPIHelper.getBlood_MSG(runtime.getHRS().getBPH(), runtime.getHRS().getBPL(), runtime);
-                  StringMessage oxd = protocolAPIHelper.getOxygen_MSG(runtime.getHRS().getSpo2(), runtime);
-                  Deliver.sendLocationMSG(ppgd);
-                  Deliver.sendLocationMSG(bloodd);
-                  Deliver.sendLocationMSG(oxd);
-
-                  checkWarning();
+                break;
+                case 200: {
+                    startPPG();
+                }
+                break;
+                case 300: {
+                    stopPPG();
+                }
+                break;
+            }
+            return false;
+        });
 
+    }
+
+
+    private void sendBroadcastPPGResult() {
+        Intent intent = new Intent(ACTION_BROADCAST_PPG);
+        intent.putExtra("ppg", runtime.getHRS().getPPG());
+        intent.putExtra("bph", runtime.getHRS().getBPH());
+        intent.putExtra("bpl", runtime.getHRS().getBPL());
+        intent.putExtra("spo2", runtime.getHRS().getSpo2());
+        intent.putExtra("time", runtime.getHRS().getTestTime());
+        runtime.getContextProxy().context.sendBroadcast(intent);
+    }
+
+    private SensorManager mSensorManager;
+    private Sensor mHeartRate;
+    int PPG;
+    int BPH;
+    int BPL;
+    int SPo2;
+    boolean isWared;
+    boolean isPPGTesting;
+    static boolean isTimerStarted;
+    public static heartRateStatus.HEARTRATE_WORKINGSTAT currentStat;
+    static int delayCount;
+    static int testCount;
+    static int notWaredCount;
+    static int noPPGCount;
+    private final int MAX_TESTTIMES = 30000;//最大延迟测试时间为30秒
+
+    public int randomOxygenValue() {
+        int min = 95;
+        int max = 99;
+        int ret = min + ((int) (new Random().nextFloat() * (max - min)));
+        return ret;
+    }
+
+    public void doPPGtest() {
+
+        int hrsType = ICJniUtils.isPPGavailable();
+        if (hrsType > 0 && hrsType != ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) {
+            PPG = ICJniUtils.getPPG();//调用底层函数保证状态更新。
+            BPH = ICJniUtils.getHighBloodPressure();
+            BPL = ICJniUtils.getLowBloodPressure();
+            SPo2 = ICJniUtils.getSPO2();
+            if (SPo2 == 0) {
+                SPo2 = randomOxygenValue();
+            }
+            isWared = (ICJniUtils.isWeared() == 1);
+            isPPGTesting = (ICJniUtils.isPPGStarted() == 1);
+        } else {
+            isPPGTesting = true;
+        }
+        ICLogger.i("PPG TESTING=" + isPPGTesting + ", isWared=" + isWared + ", PPG=" + PPG + ", BPH=" + BPH + ", BPL=" + BPL + ", SPo2=" + SPo2);
+        if (isPPGTesting) {
+            if (isWared) {
+                if (PPG > 0) {
+                    currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS;
                 } else {
-                  Deliver.sendLocationMSG(PPGDATA);
-                  ICLogger.i("Send PPG " + PPGDATA.isFromCache());
-                  checkWarning();
+                    currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_WARED_AND_TESTING;
                 }
-              }
-
             } else {
-              ICLogger.i("PPG Failed for Timeout!");
+                currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_NOTWARED;
             }
-            stopPPG();
-          }
-           break;
-          case 200: {
-            startPPG();
-          }
-            break;
-          case 300: {
-            stopPPG();
-          }
-          break;
+        } else {
+            currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_CLOSED;
         }
-        return false;
-      }
-    });
-
-  }
-
-
-  private void sendBroadcastPPGResult(){
-    Intent intent=new Intent(ACTION_BROADCAST_PPG);
-    intent.putExtra("ppg",runtime.getHRS().getPPG());
-    intent.putExtra("bph",runtime.getHRS().getBPH());
-    intent.putExtra("bpl",runtime.getHRS().getBPL());
-    intent.putExtra("spo2",runtime.getHRS().getSpo2());
-    intent.putExtra("time",runtime.getHRS().getTestTime());
-    runtime.getContextProxy().context.sendBroadcast(intent);
-  }
-
-  private SensorManager mSensorManager;
-  private Sensor mHeartRate;
-  int PPG;
-  int BPH;
-  int BPL;
-  int SPo2;
-  boolean isWared ;
-  boolean isPPGTesting ;
-  static boolean isTimerStarted;
-  public static heartRateStatus.HEARTRATE_WORKINGSTAT currentStat;
-  static int delayCount;
-  static int testCount;
-  static int notWaredCount;
-  static int noPPGCount;
-  private final int MAX_TESTTIMES=30000;//最大延迟测试时间为30秒
-
-  public int randomOxygenValue()  {
-    int min = 95;
-    int max = 99;
-    int ret=min + ((int) (new Random().nextFloat() * (max - min)));
-    return ret;
-  }
-
-  public void doPPGtest(){
-
-    int hrsType=ICJniUtils.isPPGavailable();
-    if (hrsType>0 && hrsType != ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) {
-      PPG = ICJniUtils.getPPG();//调用底层函数保证状态更新。
-      BPH = ICJniUtils.getHighBloodPressure();
-      BPL = ICJniUtils.getLowBloodPressure();
-      SPo2 = ICJniUtils.getSPO2();
-      if(SPo2==0){
-         SPo2=randomOxygenValue();
-      }
-      isWared = (ICJniUtils.isWeared() == 1);
-      isPPGTesting = (ICJniUtils.isPPGStarted() == 1);
-    }else{
-      isPPGTesting=true;
-    }
-    ICLogger.i("PPG TESTING="+isPPGTesting+", isWared="+isWared+", PPG="+PPG+", BPH="+BPH+", BPL="+BPL+", SPo2="+SPo2);
-    if (isPPGTesting){
-      if (isWared ) {
-        if (PPG > 0) {
-          currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS;
+
+
+        if (currentStat == heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_NOTWARED) {
+            notWaredCount--;
+            if (notWaredCount < 0) { //没有佩戴次数到限制后,停止检测
+                ICLogger.i("HEARTRATE_NOTWARED 超过时限,取消检测报告!");
+                stopPPG();
+            }
+        } else if (currentStat == heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_WARED_AND_TESTING) {
+            noPPGCount--;
+            if (noPPGCount < 0) { //没有佩戴次数到限制后,停止检测
+                ICLogger.i("HEARTRATE WARED And Testing (Wared=1 PPG=0)超过时限,取消检测报告!");
+                stopPPG();
+            }
+        }
+
+
+        if (currentStat == heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS) {
+            runtime.getHRS().setLastHeartrate(PPG, BPH, BPL, SPo2);
+            delayCount--;
+            if (delayCount < 0) //达到延迟时间后,停止检测并发送数据
+                sendAndStopPPG();
+
         } else {
-          currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_WARED_AND_TESTING;
+            runtime.getHRS().setLastHeartrate(0, 0, 0, 0);
+        }
+        runtime.getHRS().setHeartrateStat(currentStat);
+
+
+        testCount--;
+        if (testCount < 0) {
+            ICLogger.i("PPG 超过 " + MAX_TESTTIMES + "秒 未能得出结果,取消检测报告!");
+            stopPPG();
         }
-      }else{
-        currentStat= heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_NOTWARED;
-      }
-    }else{
-      currentStat= heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_CLOSED;
-    }
 
+    }
 
-    if (currentStat== heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_NOTWARED){
-      notWaredCount--;
-      if( notWaredCount <0){ //没有佩戴次数到限制后,停止检测
-        ICLogger.i("HEARTRATE_NOTWARED 超过时限,取消检测报告!");
-        stopPPG();
-      }
-    }else if (currentStat== heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_WARED_AND_TESTING){
-      noPPGCount--;
-      if( noPPGCount <0){ //没有佩戴次数到限制后,停止检测
-        ICLogger.i("HEARTRATE WARED And Testing (Wared=1 PPG=0)超过时限,取消检测报告!");
-        stopPPG();
-      }
+    private void sendAndStopPPG() {
+        //结束和发送数据
+        mHandler.sendEmptyMessage(100);
     }
 
+    PowerManager.WakeLock mWakeLock = null;
 
-    if (currentStat==heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS){
-      runtime.getHRS().setLastHeartrate(PPG,BPH,BPL,SPo2);
-      delayCount--;
-      if (delayCount<0) //达到延迟时间后,停止检测并发送数据
-        sendAndStopPPG();
+    public PowerManager.WakeLock getPPGWakeLock() {
+        mWakeLock = ((PowerManager) (runtime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, HeartRateManager.class.getSimpleName());
+        mWakeLock.acquire(30000L);
+        return mWakeLock;
+    }
 
-    }else{
-      runtime.getHRS().setLastHeartrate(0,0,0,0);
+    public void releaseWakeLock() {
+        if (mWakeLock != null && mWakeLock.isHeld()) {
+            mWakeLock.release();
+        }
+        mWakeLock = null;
     }
-    runtime.getHRS().setHeartrateStat(currentStat);
 
+    public void startPPG() {
 
+        int hrsType = ICJniUtils.isPPGavailable();
+        if (hrsType > 0 && (isTimerStarted == false)) {
+            currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_OPEN;
+            delayCount = 4;//检测成功后4秒发送数据
+            notWaredCount = 5; //初始化没有佩戴的检测次数5,连续5秒没有佩戴则取消检测
+            noPPGCount = 30;//即使佩戴了,但是30秒没有出结果,也认为无效
+            testCount = MAX_TESTTIMES;//测试MAX_TESTTIMES后没有结果也要强制退出
+            isTimerStarted = true;
+            getPPGWakeLock();
+            if (hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) {
 
+                boolean ret = mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_UI);
+                ICLogger.i("Heart Rate PPG_EGC_TYPE_IC66 opened ret :: " + ret);
 
-    testCount--;
-    if (testCount<0)
-    {
-      ICLogger.i("PPG 超过 "+MAX_TESTTIMES+"秒 未能得出结果,取消检测报告!");
-      stopPPG();
-    }
+            } else {
 
-  }
-
-  private void sendAndStopPPG(){
-    //结束和发送数据
-    mHandler.sendEmptyMessage(100);
-  }
-  PowerManager.WakeLock mWakeLock=null;
-  public PowerManager.WakeLock getPPGWakeLock() {
-    mWakeLock = ((PowerManager)(runtime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, HeartRateManager.class.getSimpleName());
-    mWakeLock.acquire(30000L);
-    return mWakeLock;
-  }
-
-  public void releaseWakeLock(){
-    if (mWakeLock!=null && mWakeLock.isHeld()){
-      mWakeLock.release();
+                int ret = ICJniUtils.enablePPG();
+                ICLogger.i("Start PPG test ret=" + ret);
+                timerPPG = new ScheduledThreadPoolExecutor(10);
+                timerPPG.scheduleAtFixedRate(new Runnable() {
+                    @Override
+                    public void run() {
+                        doPPGtest();
+                    }
+                }, 0, 1000, TimeUnit.MILLISECONDS); //1 秒更新一次数据
+
+            }
+        }
     }
-    mWakeLock=null;
-  }
-  public void startPPG(){
-
-    int hrsType=ICJniUtils.isPPGavailable();
-    if ( hrsType > 0  && (isTimerStarted == false) ) {
-      currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_OPEN;
-      delayCount = 4;//检测成功后4秒发送数据
-      notWaredCount = 5; //初始化没有佩戴的检测次数5,连续5秒没有佩戴则取消检测
-      noPPGCount = 30;//即使佩戴了,但是30秒没有出结果,也认为无效
-      testCount = MAX_TESTTIMES;//测试MAX_TESTTIMES后没有结果也要强制退出
-      isTimerStarted = true;
-      getPPGWakeLock();
-      if (hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) {
-
-        boolean ret = mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_UI);
-        ICLogger.i( "Heart Rate PPG_EGC_TYPE_IC66 opened ret :: " + ret);
-
-      } else {
-
-        int ret=ICJniUtils.enablePPG();
-        ICLogger.i("Start PPG test ret="+ret);
-        timerPPG = new ScheduledThreadPoolExecutor(10);
-        timerPPG.scheduleAtFixedRate(new Runnable() {
-          @Override
-          public void run() {
-            doPPGtest();
-          }
-        }, 0, 1000, TimeUnit.MILLISECONDS); //1 秒更新一次数据
-
-      }
+
+    public void stopPPG() {
+        if (isTimerStarted) {
+
+            int hrsType = ICJniUtils.isPPGavailable();
+            if (hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) {
+                mSensorManager.unregisterListener(this);
+                ICLogger.i("Heart Rate PPG_EGC_TYPE_IC66  closed");
+            } else {
+                timerPPG.shutdownNow();
+                timerPPG.purge();
+                ICJniUtils.disablePPG();
+            }
+            isTimerStarted = false;
+        }
+
+        releaseWakeLock();
     }
-  }
-
-  public void stopPPG(){
-    if( isTimerStarted )
-    {
-
-      int hrsType=ICJniUtils.isPPGavailable();
-      if (hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) {
-        mSensorManager.unregisterListener(this);
-        ICLogger.i( "Heart Rate PPG_EGC_TYPE_IC66  closed");
-      }else {
-        timerPPG.shutdownNow();
-        timerPPG.purge();
-        ICJniUtils.disablePPG();
-      }
-      isTimerStarted=false;
+
+    private void callback(Messenger paramMessenger, int paramInt) {
+        if (paramMessenger != null)
+            try {
+                paramMessenger.send(Message.obtain(null, paramInt));
+                return;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
     }
 
-    releaseWakeLock();
-  }
-
-  private void callback(Messenger paramMessenger, int paramInt) {
-    if (paramMessenger != null)
-      try {
-        paramMessenger.send(Message.obtain(null, paramInt));
-        return;
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-  }
-
-  private BroadcastReceiver PPGStartReceiver = new BroadcastReceiver() {
-    public void onReceive(Context param1Context, Intent param1Intent) {
-      if (ACTION_HEATR_RATE_START.equals(param1Intent.getAction())) {
-
-        //此消息来源于BroadCaset,收到开始测试的消息。
-        //此时需要重置HeartRateDetect Timer
-        //倘若有 参数 PPGTestCycle,则根据这个数值进行设置
-        int ppgtestCycle=param1Intent.getIntExtra("PPGTestCycle",-1);
-        if (ppgtestCycle >0){
-          Config.setPPGTestCycle(runtime.getContextProxy().context,ppgtestCycle);
-          runtime.setPpgTestCycle(Config.getPPGTestCycle(runtime.getContextProxy().context));
-          ICLogger.i("get and set PPGTestCycle "+ppgtestCycle);
-        }
-        ICLogger.i("PPGStartReceiver ACTION_HEATR_RATE_START "+ppgtestCycle);
-        CoreService.getInstance().setHeartRateDetectAlarm(runtime.getPpgTestCycle());
+    private BroadcastReceiver PPGStartReceiver = new BroadcastReceiver() {
+        public void onReceive(Context param1Context, Intent param1Intent) {
+            if (ACTION_HEATR_RATE_START.equals(param1Intent.getAction())) {
+
+                //此消息来源于BroadCaset,收到开始测试的消息。
+                //此时需要重置HeartRateDetect Timer
+                //倘若有 参数 PPGTestCycle,则根据这个数值进行设置
+                int ppgtestCycle = param1Intent.getIntExtra("PPGTestCycle", -1);
+                if (ppgtestCycle > 0) {
+                    Config.setPPGTestCycle(runtime.getContextProxy().context, ppgtestCycle);
+                    runtime.setPpgTestCycle(Config.getPPGTestCycle(runtime.getContextProxy().context));
+                    ICLogger.i("get and set PPGTestCycle " + ppgtestCycle);
+                }
+                ICLogger.i("PPGStartReceiver ACTION_HEATR_RATE_START " + ppgtestCycle);
+                CoreService.getInstance().setHeartRateDetectAlarm(runtime.getPpgTestCycle());
 //        HeartRateManager.this.startPPG();
-      }
+            }
 
 
+        }
+    };
+
+    public void regReceiver() {
+        //注册“ACTION_HEATR_RATE_START”的广播接收器,接收来自协议的设置广播
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(ACTION_HEATR_RATE_START);
+        runtime.getContextProxy().context.registerReceiver(PPGStartReceiver, intentFilter);
     }
-  };
-   public void regReceiver(){
-    //注册“ACTION_HEATR_RATE_START”的广播接收器,接收来自协议的设置广播
-    IntentFilter intentFilter = new IntentFilter();
-    intentFilter.addAction(ACTION_HEATR_RATE_START);
-    runtime.getContextProxy().context.registerReceiver(PPGStartReceiver, intentFilter);
-  }
 
-  public void unRegReceiver(){
-    runtime.getContextProxy().context.unregisterReceiver(PPGStartReceiver);
-  }
+    public void unRegReceiver() {
+        runtime.getContextProxy().context.unregisterReceiver(PPGStartReceiver);
+    }
 
-  public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {}
+    public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {
+    }
 
-  public void onAttach(Connection paramConnection, Runtime paramRuntime) {
+    public void onAttach(Connection paramConnection, Runtime paramRuntime) {
 
 //    this.mSignalUtil = SimSignalUtil.getInstance((paramRuntime.getContextProxy()).context);
-    regReceiver();
-  }
+        regReceiver();
+    }
 
-  public void onDetach(Connection paramConnection, Runtime paramRuntime) {
-    unRegReceiver();
-  }
+    public void onDetach(Connection paramConnection, Runtime paramRuntime) {
+        unRegReceiver();
+    }
 
-  public boolean onUserRequest(Intent paramIntent, Connection paramConnection, final Runtime runtime) {
+    public boolean onUserRequest(Intent paramIntent, Connection paramConnection, final Runtime runtime) {
 //    String str = paramIntent.getAction();
 //    if (ACTION_HEATR_RATE_START.equals(str)) {
 ////      this.mSignalUtil = SimSignalUtil.getInstance((runtime.getContextProxy()).context);
@@ -456,135 +454,133 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
 //      }
 //      startPPG();
 //    }
-    return false;
-  }
-
-public static void triggerPPGtest(){
-  if(CoreService.getInstance()!=null)
-  {
-    if (CoreService.getInstance().getRuntime().Anti_off_flag==1) {
-      ICLogger.i("未佩戴,取消 triggerPPGtest!");
-      return;
+        return false;
+    }
+
+    public static void triggerPPGtest() {
+        if (CoreService.getInstance() != null) {
+            if (CoreService.getInstance().getRuntime().Anti_off_flag == 1) {
+                ICLogger.i("未佩戴,取消 triggerPPGtest!");
+                return;
+            }
+        }
+        if (mHandler != null) mHandler.sendEmptyMessage(200);
     }
-  }
-   if (mHandler !=null) mHandler.sendEmptyMessage(200);
-}
 
-  public static void stopPPGtest(){
-    if (mHandler !=null) mHandler.sendEmptyMessage(300);
-  }
+    public static void stopPPGtest() {
+        if (mHandler != null) mHandler.sendEmptyMessage(300);
+    }
 
-  public boolean onUserRequest(Message message, Connection connection, final Runtime runtime) {
+    public boolean onUserRequest(Message message, Connection connection, final Runtime runtime) {
 
 
-    int i = 1;
-    switch (message.what) {
-      case MSG_WHAT_PPG:
+        int i = 1;
+        switch (message.what) {
+            case MSG_WHAT_PPG:
 
-        //接收UI测试后的结果,直接发送到服务器。
-        Bundle bundle3 = message.getData();
-        String  ppg = bundle3.getString(key_ppg);
-        String bph = bundle3.getString(key_bph);
-        String bpl = bundle3.getString(key_bpl);
-        String spo2 = bundle3.getString(key_spo2);
+                //接收UI测试后的结果,直接发送到服务器。
+                Bundle bundle3 = message.getData();
+                String ppg = bundle3.getString(key_ppg);
+                String bph = bundle3.getString(key_bph);
+                String bpl = bundle3.getString(key_bpl);
+                String spo2 = bundle3.getString(key_spo2);
 
-        ICLogger.i("get MSG_WHAT_PPG ppg "+ppg + " , bph "+bph + " , bpl "+bpl + " , spo2 "+spo2);
-        if (ppg == null || bph == null || bpl==null  ||ppg.isEmpty()||bph.isEmpty()||bpl.isEmpty()) {
-          ICLogger.i("MSG_WHAT_PPG Data is null or empty ! Skip!");
-          callback(message.replyTo, Constants.RESULT_ERROR);
+                ICLogger.i("get MSG_WHAT_PPG ppg " + ppg + " , bph " + bph + " , bpl " + bpl + " , spo2 " + spo2);
+                if (ppg == null || bph == null || bpl == null || ppg.isEmpty() || bph.isEmpty() || bpl.isEmpty()) {
+                    ICLogger.i("MSG_WHAT_PPG Data is null or empty ! Skip!");
+                    callback(message.replyTo, Constants.RESULT_ERROR);
 
-          return true;
-        }
-          if (spo2==null ||
-                  (spo2!=null &&
-                          ( (!Util.isNumeric(spo2.trim() )) ||
-                                  (Util.isNumeric(spo2.trim() )&& Integer.parseInt(spo2.trim())<=0)
-                          )
-                  )
-          )
-          {
-
-            int randomint = randomOxygenValue();
-            spo2=String.valueOf(randomint);
-          }
-
-
-        if(Runtime.practising==true){
-          ICLogger.i("自由锻炼中,设置测量心率!");
-          Runtime.healthInfo.setPPGECGData(ppg,bph,bpl,spo2);
-
-          //因为心率和定位用时都比温度多,但是定位和心率不一定谁用时多,所以两个都需要检测是否结束
-          if(Runtime.healthInfo.check_info_item_finished()){
-            Runtime.healthInfo.appendBuffer(Runtime.healthInfo.getHealthInfoString());
-            Runtime.healthInfo.reset();
-          }
-          if(Runtime.healthInfo.getInfoCount()>=(30-1)){
-            //超过30次发送数据给服务器
-            ICLogger.i("发送数据给服务器 "+Runtime.healthInfo.getBufferData().length);
-            mHandler.post(new Runnable() {
-              @Override
-              public void run() {
+                    return true;
+                }
+                if (spo2 == null ||
+                        (spo2 != null &&
+                                ((!Util.isNumeric(spo2.trim())) ||
+                                        (Util.isNumeric(spo2.trim()) && Integer.parseInt(spo2.trim()) <= 0)
+                                )
+                        )
+                ) {
+
+                    int randomint = randomOxygenValue();
+                    spo2 = String.valueOf(randomint);
+                }
+
+
+                if (Runtime.practising == true) {
+                    ICLogger.i("自由锻炼中,设置测量心率!");
+                    Runtime.healthInfo.setPPGECGData(ppg, bph, bpl, spo2);
+
+                    //因为心率和定位用时都比温度多,但是定位和心率不一定谁用时多,所以两个都需要检测是否结束
+                    if (Runtime.healthInfo.check_info_item_finished()) {
+                        Runtime.healthInfo.appendBuffer(Runtime.healthInfo.getHealthInfoString());
+                        Runtime.healthInfo.reset();
+                    }
+                    if (Runtime.healthInfo.getInfoCount() >= (30 - 1)) {
+                        //超过30次发送数据给服务器
+                        ICLogger.i("发送数据给服务器 " + Runtime.healthInfo.getBufferData().length);
+                        mHandler.post(new Runnable() {
+                            @Override
+                            public void run() {
 //                ICHttpUtil.uploadData(Runtime.healthInfo.getBufferDataStr(),runtime,TimeUtil.getSystemTime2(),null);
-                Deliver.sendLocationMSG(protocolAPIHelper.getPRACTICE());
-                //发送过后重置
-                Runtime.healthInfo.resetBuffer();
-              }
-            });
-
-
-          }
-        }else {
-          try {
-            StringMessage PPGDATA = protocolAPIHelper.getPPG_ECG_MSG(Integer.parseInt(ppg), Integer.parseInt(bph), Integer.parseInt(bpl), Integer.parseInt(spo2), runtime);
-            if (PPGDATA == null) {
-              StringMessage ppgd = protocolAPIHelper.getPPG_MSG(Integer.parseInt(ppg), runtime);
-              StringMessage bloodd = protocolAPIHelper.getBlood_MSG(Integer.parseInt(bph), Integer.parseInt(bpl), runtime);
-              StringMessage oxd = protocolAPIHelper.getOxygen_MSG(Integer.parseInt(spo2), runtime);
-              Deliver.sendLocationMSG(ppgd);
-              Deliver.sendLocationMSG(bloodd);
-              Deliver.sendLocationMSG(oxd);
-            } else {
-              Deliver.sendLocationMSG(PPGDATA);
-              ICLogger.i("Send PPG " + PPGDATA.isFromCache());
-            }
-          }catch (Exception e){
-            e.printStackTrace();
-            ICLogger.e(e.getMessage(),e);
-          }
+                                Deliver.sendLocationMSG(protocolAPIHelper.getPRACTICE());
+                                //发送过后重置
+                                Runtime.healthInfo.resetBuffer();
+                            }
+                        });
+
+
+                    }
+                } else {
+                    try {
+                        StringMessage PPGDATA = protocolAPIHelper.getPPG_ECG_MSG(Integer.parseInt(ppg), Integer.parseInt(bph), Integer.parseInt(bpl), Integer.parseInt(spo2), runtime);
+                        if (PPGDATA == null) {
+                            StringMessage ppgd = protocolAPIHelper.getPPG_MSG(Integer.parseInt(ppg), runtime);
+                            StringMessage bloodd = protocolAPIHelper.getBlood_MSG(Integer.parseInt(bph), Integer.parseInt(bpl), runtime);
+                            StringMessage oxd = protocolAPIHelper.getOxygen_MSG(Integer.parseInt(spo2), runtime);
+                            Deliver.sendLocationMSG(ppgd);
+                            Deliver.sendLocationMSG(bloodd);
+                            Deliver.sendLocationMSG(oxd);
+                        } else {
+                            Deliver.sendLocationMSG(PPGDATA);
+                            ICLogger.i("Send PPG " + PPGDATA.isFromCache());
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        ICLogger.e(e.getMessage(), e);
+                    }
+                }
+                callback(message.replyTo, Constants.RESULT_OK);
+
+            default:
+                break;
         }
-        callback(message.replyTo, Constants.RESULT_OK);
 
-      default:
-        break;
+        return true;
     }
 
-    return true;
-  }
-
-  @Override
-  public void onSensorChanged(SensorEvent sensorEvent) {
-    float values[]=sensorEvent.values;
-    int length = values.length;
-    ICLogger.i( "onSensorChanged() is called "+length
-            +" PPG = "+values[0]
-            +", BPH = "+values[1]
-            +", BPL = "+values[2]
-            +", spo2 = "+values[3]
-            +" , Weared = "+values[4]
-    );
-    PPG = (int)values[0];//调用底层函数保证状态更新。
-    BPH = (int)values[1];
-    BPL = (int)values[2];
-    SPo2 = (int)values[3];
-    isWared = ((int)values[4] == 2);
-    isPPGTesting = true;// (ICJniUtils.isPPGStarted() == 1);
-    doPPGtest();
-    /*[0]---心率;[1]---血压高压;[2]---血压低压;[3]---血氧;[4]---佩戴检测(1--脱手,2--上手);*/
-  }
-
-  @Override
-  public void onAccuracyChanged(Sensor sensor, int i) {
-    ICLogger.i("onAccuracyChanged() is called "+sensor.getName()+" accuracy="+i);
-  }
+    @Override
+    public void onSensorChanged(SensorEvent sensorEvent) {
+        float values[] = sensorEvent.values;
+        int length = values.length;
+        ICLogger.i("onSensorChanged() is called " + length
+                + " PPG = " + values[0]
+                + ", BPH = " + values[1]
+                + ", BPL = " + values[2]
+                + ", spo2 = " + values[3]
+                + " , Weared = " + values[4]
+        );
+        PPG = (int) values[0];//调用底层函数保证状态更新。
+        BPH = (int) values[1];
+        BPL = (int) values[2];
+        SPo2 = (int) values[3];
+        isWared = ((int) values[4] == 2);
+        isPPGTesting = true;// (ICJniUtils.isPPGStarted() == 1);
+        doPPGtest();
+        /*[0]---心率;[1]---血压高压;[2]---血压低压;[3]---血氧;[4]---佩戴检测(1--脱手,2--上手);*/
+    }
+
+    @Override
+    public void onAccuracyChanged(Sensor sensor, int i) {
+        ICLogger.i("onAccuracyChanged() is called " + sensor.getName() + " accuracy=" + i);
+    }
 }
 
index d6d2109..96deeb5 100644 (file)
@@ -5,25 +5,23 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Handler;
-import android.support.annotation.Keep;
+import android.os.HandlerThread;
+import android.util.Log;
 
-//import com.eiot.watch_lib.LauncherCtrl;
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.LocationClient;
-import com.enqualcomm.support.bean.EventLooperHandlerThread;
-import com.enqualcomm.support.utils.Util;
-import com.ic.protocols.protocolAPIHelper;
+import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.service.base.AbstractConnectionService;
 import com.enqualcomm.support.utils.AlarmWakeUp;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.DeviceInfoUtil;
 import com.enqualcomm.support.utils.ICLogger;
-import com.enqualcomm.support.utils.NettyConnection;
 import com.enqualcomm.support.utils.NetworkObservable;
-import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.utils.SimSignalUtil;
+import com.enqualcomm.support.utils.Util;
+import com.ic.protocols.protocolAPIHelper;
 
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
@@ -31,151 +29,156 @@ import java.util.concurrent.TimeUnit;
 import rx.Subscription;
 import rx.functions.Action1;
 
+//import com.eiot.watch_lib.LauncherCtrl;
+
 public class KeepAlive extends AbstractConnectionService {
-  private static final long HEARTBEAT_TIMEOUT = 660000L;
-  private static String TAG = KeepAlive.class.getSimpleName();
-  public static boolean connectionError = false;
-  
-  public static boolean isConnected = false;
-  
-  private static boolean isInSleepMode = false;
-
-  private static int mDisconnectByServerCount=0;
-  Connection connection;
-  
-  Context mContext;
-  
-  NetworkObservable mNetworkObservable = new NetworkObservable();
-  
-  Runtime mRuntime;
-  
-  private ShutDownReceiver mShutDownReceiver;
-  
-  private Subscription mSubscription;
-  
-  private int reConnectionNumber;
-
-//服务器收到AP03 会返回BP03,如果PB03 规定时间没收到,则认为发送心跳失败,需要重发,
-  private boolean is_heartBeat_send_success=false;
-  private boolean is_login_send_success=false;
-  private boolean is_ping_send_success=false;
-
-  //如果重试5次还没有连接上,则需要重新断开连接重新连接服务器。
-  private int hearBeatResendCount=0;
-  private int MaxHeartbeatResendTime=6;
-  //每次retry发送心跳的间隔为20秒
-  private int heartBeatRetryTimeout=20;
-
-  private Handler mHandler;
-  //监测 心跳服务器响应的timer
-  private ScheduledThreadPoolExecutor scheduled = null;
-  private Runnable CheckSrvResponseTimerTask=new Runnable() {
-    @Override
-    public void run() {
-      checkSrvResponse();
-    }
-  };
-
-  public KeepAlive(){
-    mHandler = new Handler(EventLooperHandlerThread.makeLooper(KeepAlive.class.getSimpleName()));
-  }
-  public void startResponseCheckTimer(){
-    //联网再重试连接服务器
-    if (SimSignalUtil.checkNet(mRuntime.getContextProxy().context) ) {
-      stopResponseCheckTimer();
-      if (scheduled == null) {
-        scheduled = new ScheduledThreadPoolExecutor(10);
-      }
-      //开始检测重新计数
-      hearBeatResendCount=0;
-      //如果开始进行连接重
-      // {
-      // 试,证明网络断开的,那么KeepAlive也需要重连(心跳包)
-      if (scheduled != null) {
-        scheduled.scheduleAtFixedRate(CheckSrvResponseTimerTask , heartBeatRetryTimeout*1000, heartBeatRetryTimeout*1000,TimeUnit.MILLISECONDS); //delay 3秒先检查一次,然后每5秒重试一次
-      }
+    private static final long HEARTBEAT_TIMEOUT = 660000L;
+    private static String TAG = KeepAlive.class.getSimpleName();
+    public static boolean connectionError = false;
+
+    public static boolean isConnected = false;
+
+    private static boolean isInSleepMode = false;
+
+    private static int mDisconnectByServerCount = 0;
+    Connection connection;
+
+    Context mContext;
+
+    NetworkObservable mNetworkObservable = new NetworkObservable();
+
+    Runtime mRuntime;
+
+    private ShutDownReceiver mShutDownReceiver;
+
+    private Subscription mSubscription;
+
+    private int reConnectionNumber;
+
+    //服务器收到AP03 会返回BP03,如果PB03 规定时间没收到,则认为发送心跳失败,需要重发,
+    private boolean is_heartBeat_send_success = false;
+    private boolean is_login_send_success = false;
+    private boolean is_ping_send_success = false;
+
+    //如果重试5次还没有连接上,则需要重新断开连接重新连接服务器。
+    private int hearBeatResendCount = 0;
+    private int MaxHeartbeatResendTime = 6;
+    //每次retry发送心跳的间隔为20秒
+    private int heartBeatRetryTimeout = 20;
+
+    private Handler mHandler;
+    //监测 心跳服务器响应的timer
+    private ScheduledThreadPoolExecutor scheduled = null;
+    private Runnable CheckSrvResponseTimerTask = new Runnable() {
+        @Override
+        public void run() {
+            checkSrvResponse();
+        }
+    };
+
+    public KeepAlive() {
+        HandlerThread handlerThread = new HandlerThread("ic:keep-alive-handler-thread");
+        handlerThread.start();
+        mHandler = new Handler(handlerThread.getLooper());
     }
-  }
 
-  private Runnable msendMsgAfterHeartbeat=new Runnable() {
-    @Override
-    public void run() {
-      connection.send(protocolAPIHelper.getBindingMSG(mRuntime));
-      if (Config.protocol_no==Config.PROTOCOL_FZD){
-        mHandler.postDelayed(new Runnable() {
-          @Override
-          public void run() {
-            connection.send(protocolAPIHelper.getSyncTimeMSG(mRuntime));
-          }
-        },5000);
-      }
+    public void startResponseCheckTimer() {
+        //联网再重试连接服务器
+        if (SimSignalUtil.checkNet(mRuntime.getContextProxy().context)) {
+            stopResponseCheckTimer();
+            if (scheduled == null) {
+                scheduled = new ScheduledThreadPoolExecutor(10);
+            }
+            //开始检测重新计数
+            hearBeatResendCount = 0;
+            //如果开始进行连接重
+            // {
+            // 试,证明网络断开的,那么KeepAlive也需要重连(心跳包)
+            if (scheduled != null) {
+                scheduled.scheduleAtFixedRate(CheckSrvResponseTimerTask, heartBeatRetryTimeout * 1000, heartBeatRetryTimeout * 1000, TimeUnit.MILLISECONDS); //delay 3秒先检查一次,然后每5秒重试一次
+            }
+        }
     }
-  };
 
-  public void checkSrvResponse(){
+    private final Runnable mSendMsgAfterHeartbeat = new Runnable() {
+        @Override
+        public void run() {
+            connection.send(protocolAPIHelper.getBindingMSG(mRuntime));
+            if (Config.protocol_no == Config.PROTOCOL_FZD) {
+                mHandler.postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        Log.d(TAG, "keep alive .... " + Thread.currentThread().getName());
+                        connection.send(protocolAPIHelper.getSyncTimeMSG(mRuntime));
+                    }
+                }, 5000);
+            }
+        }
+    };
 
-    if (SimSignalUtil.checkNet(mRuntime.getContextProxy().context) ) {
+    public void checkSrvResponse() {
 
-      //如果收到服务器响应BP03,则停止重试,否则 继续发送AP03 心跳包,且继续检查响应
-      if (this.is_heartBeat_send_success ) {
-        ICLogger.i("checkSrvResponse 成功,停止检测!");
-        stopResponseCheckTimer();
-      }else{
-        //心跳发送失败,则认为已经和服务器断开
-        mRuntime.setServerProtocolConnected(false);
-        //如果重试次数大于等于 最大重试次数,则停止重试,等下次心跳时间再行尝试。
-        if (hearBeatResendCount >= MaxHeartbeatResendTime){
-          ICLogger.i("checkSrvResponse "+hearBeatResendCount+"次 >= "+MaxHeartbeatResendTime+" , 则停止重试,等下次心跳时间再行尝试!");
-          stopResponseCheckTimer();
-        }else {
-          //重新发送AP03心跳包
-          ICLogger.i("checkSrvResponse 失败,第" + hearBeatResendCount + "次,重新发送AP03心跳包!");
-          //心跳开始发送的时候,先重置response检测标志
-          is_heartBeat_send_success = false;
-          hearBeatResendCount++;
-          //更新系统的IMEI
-          boolean ret=DeviceInfoUtil.updateImei(mRuntime);
-          ICLogger.i("Update IMEI "+ret);
-
-          //只有曾经login成功过,且上一次成功时间超过15分钟,才会自主断开网络。
-          long currenttime=System.currentTimeMillis();
-          ICLogger.i("只有曾经login或者心跳发送成功过,且上一次成功时间超过15分钟,才会自主断开网络! last longin time "+
-                  mRuntime.lastLoginSuccessTime+" ms from last login time "+(currenttime-mRuntime.lastLoginSuccessTime));
-          if ((mRuntime.lastLoginSuccessTime>0) && ((currenttime- mRuntime.lastLoginSuccessTime) > 15 * 60 * 1000)) {
-            ICLogger.i("超时自主断开网络!");
-            CoreService.getInstance().disconnect_server();
-          }else {
-            if (is_login_send_success) {
-              connection.send(protocolAPIHelper.getHeartbeatMSG(mRuntime));
+        if (SimSignalUtil.checkNet(mRuntime.getContextProxy().context)) {
+
+            //如果收到服务器响应BP03,则停止重试,否则 继续发送AP03 心跳包,且继续检查响应
+            if (this.is_heartBeat_send_success) {
+                ICLogger.i("checkSrvResponse 成功,停止检测!");
+                stopResponseCheckTimer();
             } else {
-              connection.send(protocolAPIHelper.getLoginMSG(mRuntime));
+                //心跳发送失败,则认为已经和服务器断开
+                mRuntime.setServerProtocolConnected(false);
+                //如果重试次数大于等于 最大重试次数,则停止重试,等下次心跳时间再行尝试。
+                if (hearBeatResendCount >= MaxHeartbeatResendTime) {
+                    ICLogger.i("checkSrvResponse " + hearBeatResendCount + "次 >= " + MaxHeartbeatResendTime + " , 则停止重试,等下次心跳时间再行尝试!");
+                    stopResponseCheckTimer();
+                } else {
+                    //重新发送AP03心跳包
+                    ICLogger.i("checkSrvResponse 失败,第" + hearBeatResendCount + "次,重新发送AP03心跳包!");
+                    //心跳开始发送的时候,先重置response检测标志
+                    is_heartBeat_send_success = false;
+                    hearBeatResendCount++;
+                    //更新系统的IMEI
+                    boolean ret = DeviceInfoUtil.updateImei(mRuntime);
+                    ICLogger.i("Update IMEI " + ret);
+
+                    //只有曾经login成功过,且上一次成功时间超过15分钟,才会自主断开网络。
+                    long currenttime = System.currentTimeMillis();
+                    ICLogger.i("只有曾经login或者心跳发送成功过,且上一次成功时间超过15分钟,才会自主断开网络! last longin time " +
+                            mRuntime.lastLoginSuccessTime + " ms from last login time " + (currenttime - mRuntime.lastLoginSuccessTime));
+                    if ((mRuntime.lastLoginSuccessTime > 0) && ((currenttime - mRuntime.lastLoginSuccessTime) > 15 * 60 * 1000)) {
+                        ICLogger.i("超时自主断开网络!");
+                        CoreService.getInstance().disconnect_server();
+                    } else {
+                        if (is_login_send_success) {
+                            connection.send(protocolAPIHelper.getHeartbeatMSG(mRuntime));
+                        } else {
+                            connection.send(protocolAPIHelper.getLoginMSG(mRuntime));
+                        }
+                    }
+                }
             }
-          }
-        }
-      }
 
-    }else{
-      //没有网络就不用重新尝试连接网络了。网络连接后再重新尝试联网
-      ICLogger.i("checkSrvResponse stop , 没有网络就不用重新尝试检测服务器响应和重新发送心跳包了!");
+        } else {
+            //没有网络就不用重新尝试连接网络了。网络连接后再重新尝试联网
+            ICLogger.i("checkSrvResponse stop , 没有网络就不用重新尝试检测服务器响应和重新发送心跳包了!");
 
-      stopResponseCheckTimer();
+            stopResponseCheckTimer();
+        }
     }
-  }
 
 
-
-  public void stopResponseCheckTimer(){
-    if (scheduled !=null){
-      scheduled.shutdownNow();
+    public void stopResponseCheckTimer() {
+        if (scheduled != null) {
+            scheduled.shutdownNow();
 //      Runnable tmp= scheduled.getQueue().poll();
 //      while (tmp!=null){
 //        scheduled.remove(tmp);
 //      }
-      scheduled.setContinueExistingPeriodicTasksAfterShutdownPolicy(true);
-      scheduled.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
+            scheduled.setContinueExistingPeriodicTasksAfterShutdownPolicy(true);
+            scheduled.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
 //      scheduled.setRemoveOnCancelPolicy(true);
-      ICLogger.i("Wait for thread pool getContinueExistingPeriodicTasksAfterShutdownPolicy " +scheduled.getContinueExistingPeriodicTasksAfterShutdownPolicy()+
-              "\ngetExecuteExistingDelayedTasksAfterShutdownPolicy "+scheduled.getExecuteExistingDelayedTasksAfterShutdownPolicy());//+
+            ICLogger.i("Wait for thread pool getContinueExistingPeriodicTasksAfterShutdownPolicy " + scheduled.getContinueExistingPeriodicTasksAfterShutdownPolicy() +
+                    "\ngetExecuteExistingDelayedTasksAfterShutdownPolicy " + scheduled.getExecuteExistingDelayedTasksAfterShutdownPolicy());//+
 //              "\ngetRemoveOnCancelPolicy "+scheduled.getRemoveOnCancelPolicy());
 //      while(!scheduled.isTerminated())
 //      {
@@ -190,215 +193,215 @@ public class KeepAlive extends AbstractConnectionService {
 //          e.printStackTrace();
 //        }
 //      }
-      scheduled.purge();
-      scheduled = null;
+            scheduled.purge();
+            scheduled = null;
+        }
+
+        ICLogger.i(" stopResponseCheckTimer Done ");
     }
 
-    ICLogger.i(" stopResponseCheckTimer Done ");
-  }
-
-
-  
-  public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {
-
-    ICLogger.i("onAlarmClock");
-
-  }
-  
-  public void onAttach(final Connection connection, final Runtime runtime) {
-    this.mRuntime = runtime;
-    this.mContext = (runtime.getContextProxy()).context;
-    this.mNetworkObservable.register(this.mContext);
-    this.connection = connection;
-    this.mSubscription = this.mNetworkObservable.onChange().subscribe(new Action1<Integer>() {
-          private boolean first;
-          
-          public void call(Integer param1Integer) {
-            StringBuilder stringBuilder = new StringBuilder();
-            stringBuilder.append("yls  aBoolean=");
-            stringBuilder.append(param1Integer);
-            stringBuilder.append(",,first=");
-            stringBuilder.append(this.first);
-            ICLogger.i(stringBuilder.toString());
-            if (param1Integer.intValue() > 1) {
-              //返回值大于0 证明是网络连接成功,开始重连服务器
-              if (this.first) {
-                this.first = false;
-                return;
-              }
-              ICLogger.i("数据网络连接成功,重新连接服务器。");
-              CoreService.getInstance().ReConnectToServer();
-            } 
-          }
+
+    public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {
+
+        ICLogger.i("onAlarmClock");
+
+    }
+
+    public void onAttach(final Connection connection, final Runtime runtime) {
+        this.mRuntime = runtime;
+        this.mContext = (runtime.getContextProxy()).context;
+        this.mNetworkObservable.register(this.mContext);
+        this.connection = connection;
+        this.mSubscription = this.mNetworkObservable.onChange().subscribe(new Action1<Integer>() {
+            private boolean first;
+
+            public void call(Integer param1Integer) {
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.append("yls  aBoolean=");
+                stringBuilder.append(param1Integer);
+                stringBuilder.append(",,first=");
+                stringBuilder.append(this.first);
+                ICLogger.i(stringBuilder.toString());
+                if (param1Integer.intValue() > 1) {
+                    //返回值大于0 证明是网络连接成功,开始重连服务器
+                    if (this.first) {
+                        this.first = false;
+                        return;
+                    }
+                    ICLogger.i("数据网络连接成功,重新连接服务器。");
+                    CoreService.getInstance().ReConnectToServer();
+                }
+            }
         });
-    IntentFilter intentFilter = new IntentFilter();
-    intentFilter.addAction("android.intent.action.ACTION_SHUTDOWN");
-    this.mShutDownReceiver = new ShutDownReceiver();
-    this.mContext.registerReceiver(this.mShutDownReceiver, intentFilter);
-  }
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction("android.intent.action.ACTION_SHUTDOWN");
+        this.mShutDownReceiver = new ShutDownReceiver();
+        this.mContext.registerReceiver(this.mShutDownReceiver, intentFilter);
+    }
 
     @Override
     public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {
 
 
 //    if (isConnected)
-    //如果KeepAlive被关闭说明网络有问题,因此开启重试联网机制
-    stopResponseCheckTimer();
+        //如果KeepAlive被关闭说明网络有问题,因此开启重试联网机制
+        stopResponseCheckTimer();
 
-    if (false) {
-      if (ErrorMsg.equals("DIS_CONNECT_BY_SERVERSIDE")) {
-        if (mDisconnectByServerCount < 3) {//被服务器拒绝连续拒绝3次后才停止重试
-          CoreService.getInstance().startConnectionRetryTimer();
+        if (false) {
+            if (ErrorMsg.equals("DIS_CONNECT_BY_SERVERSIDE")) {
+                if (mDisconnectByServerCount < 3) {//被服务器拒绝连续拒绝3次后才停止重试
+                    CoreService.getInstance().startConnectionRetryTimer();
+                } else {
+                    ICLogger.i("服务器主动断开超过连续3次,IMEI不对或者命令格式错误!停止重试连接服务器,等待重启或者下一次网络重连。");
+                }
+                mDisconnectByServerCount++;
+            } else {
+                mDisconnectByServerCount = 0; //如果不是被服务器拒绝,则重置 计数。
+                CoreService.getInstance().startConnectionRetryTimer();
+            }
         } else {
-          ICLogger.i("服务器主动断开超过连续3次,IMEI不对或者命令格式错误!停止重试连接服务器,等待重启或者下一次网络重连。");
+            CoreService.getInstance().startConnectionRetryTimer();
         }
-        mDisconnectByServerCount++;
-      } else {
-        mDisconnectByServerCount = 0; //如果不是被服务器拒绝,则重置 计数。
-        CoreService.getInstance().startConnectionRetryTimer();
-      }
-    }else{
-      CoreService.getInstance().startConnectionRetryTimer();
-    }
-    connectionError = true;
-    isConnected = false;
-    paramRuntime.setServerProtocolConnected(false);
-
-    is_ping_send_success=false;
-    is_login_send_success=false;
-    is_heartBeat_send_success=false;
-
-      //发送广播 服务器断开链接
-    paramRuntime.getContextProxy().sendBroadcastServerConnectionChanged(false);
-    StringBuilder stringBuilder = new StringBuilder();
-    stringBuilder.append("onConnectionClose=");
-    stringBuilder.append(",set KeepAlive isConnected = false");
-    ICLogger.i(stringBuilder.toString());
+        connectionError = true;
+        isConnected = false;
+        paramRuntime.setServerProtocolConnected(false);
+
+        is_ping_send_success = false;
+        is_login_send_success = false;
+        is_heartBeat_send_success = false;
+
+        //发送广播 服务器断开链接
+        paramRuntime.getContextProxy().sendBroadcastServerConnectionChanged(false);
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append("onConnectionClose=");
+        stringBuilder.append(",set KeepAlive isConnected = false");
+        ICLogger.i(stringBuilder.toString());
 //    LauncherCtrl.getInstance(this.mContext).setStatusBarIcon("server_connected", STATUS_BAR_STATE_SERVER_CONNECTED_OFF);
 //网络断开后,重连成功后发送一个定位
 //    CoreService.needLocateInAfterHeartBeat=true;
-    return false;
-  }
+        return false;
+    }
+
     public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) {
 
-    StringBuilder stringBuilder = new StringBuilder();
-    stringBuilder.append("onConnectionOpen connectionError=");
-    stringBuilder.append(connectionError);
-    stringBuilder.append(",sInSleepMode =");
-    stringBuilder.append(isInSleepMode);
-    stringBuilder.append(",set KeepAlive isConnected = true");
-    ICLogger.i(stringBuilder.toString());
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append("onConnectionOpen connectionError=");
+        stringBuilder.append(connectionError);
+        stringBuilder.append(",sInSleepMode =");
+        stringBuilder.append(isInSleepMode);
+        stringBuilder.append(",set KeepAlive isConnected = true");
+        ICLogger.i(stringBuilder.toString());
 //    if (!connectionError) {
-    connectionError = false;
+        connectionError = false;
 
-    //更新系统的IMEI
-    boolean ret=DeviceInfoUtil.updateImei(paramRuntime);
-    ICLogger.i("Update IMEI "+ret);
-    //发送登录包
-    is_login_send_success=false;
+        //更新系统的IMEI
+        boolean ret = DeviceInfoUtil.updateImei(paramRuntime);
+        ICLogger.i("Update IMEI " + ret);
+        //发送登录包
+        is_login_send_success = false;
 
-    isConnected = true;
+        isConnected = true;
 
-    Util.mSleep(1000);
+        Util.mSleep(1000);
 
-    connection.send(protocolAPIHelper.getLoginMSG(paramRuntime));
+        connection.send(protocolAPIHelper.getLoginMSG(paramRuntime));
 
 //    this.firstReConnected = true;
 //    this.idleTimeMillis = SystemClock.elapsedRealtime();
 
-    return false;
-  }
-
-  public void onDetach(Connection paramConnection, Runtime paramRuntime) {
-    if (this.mSubscription != null && !this.mSubscription.isUnsubscribed())
-      this.mSubscription.unsubscribe(); 
-    this.mNetworkObservable.unregister(this.mContext);
-    this.mContext.unregisterReceiver(this.mShutDownReceiver);
-  }
-  
-  public void onHeartAlarm(Connection paramNettyConnection, Runtime paramRuntime) {
-    ICLogger.i("onHeartAlarm");
-
-    stopResponseCheckTimer();
-    //心跳开始发送的时候,先重置response检测标志
-    is_heartBeat_send_success=false;
-
-    //这个是正常心跳包,暂时不能认为服务器连接时失败的,所以正常发送检测。
-    //发送心跳包
-    connection.send(protocolAPIHelper.getHeartbeatMSG(paramRuntime));
+        return false;
+    }
+
+    public void onDetach(Connection paramConnection, Runtime paramRuntime) {
+        if (this.mSubscription != null && !this.mSubscription.isUnsubscribed())
+            this.mSubscription.unsubscribe();
+        this.mNetworkObservable.unregister(this.mContext);
+        this.mContext.unregisterReceiver(this.mShutDownReceiver);
+    }
+
+    public void onHeartAlarm(Connection paramNettyConnection, Runtime paramRuntime) {
+        ICLogger.i("onHeartAlarm");
+
+        stopResponseCheckTimer();
+        //心跳开始发送的时候,先重置response检测标志
+        is_heartBeat_send_success = false;
+
+        //这个是正常心跳包,暂时不能认为服务器连接时失败的,所以正常发送检测。
+        //发送心跳包
+        connection.send(protocolAPIHelper.getHeartbeatMSG(paramRuntime));
         //发送完心跳后,开始检查服务器响应
-    startResponseCheckTimer();
+        startResponseCheckTimer();
 
 
-  }
+    }
 
-  public boolean onReceive(StringMessage paramStringMessage, Connection paramConnection, Runtime paramRuntime) {
+    public boolean onReceive(StringMessage paramStringMessage, Connection paramConnection, Runtime paramRuntime) {
 //    this.idleTimeMillis = SystemClock.elapsedRealtime();
-    if ("heartbeat".equals(paramStringMessage.cmd())) {
-      AlarmWakeUp.isNeedWakeUpAlarm(paramRuntime);
+        if ("heartbeat".equals(paramStringMessage.cmd())) {
+            AlarmWakeUp.isNeedWakeUpAlarm(paramRuntime);
 
 //      收到心跳才认为是已经连接了服务器
-      paramRuntime.setServerProtocolConnected(true);
+            paramRuntime.setServerProtocolConnected(true);
 //      isConnected = true;
-      is_heartBeat_send_success=true;
-      paramRuntime.lastLoginSuccessTime=System.currentTimeMillis();
+            is_heartBeat_send_success = true;
+            paramRuntime.lastLoginSuccessTime = System.currentTimeMillis();
 //      LauncherCtrl.getInstance(this.mContext).setStatusBarIcon("server_connected", STATUS_BAR_STATE_SERVER_CONNECTED_ON);
 //      Deliver.triggerSendThread(); //链接上就尝试清除 buffer中的数据
 
-      if(!is_ping_send_success) {
-        //心跳结束后执行,且只在重新登陆后执行一次
-        mHandler.post(msendMsgAfterHeartbeat);
-        is_ping_send_success=true;
-      }
-      if (CoreService.needLocateInAfterHeartBeat==true){
-        //第一次启动或者系统Close后重连的时候,重置LocationCycle
-        CoreService.needLocateInAfterHeartBeat=false;
-        LocationClient.setForceLocation(1);
-        CoreService.getInstance().setLocationAlarm(paramRuntime.getLocationInstance().getWorkingMod());
-      }
-    }else   if (paramStringMessage.cmd().equals("login")) {
-      //广播服务器连接成功的消息
-      paramRuntime.getContextProxy().sendBroadcastServerConnectionChanged(true);
-      //登录包收到就停止重链接服务器
-      CoreService.getInstance().stopConnectionRetryTimer();
-      is_login_send_success=true;
-      //收到登录包反馈后再发送心跳
-
-      //心跳开始发送的时候,先重置response检测标志
-      is_heartBeat_send_success=false;
-      is_ping_send_success=false;
-      paramRuntime.lastLoginSuccessTime=System.currentTimeMillis();
-      //发送心跳包
-
-      //这时重新连接服务器才进行的连接,理论上close已经设置false,此次可以认为协议定然断开,所以设置为false作为双重保险。
-      mRuntime.setServerProtocolConnected(false);
-      connection.send(protocolAPIHelper.getHeartbeatMSG(paramRuntime));
-      //发送完心跳后,开始检查服务器响应
-
-      startResponseCheckTimer();
+            if (!is_ping_send_success) {
+                //心跳结束后执行,且只在重新登陆后执行一次
+                mHandler.post(mSendMsgAfterHeartbeat);
+                is_ping_send_success = true;
+            }
+            if (CoreService.needLocateInAfterHeartBeat == true) {
+                //第一次启动或者系统Close后重连的时候,重置LocationCycle
+                CoreService.needLocateInAfterHeartBeat = false;
+                LocationClient.setForceLocation(1);
+                CoreService.getInstance().setLocationAlarm(paramRuntime.getLocationInstance().getWorkingMod());
+            }
+        } else if (paramStringMessage.cmd().equals("login")) {
+            //广播服务器连接成功的消息
+            paramRuntime.getContextProxy().sendBroadcastServerConnectionChanged(true);
+            //登录包收到就停止重链接服务器
+            CoreService.getInstance().stopConnectionRetryTimer();
+            is_login_send_success = true;
+            //收到登录包反馈后再发送心跳
+
+            //心跳开始发送的时候,先重置response检测标志
+            is_heartBeat_send_success = false;
+            is_ping_send_success = false;
+            paramRuntime.lastLoginSuccessTime = System.currentTimeMillis();
+            //发送心跳包
 
+            //这时重新连接服务器才进行的连接,理论上close已经设置false,此次可以认为协议定然断开,所以设置为false作为双重保险。
+            mRuntime.setServerProtocolConnected(false);
+            connection.send(protocolAPIHelper.getHeartbeatMSG(paramRuntime));
+            //发送完心跳后,开始检查服务器响应
 
+            startResponseCheckTimer();
+
+
+        }
+        return false;
     }
-    return false;
-  }
-
-
-  public void setSleepMode(boolean paramBoolean) {
-    isInSleepMode = paramBoolean;
-  }
-  
-  class ShutDownReceiver extends BroadcastReceiver {
-    public void onReceive(Context param1Context, Intent param1Intent) {
-      boolean bool = param1Intent.getBooleanExtra("reboot", false);
-      ICLogger.i("Shutdown Received! reboot="+bool);
-      if (!bool && !KeepAlive.this.mRuntime.isShutdown()){
-        /*电量低,不是重启,且不是服务器让关闭的*/
-          KeepAlive.this.mRuntime.setAlarmType(Runtime.AlarmType.ALARM_POWER_OFF);
-          ICLogger.i("triggerSOSLocationProcess ");
-          LocationClient.getInstance().triggerSOSLocationProcess();
+
+
+    public void setSleepMode(boolean paramBoolean) {
+        isInSleepMode = paramBoolean;
+    }
+
+    class ShutDownReceiver extends BroadcastReceiver {
+        public void onReceive(Context param1Context, Intent param1Intent) {
+            boolean bool = param1Intent.getBooleanExtra("reboot", false);
+            ICLogger.i("Shutdown Received! reboot=" + bool);
+            if (!bool && !KeepAlive.this.mRuntime.isShutdown()) {
+                /*电量低,不是重启,且不是服务器让关闭的*/
+                KeepAlive.this.mRuntime.setAlarmType(Runtime.AlarmType.ALARM_POWER_OFF);
+                ICLogger.i("triggerSOSLocationProcess ");
+                LocationClient.getInstance().triggerSOSLocationProcess();
 //          Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(KeepAlive.this.mRuntime));
-          ICLogger.i("Shutdown Received! send AP10 !");
-      }
+                ICLogger.i("Shutdown Received! send AP10 !");
+            }
+        }
     }
-  }
 }
index 3e29f43..ec32528 100644 (file)
@@ -3,7 +3,6 @@ package com.enqualcomm.support.service;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -14,13 +13,11 @@ import android.os.Handler;
 import android.os.Message;
 import android.os.Messenger;
 import android.telephony.PhoneStateListener;
-import android.telephony.PreciseCallState;
 import android.telephony.TelephonyManager;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.ICContentProvider;
-import com.enqualcomm.support.MainActivity;
 import com.enqualcomm.support.bean.Alarm;
 import com.enqualcomm.support.bean.Antioff;
 import com.enqualcomm.support.bean.EventLooperHandlerThread;
@@ -28,7 +25,6 @@ import com.enqualcomm.support.bean.NoticeContent;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.Silent;
 import com.enqualcomm.support.bean.StheartRate;
-
 import com.enqualcomm.support.service.base.AbstractInvokeHandlerService;
 import com.enqualcomm.support.utils.AlarmHelper;
 import com.enqualcomm.support.utils.Connection;
@@ -45,335 +41,330 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Iterator;
-import java.util.concurrent.TimeUnit;
 
-import static android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED;
 import static android.telephony.TelephonyManager.CALL_STATE_OFFHOOK;
 import static android.telephony.TelephonyManager.CALL_STATE_RINGING;
 import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.ACTION_ANTIOFF_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.ACTION_CARE_ALARM;
 import static com.enqualcomm.support.Constants.ACTION_CLOSE_UNREAD_MSG;
-import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;
 import static com.enqualcomm.support.Constants.ACTION_NOTICE_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.OTHER_ALARM_END;
 import static com.enqualcomm.support.Constants.OTHER_ALARM_START;
-import static com.enqualcomm.support.Constants.SERVICE_CLS_NAME;
-import static com.enqualcomm.support.Constants.SERVICE_PKG_NAME;
 
 public class SilentManager extends AbstractInvokeHandlerService {
-  private static final long ONE_WEEK = 604800000L;
-  private static final long ONE_DAY = 86400000L;
-
-  private ArrayList<Alarm> alarms;
-  private boolean haveHandSilence;
-  private boolean isCalling;
-  AlarmManager mAlarmManager;
-  private SilentManager.AlramReceiver mAlramReceiver;
-  Connection mConnection;
-
-  private static Handler mHandler;
-  static{
-    mHandler = new Handler(EventLooperHandlerThread.makeLooper(SilentManager.class.getSimpleName()));
-  }
-  ContentObserver mContentObserver = new ContentObserver(mHandler) {
-    public void onChange(boolean var1) {
-      ICLogger.i("静默有变化");
-      SilentManager.this.silentList = SilentManager.this.querySilent();
-      SilentManager.this.getSilentListStartAndEndTime();
-      SilentManager.this.handleSilent(mRuntime, true);
-    }
-  };
-  private Context mContext;
-  private DBHelper mDbHelper;
-  private boolean mInSilent;
-  private String mInterval;
-  private boolean mIsNeedAntioff;
-  private boolean mIsStheartRate;
-  private MissedCallContentObserver mMissedCallContentObserver;
-  Runtime mRuntime;
-  private int mStheartRateInterval;
-  private int mTodayWeek;
-  private boolean mValue_isSilence;
-
-  public static final int PRECISE_CALL_STATE_NOT_VALID = -1;
-  public static final int PRECISE_CALL_STATE_IDLE = 0;  //空闲
-  public static final int PRECISE_CALL_STATE_ACTIVE = 1; //正在通话
-  public static final int PRECISE_CALL_STATE_HOLDING = 2; //通话挂起
-  public static final int PRECISE_CALL_STATE_DIALING = 3; //拨号开始
-  public static final int PRECISE_CALL_STATE_ALERTING = 4; //正在呼出
-  public static final int PRECISE_CALL_STATE_INCOMING = 5; //对方来电
-  public static final int PRECISE_CALL_STATE_WAITING = 6; //第三方来电等待
-  public static final int PRECISE_CALL_STATE_DISCONNECTED = 7; //挂断完成
-  public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; //正在挂断
-
-  private static SilentManager mSilentManger=null;
-
-  public static SilentManager getInstance(){
-    if (mSilentManger==null)
-      mSilentManger=new SilentManager();
-    return mSilentManger;
-  }
-  private PhoneStateListener phoneStateListener = new PhoneStateListener() {
-    public void onCallStateChanged(int state, String incomingNumber) {
-      super.onCallStateChanged(state, incomingNumber);
-
-      ICLogger.i("========onCallStateChanged state "+state+", incomingNumber "+incomingNumber);
-      switch(state) {
-        case PRECISE_CALL_STATE_DISCONNECTING: //挂电话
-        case PRECISE_CALL_STATE_DISCONNECTED: //挂电话
-          isCalling = false;
+    private static final long ONE_WEEK = 604800000L;
+    private static final long ONE_DAY = 86400000L;
+
+    private ArrayList<Alarm> alarms;
+    private boolean haveHandSilence;
+    private boolean isCalling;
+    AlarmManager mAlarmManager;
+    private SilentManager.AlramReceiver mAlramReceiver;
+    Connection mConnection;
+
+    private static Handler mHandler;
+
+    static {
+        mHandler = new Handler(EventLooperHandlerThread.getInstance().makeLooper());
+    }
+
+    ContentObserver mContentObserver = new ContentObserver(mHandler) {
+        public void onChange(boolean var1) {
+            ICLogger.i("静默有变化");
+            SilentManager.this.silentList = SilentManager.this.querySilent();
+            SilentManager.this.getSilentListStartAndEndTime();
+            SilentManager.this.handleSilent(mRuntime, true);
+        }
+    };
+    private Context mContext;
+    private DBHelper mDbHelper;
+    private boolean mInSilent;
+    private String mInterval;
+    private boolean mIsNeedAntioff;
+    private boolean mIsStheartRate;
+    private MissedCallContentObserver mMissedCallContentObserver;
+    Runtime mRuntime;
+    private int mStheartRateInterval;
+    private int mTodayWeek;
+    private boolean mValue_isSilence;
+
+    public static final int PRECISE_CALL_STATE_NOT_VALID = -1;
+    public static final int PRECISE_CALL_STATE_IDLE = 0;  //空闲
+    public static final int PRECISE_CALL_STATE_ACTIVE = 1; //正在通话
+    public static final int PRECISE_CALL_STATE_HOLDING = 2; //通话挂起
+    public static final int PRECISE_CALL_STATE_DIALING = 3; //拨号开始
+    public static final int PRECISE_CALL_STATE_ALERTING = 4; //正在呼出
+    public static final int PRECISE_CALL_STATE_INCOMING = 5; //对方来电
+    public static final int PRECISE_CALL_STATE_WAITING = 6; //第三方来电等待
+    public static final int PRECISE_CALL_STATE_DISCONNECTED = 7; //挂断完成
+    public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; //正在挂断
+
+    private static SilentManager mSilentManger = null;
+
+    public static SilentManager getInstance() {
+        if (mSilentManger == null)
+            mSilentManger = new SilentManager();
+        return mSilentManger;
+    }
+
+    private PhoneStateListener phoneStateListener = new PhoneStateListener() {
+        public void onCallStateChanged(int state, String incomingNumber) {
+            super.onCallStateChanged(state, incomingNumber);
+
+            ICLogger.i("========onCallStateChanged state " + state + ", incomingNumber " + incomingNumber);
+            switch (state) {
+                case PRECISE_CALL_STATE_DISCONNECTING: //挂电话
+                case PRECISE_CALL_STATE_DISCONNECTED: //挂电话
+                    isCalling = false;
 //          if (SilentManager.this.haveHandSilence) {
 //            SilentManager.this.handSilence(SilentManager.this.mContext, SilentManager.this.mValue_isSilence);
 //          }
-          if(ICAudioManager.needMute==true)
-          {
+                    if (ICAudioManager.needMute == true) {
 //            ICAudioManager.restoreVolumn(mContext); //2秒后恢复音量
-            mHandler.postDelayed(new Runnable() {
-              @Override
-              public void run() {
-                ICAudioManager.restoreVolumn(mContext); //2秒后恢复音量
-                ICAudioManager.needMute=false;
-              }
-            },2000);
-          }
-          ICLogger.i("========Hung up!");
-          break;
-        case PRECISE_CALL_STATE_INCOMING: //来电
-        case PRECISE_CALL_STATE_ALERTING:
-        case PRECISE_CALL_STATE_DIALING:
-          isCalling = true;
-          Intent var3 = new Intent();
-          var3.setAction(ACTION_CLOSE_UNREAD_MSG);
-          mContext.sendBroadcast(var3);
-
-          ICLogger.i("========Ring!");
-          if(ICAudioManager.needMute==true)
-          {
-            ICAudioManager.setVolumnMute(mContext);
-            mHandler.postDelayed(new Runnable() {
-              @Override
-              public void run() {
-                ICAudioManager.setVolumnMute(mContext); //2秒后恢复音量
-              }
-            },2000);
-
-          }
-          break;
-        case PRECISE_CALL_STATE_ACTIVE://接电话
-        {
-          if (ICAudioManager.needMute == false){
-            if (Config.custom_name.equals("AK"))
-              ICAudioManager.setVoiceCallMaxVolumn(mContext); //设置最大音量
-          }
+                        mHandler.postDelayed(new Runnable() {
+                            @Override
+                            public void run() {
+                                ICAudioManager.restoreVolumn(mContext); //2秒后恢复音量
+                                ICAudioManager.needMute = false;
+                            }
+                        }, 2000);
+                    }
+                    ICLogger.i("========Hung up!");
+                    break;
+                case PRECISE_CALL_STATE_INCOMING: //来电
+                case PRECISE_CALL_STATE_ALERTING:
+                case PRECISE_CALL_STATE_DIALING:
+                    isCalling = true;
+                    Intent var3 = new Intent();
+                    var3.setAction(ACTION_CLOSE_UNREAD_MSG);
+                    mContext.sendBroadcast(var3);
+
+                    ICLogger.i("========Ring!");
+                    if (ICAudioManager.needMute == true) {
+                        ICAudioManager.setVolumnMute(mContext);
+                        mHandler.postDelayed(new Runnable() {
+                            @Override
+                            public void run() {
+                                ICAudioManager.setVolumnMute(mContext); //2秒后恢复音量
+                            }
+                        }, 2000);
+
+                    }
+                    break;
+                case PRECISE_CALL_STATE_ACTIVE://接电话
+                {
+                    if (ICAudioManager.needMute == false) {
+                        if (Config.custom_name.equals("AK"))
+                            ICAudioManager.setVoiceCallMaxVolumn(mContext); //设置最大音量
+                    }
+                }
+                case PRECISE_CALL_STATE_HOLDING://接电话
+                case PRECISE_CALL_STATE_WAITING:
+                    isCalling = true;
+                    ICLogger.i("========Answer Call !");
+                    if (ICAudioManager.needMute == true) {
+                        ICAudioManager.setVolumnMute(mContext);
+                        mHandler.postDelayed(new Runnable() {
+                            @Override
+                            public void run() {
+                                ICAudioManager.setVolumnMute(mContext); //2秒后恢复音量
+                            }
+                        }, 2000);
+                    }
+
+            }
+
+        }
+    };
+    private ArrayList<Antioff> sAntioffList;
+    private ArrayList<Silent> silentList;
+    private ArrayList<StheartRate> stheartRateList;
+    private ArrayList<NoticeContent> voiceNotice;
+
+    public SilentManager() {
+    }
+
+    private void callback(Messenger var1, boolean var2) {
+        short var3;
+        if (var2) {
+            var3 = 600;
+        } else {
+            var3 = 700;
         }
-        case PRECISE_CALL_STATE_HOLDING://接电话
-        case PRECISE_CALL_STATE_WAITING:
-          isCalling = true;
-          ICLogger.i("========Answer Call !");
-          if(ICAudioManager.needMute==true)
-          {
-            ICAudioManager.setVolumnMute(mContext);
-            mHandler.postDelayed(new Runnable() {
-              @Override
-              public void run() {
-                ICAudioManager.setVolumnMute(mContext); //2秒后恢复音量
-              }
-            },2000);
-          }
-
-      }
-
-    }
-  };
-  private ArrayList<Antioff> sAntioffList;
-  private ArrayList<Silent> silentList;
-  private ArrayList<StheartRate> stheartRateList;
-  private ArrayList<NoticeContent> voiceNotice;
-
-  public SilentManager() {
-  }
-
-  private void callback(Messenger var1, boolean var2) {
-    short var3;
-    if (var2) {
-      var3 = 600;
-    } else {
-      var3 = 700;
-    }
-
-    if (var1 != null) {
-      try {
-        var1.send(Message.obtain((Handler)null, var3));
-      } catch (Exception e) {
-        e.printStackTrace();
-        ICLogger.e(e.getMessage(),e);
-      }
-    }
-
-  }
-
-  private void cancelAlarm(ArrayList<Alarm> var1) {
-    Iterator var2 = var1.iterator();
-
-    while(var2.hasNext()) {
-      Alarm var3 = (Alarm)var2.next();
-      String var10 = var3.time;
-      String var4 = var3.week;
-      String var5 = var3.ring;
-      String var11 = var3.name;
-      char[] var6 = var4.toCharArray();
-      int var7 = var6.length;
-
-      for(int var8 = 1; var8 < var7; ++var8) {
-        char var9 = var6[var8];
-        this.mAlarmManager.cancel(this.getPendingIntent(var10, var4, var5, var11, var9 - 47));
-      }
-    }
-
-  }
-
-  private void cancelNoticeAlarm(ArrayList<NoticeContent> var1) {
-    Iterator var2 = var1.iterator();
-
-    while(var2.hasNext()) {
-      NoticeContent var3 = (NoticeContent)var2.next();
-      String var4 = var3.noticeTime;
-      String var9 = var3.noticeName;
-      String var5 = var3.noticeNumber;
-      String var6 = var3.noticeID;
-      String var7 = var3.noticeCategory;
-      String var8 = var3.noticeFrequency;
-      String var10 = var3.noticeContent;
-      this.mAlarmManager.cancel(this.getPendingIntent(var4, var9, var5, var6, var7, var8, var10));
-    }
-
-  }
-
-  private PendingIntent getPendingIntent(String var1, String var2, String var3, String var4, int var5) {
-    StringBuilder var6 = new StringBuilder("alarm:");
-    var6.append(var1);
-    var6.append(",");
-    var6.append(var2);
-    var6.append(",");
-    var6.append(var3);
-    var6.append(",");
-    var6.append(var4);
-    var6.append(",");
-    var6.append(var5);
-    var2 = var6.toString();
-    Intent intent = new Intent(this.mContext, CoreService.class);
-    intent.setAction(ACTION_CARE_ALARM);
-    intent.setData(Uri.parse(var2));
-    return PendingIntent.getService(this.mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
-  }
-
-  private PendingIntent getPendingIntent(String var1, String var2, String var3, String var4, String var5, String var6, String var7) {
-    StringBuilder var8 = new StringBuilder("notice:");
-    var8.append(var1);
-    var8.append(",");
-    var8.append(var2);
-    var8.append(",");
-    var8.append(var3);
-    var8.append(",");
-    var8.append(var4);
-    var8.append(",");
-    var8.append(var5);
-    var8.append(",");
-    var8.append(var6);
-    var8.append(",");
-    var8.append(var7);
-    var1 = var8.toString();
-    Intent var9 = new Intent(this.mContext, CoreService.class);
-    var9.setAction("com.enqualcomm.support.ACTION_NOTICE_ALARM");
-    var9.setData(Uri.parse(var1));
-    return PendingIntent.getService(this.mContext, 0, var9, PendingIntent.FLAG_UPDATE_CURRENT);
-  }
-
-  private void getSilentListStartAndEndTime() {
-    Calendar calendar = Calendar.getInstance();
-    this.mTodayWeek = calendar.get(Calendar.DAY_OF_WEEK);
-
-    Silent silent;
-    Iterator it = this.silentList.iterator();
-    while( it.hasNext()) {
-      silent = (Silent)it.next();
-      calendar.set(Calendar.SECOND, 0);
-      int hour = Integer.parseInt(silent.start.substring(2, 4));
-      int minutes = Integer.parseInt(silent.start.substring(5, 7));
-      calendar.set(Calendar.HOUR_OF_DAY, hour);
-      calendar.set(Calendar.MINUTE, minutes);
-      silent.startTimeMillis = calendar.getTimeInMillis();
-      hour = Integer.parseInt(silent.end.substring(2, 4));
-      minutes = Integer.parseInt(silent.end.substring(5, 7));
-      calendar.set(Calendar.HOUR_OF_DAY, hour);
-      calendar.set(Calendar.MINUTE, minutes);
-      silent.endTimeMillis = calendar.getTimeInMillis();
-    }
-
-  }
-
-  private void getStartAndEndSantioffTime() {
-    Calendar var1 = Calendar.getInstance();
-    this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);
-
-    Antioff var3;
-    for(Iterator var2 = this.sAntioffList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {
-      var3 = (Antioff)var2.next();
-      var1.set(Calendar.SECOND, 0);
-      int var4 = Integer.parseInt(var3.start.substring(2, 4));
-      int var5 = Integer.parseInt(var3.start.substring(5, 7));
-      var1.set(Calendar.HOUR_OF_DAY, var4);
-      var1.set(Calendar.MINUTE, var5);
-      var3.startTimeMillis = var1.getTimeInMillis();
-      var4 = Integer.parseInt(var3.end.substring(2, 4));
-      var5 = Integer.parseInt(var3.end.substring(5, 7));
-      var1.set(Calendar.HOUR_OF_DAY, var4);
-      var1.set(Calendar.MINUTE, var5);
-    }
-
-  }
-
-  private void getStartAndEndStheartRateTime() {
-    Calendar var1 = Calendar.getInstance();
-    this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);
-
-    StheartRate var3;
-    for(Iterator var2 = this.stheartRateList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {
-      var3 = (StheartRate)var2.next();
-      var1.set(Calendar.SECOND, 0);
-      int var4 = Integer.parseInt(var3.start.substring(2, 4));
-      int var5 = Integer.parseInt(var3.start.substring(5, 7));
-      var1.set(Calendar.HOUR_OF_DAY, var4);
-      var1.set(Calendar.MINUTE, var5);
-      var3.startTimeMillis = var1.getTimeInMillis();
-      var4 = Integer.parseInt(var3.end.substring(2, 4));
-      var5 = Integer.parseInt(var3.end.substring(5, 7));
-      var1.set(Calendar.HOUR_OF_DAY, var4);
-      var1.set(Calendar.MINUTE, var5);
-    }
-
-  }
-
-  public static void setSilentConfig(Context context,boolean silent){
-
-    if(silent){
-      VibrateUtil.setVibPattern(0);
-      ICAudioManager.setMasterVolumn(context,0);
-      Util.SetRingMode(context,AudioManager.RINGER_MODE_SILENT,false);
-    }else{
-      int mastervolume = Config.getMasterVolume(context);
-      ICAudioManager.setMasterVolumn(context,mastervolume);
-      int duration=Config.getDurationOfVibration(context);
-      VibrateUtil.setVibPattern(duration*1000);
-      Util.SetRingMode(context, AudioManager.MODE_NORMAL,true);
-    }
-
-
-
-  }
-  private void handSilence(Context var1, boolean var2) {
-    this.mValue_isSilence = var2;
+
+        if (var1 != null) {
+            try {
+                var1.send(Message.obtain((Handler) null, var3));
+            } catch (Exception e) {
+                e.printStackTrace();
+                ICLogger.e(e.getMessage(), e);
+            }
+        }
+
+    }
+
+    private void cancelAlarm(ArrayList<Alarm> var1) {
+        Iterator var2 = var1.iterator();
+
+        while (var2.hasNext()) {
+            Alarm var3 = (Alarm) var2.next();
+            String var10 = var3.time;
+            String var4 = var3.week;
+            String var5 = var3.ring;
+            String var11 = var3.name;
+            char[] var6 = var4.toCharArray();
+            int var7 = var6.length;
+
+            for (int var8 = 1; var8 < var7; ++var8) {
+                char var9 = var6[var8];
+                this.mAlarmManager.cancel(this.getPendingIntent(var10, var4, var5, var11, var9 - 47));
+            }
+        }
+
+    }
+
+    private void cancelNoticeAlarm(ArrayList<NoticeContent> var1) {
+        Iterator var2 = var1.iterator();
+
+        while (var2.hasNext()) {
+            NoticeContent var3 = (NoticeContent) var2.next();
+            String var4 = var3.noticeTime;
+            String var9 = var3.noticeName;
+            String var5 = var3.noticeNumber;
+            String var6 = var3.noticeID;
+            String var7 = var3.noticeCategory;
+            String var8 = var3.noticeFrequency;
+            String var10 = var3.noticeContent;
+            this.mAlarmManager.cancel(this.getPendingIntent(var4, var9, var5, var6, var7, var8, var10));
+        }
+
+    }
+
+    private PendingIntent getPendingIntent(String var1, String var2, String var3, String var4, int var5) {
+        StringBuilder var6 = new StringBuilder("alarm:");
+        var6.append(var1);
+        var6.append(",");
+        var6.append(var2);
+        var6.append(",");
+        var6.append(var3);
+        var6.append(",");
+        var6.append(var4);
+        var6.append(",");
+        var6.append(var5);
+        var2 = var6.toString();
+        Intent intent = new Intent(this.mContext, CoreService.class);
+        intent.setAction(ACTION_CARE_ALARM);
+        intent.setData(Uri.parse(var2));
+        return PendingIntent.getService(this.mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+    }
+
+    private PendingIntent getPendingIntent(String var1, String var2, String var3, String var4, String var5, String var6, String var7) {
+        StringBuilder var8 = new StringBuilder("notice:");
+        var8.append(var1);
+        var8.append(",");
+        var8.append(var2);
+        var8.append(",");
+        var8.append(var3);
+        var8.append(",");
+        var8.append(var4);
+        var8.append(",");
+        var8.append(var5);
+        var8.append(",");
+        var8.append(var6);
+        var8.append(",");
+        var8.append(var7);
+        var1 = var8.toString();
+        Intent var9 = new Intent(this.mContext, CoreService.class);
+        var9.setAction("com.enqualcomm.support.ACTION_NOTICE_ALARM");
+        var9.setData(Uri.parse(var1));
+        return PendingIntent.getService(this.mContext, 0, var9, PendingIntent.FLAG_UPDATE_CURRENT);
+    }
+
+    private void getSilentListStartAndEndTime() {
+        Calendar calendar = Calendar.getInstance();
+        this.mTodayWeek = calendar.get(Calendar.DAY_OF_WEEK);
+
+        Silent silent;
+        Iterator it = this.silentList.iterator();
+        while (it.hasNext()) {
+            silent = (Silent) it.next();
+            calendar.set(Calendar.SECOND, 0);
+            int hour = Integer.parseInt(silent.start.substring(2, 4));
+            int minutes = Integer.parseInt(silent.start.substring(5, 7));
+            calendar.set(Calendar.HOUR_OF_DAY, hour);
+            calendar.set(Calendar.MINUTE, minutes);
+            silent.startTimeMillis = calendar.getTimeInMillis();
+            hour = Integer.parseInt(silent.end.substring(2, 4));
+            minutes = Integer.parseInt(silent.end.substring(5, 7));
+            calendar.set(Calendar.HOUR_OF_DAY, hour);
+            calendar.set(Calendar.MINUTE, minutes);
+            silent.endTimeMillis = calendar.getTimeInMillis();
+        }
+
+    }
+
+    private void getStartAndEndSantioffTime() {
+        Calendar var1 = Calendar.getInstance();
+        this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);
+
+        Antioff var3;
+        for (Iterator var2 = this.sAntioffList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {
+            var3 = (Antioff) var2.next();
+            var1.set(Calendar.SECOND, 0);
+            int var4 = Integer.parseInt(var3.start.substring(2, 4));
+            int var5 = Integer.parseInt(var3.start.substring(5, 7));
+            var1.set(Calendar.HOUR_OF_DAY, var4);
+            var1.set(Calendar.MINUTE, var5);
+            var3.startTimeMillis = var1.getTimeInMillis();
+            var4 = Integer.parseInt(var3.end.substring(2, 4));
+            var5 = Integer.parseInt(var3.end.substring(5, 7));
+            var1.set(Calendar.HOUR_OF_DAY, var4);
+            var1.set(Calendar.MINUTE, var5);
+        }
+
+    }
+
+    private void getStartAndEndStheartRateTime() {
+        Calendar var1 = Calendar.getInstance();
+        this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);
+
+        StheartRate var3;
+        for (Iterator var2 = this.stheartRateList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {
+            var3 = (StheartRate) var2.next();
+            var1.set(Calendar.SECOND, 0);
+            int var4 = Integer.parseInt(var3.start.substring(2, 4));
+            int var5 = Integer.parseInt(var3.start.substring(5, 7));
+            var1.set(Calendar.HOUR_OF_DAY, var4);
+            var1.set(Calendar.MINUTE, var5);
+            var3.startTimeMillis = var1.getTimeInMillis();
+            var4 = Integer.parseInt(var3.end.substring(2, 4));
+            var5 = Integer.parseInt(var3.end.substring(5, 7));
+            var1.set(Calendar.HOUR_OF_DAY, var4);
+            var1.set(Calendar.MINUTE, var5);
+        }
+
+    }
+
+    public static void setSilentConfig(Context context, boolean silent) {
+
+        if (silent) {
+            VibrateUtil.setVibPattern(0);
+            ICAudioManager.setMasterVolumn(context, 0);
+            Util.SetRingMode(context, AudioManager.RINGER_MODE_SILENT, false);
+        } else {
+            int mastervolume = Config.getMasterVolume(context);
+            ICAudioManager.setMasterVolumn(context, mastervolume);
+            int duration = Config.getDurationOfVibration(context);
+            VibrateUtil.setVibPattern(duration * 1000);
+            Util.SetRingMode(context, AudioManager.MODE_NORMAL, true);
+        }
+
+
+    }
+
+    private void handSilence(Context var1, boolean var2) {
+        this.mValue_isSilence = var2;
 
 
     /*
@@ -391,543 +382,543 @@ public class SilentManager extends AbstractInvokeHandlerService {
      // Intent var5 = (new Intent("com.enqualcomm.support.ACTION_VIDEO_END_CALL")).setComponent(var4);
      // this.mRuntime.getContextProxy().context.startService(var5);
     }*/
-  }
-
-  private void handleSilent(Runtime runtime, boolean silent) {
-    int dayofweek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
-    //if (dayofweek != this.mTodayWeek && (dayofweek != 1 || this.mTodayWeek != 8)) {
-    if (dayofweek != this.mTodayWeek ) {
-      //mToday != 当天,更新一下 设置
-      this.getSilentListStartAndEndTime();
-      this.queryNotice();
-    }
-
-    boolean isSilent = this.isSilentTime();
-    StringBuilder var5 = new StringBuilder();
-    var5.append("inSilent=");
-    var5.append(isSilent);
-    ICLogger.i(var5.toString());
-    if (!this.mInSilent && isSilent) {
-      this.onSilentStateChange(true);
-      this.handSilence(this.mContext, true);
-      this.mDbHelper.upDateStatus("ON");
-    } else if (this.mInSilent && !isSilent) {
-      this.onSilentStateChange(false);
-      this.mDbHelper.upDateStatus("OFF");
-      this.handSilence(this.mContext, false);
-    }
-
-    this.mInSilent = isSilent;
-   // this.getStartAndEndStheartRateTime();
-   // this.isStheartRateTime(var2);
-  }
-
-  private boolean isIdle(Context context) {
-    int callstate = ((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE)).getCallState();
-    boolean isidle;
-    if (CALL_STATE_RINGING != callstate && CALL_STATE_OFFHOOK != callstate) {
-      isidle = true;
-    } else {
-      isidle = false;
-    }
-
-    return isidle && !this.mInSilent && !this.mRuntime.getBatteryLow();
-  }
-
-  private boolean isAntioffTime(boolean var1) {
-    long var2 = System.currentTimeMillis();
-    ArrayList var4 = this.sAntioffList;
-    int var5 = this.mTodayWeek;
-    var1 = true;
-    if (var5 == 1) {
-      this.mTodayWeek += 7;
-    }
-
-    Iterator var12 = var4.iterator();
-
-    while(true) {
-      if (!var12.hasNext()) {
-        var1 = false;
-        break;
-      }
-
-      Antioff var6 = (Antioff)var12.next();
-      String var7 = var6.week;
-      StringBuilder var8 = new StringBuilder();
-      var8.append(this.mTodayWeek - 1);
-      var8.append("");
-      if (var7.contains(var8.toString())) {
-        long var9 = var6.startTimeMillis - var2;
-        int var11;
-        if (var9 < (long)(CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {
-          var11 = Integer.parseInt(var6.start.substring(2, 4));
-          var5 = Integer.parseInt(var6.start.substring(5, 7));
-          AlarmHelper.setTimeAlarm(this.mContext, var11, var5, OTHER_ALARM_START);
-          var8 = new StringBuilder();
-          var8.append("设置起始时间=hour");
-          var8.append(var11);
-          var8.append("minute+");
-          var8.append(var5);
-          ICLogger.i(var8.toString());
-        }
+    }
 
-        var9 = var6.endTimeMillis - var2;
-        if (var9 < (long)(CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {
-          var11 = Integer.parseInt(var6.end.substring(2, 4));
-          var5 = Integer.parseInt(var6.end.substring(5, 7));
-          AlarmHelper.setTimeAlarm(this.mContext, var11, var5, OTHER_ALARM_END);
-          var8 = new StringBuilder();
-          var8.append("设置结束时间=hour");
-          var8.append(var11);
-          var8.append("minute+");
-          var8.append(var5);
-          ICLogger.i(var8.toString());
+    private void handleSilent(Runtime runtime, boolean silent) {
+        int dayofweek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+        //if (dayofweek != this.mTodayWeek && (dayofweek != 1 || this.mTodayWeek != 8)) {
+        if (dayofweek != this.mTodayWeek) {
+            //mToday != 当天,更新一下 设置
+            this.getSilentListStartAndEndTime();
+            this.queryNotice();
         }
 
-        if (var6.startTimeMillis <= var2 && var6.endTimeMillis > var2) {
-          break;
+        boolean isSilent = this.isSilentTime();
+        StringBuilder var5 = new StringBuilder();
+        var5.append("inSilent=");
+        var5.append(isSilent);
+        ICLogger.i(var5.toString());
+        if (!this.mInSilent && isSilent) {
+            this.onSilentStateChange(true);
+            this.handSilence(this.mContext, true);
+            this.mDbHelper.upDateStatus("ON");
+        } else if (this.mInSilent && !isSilent) {
+            this.onSilentStateChange(false);
+            this.mDbHelper.upDateStatus("OFF");
+            this.handSilence(this.mContext, false);
         }
-      }
+
+        this.mInSilent = isSilent;
+        // this.getStartAndEndStheartRateTime();
+        // this.isStheartRateTime(var2);
     }
 
-    this.mRuntime.setNeedAntioff(var1);
-    return var1;
-  }
+    private boolean isIdle(Context context) {
+        int callstate = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getCallState();
+        boolean isidle;
+        if (CALL_STATE_RINGING != callstate && CALL_STATE_OFFHOOK != callstate) {
+            isidle = true;
+        } else {
+            isidle = false;
+        }
 
-  private boolean isSilentTime() {
-    long currenttime = System.currentTimeMillis();
-    ArrayList slist = this.silentList;
-    int todayWeek = this.mTodayWeek;
-    boolean isSilent = false; //默认不在silent时间段
-//    if (todayWeek == 1) {
-//      this.mTodayWeek += 7;
-//    }
+        return isidle && !this.mInSilent && !this.mRuntime.getBatteryLow();
+    }
 
-    Iterator it = slist.iterator();
+    private boolean isAntioffTime(boolean var1) {
+        long var2 = System.currentTimeMillis();
+        ArrayList var4 = this.sAntioffList;
+        int var5 = this.mTodayWeek;
+        var1 = true;
+        if (var5 == 1) {
+            this.mTodayWeek += 7;
+        }
 
-    while(true) {
-      if (!it.hasNext()) {
-        isSilent = false;
-        break;
-      }
+        Iterator var12 = var4.iterator();
 
-      Silent silent = (Silent)it.next();
-      String week = silent.week;
-      StringBuilder sb = new StringBuilder();
-//      sb.append(this.mTodayWeek - 1);
-      sb.append(this.mTodayWeek);
-      sb.append("");
-      if (week.contains(sb.toString())) {
-        long var9 = silent.startTimeMillis - currenttime;
-        int hour,minutes;
-        StringBuilder sblog;
-        ICLogger.i("startTimeMillis  - currenttime "+var9);
-        if (var9 < (long)(CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {
-          hour = Integer.parseInt(silent.start.substring(2, 4));
-          minutes = Integer.parseInt(silent.start.substring(5, 7));
-          AlarmHelper.setTimeAlarm(this.mContext, hour, minutes, OTHER_ALARM_START);
-          sblog = new StringBuilder();
-          sblog.append("设置起始时间=hour");
-          sblog.append(hour);
-          sblog.append("minute+");
-          sblog.append(minutes);
-          ICLogger.i(sblog.toString());
-        }
+        while (true) {
+            if (!var12.hasNext()) {
+                var1 = false;
+                break;
+            }
 
-        var9 = silent.endTimeMillis - currenttime;
-        ICLogger.i("endTimeMillis  - currenttime "+var9);
-        if (var9 < (long)(CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {
-          hour = Integer.parseInt(silent.end.substring(2, 4));
-          minutes = Integer.parseInt(silent.end.substring(5, 7));
-          AlarmHelper.setTimeAlarm(this.mContext, hour, minutes, OTHER_ALARM_END);
-          sblog = new StringBuilder();
-          sblog.append("设置结束时间=hour");
-          sblog.append(hour);
-          sblog.append("minute+");
-          sblog.append(minutes);
-          ICLogger.i(sblog.toString());
+            Antioff var6 = (Antioff) var12.next();
+            String var7 = var6.week;
+            StringBuilder var8 = new StringBuilder();
+            var8.append(this.mTodayWeek - 1);
+            var8.append("");
+            if (var7.contains(var8.toString())) {
+                long var9 = var6.startTimeMillis - var2;
+                int var11;
+                if (var9 < (long) (CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {
+                    var11 = Integer.parseInt(var6.start.substring(2, 4));
+                    var5 = Integer.parseInt(var6.start.substring(5, 7));
+                    AlarmHelper.setTimeAlarm(this.mContext, var11, var5, OTHER_ALARM_START);
+                    var8 = new StringBuilder();
+                    var8.append("设置起始时间=hour");
+                    var8.append(var11);
+                    var8.append("minute+");
+                    var8.append(var5);
+                    ICLogger.i(var8.toString());
+                }
+
+                var9 = var6.endTimeMillis - var2;
+                if (var9 < (long) (CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {
+                    var11 = Integer.parseInt(var6.end.substring(2, 4));
+                    var5 = Integer.parseInt(var6.end.substring(5, 7));
+                    AlarmHelper.setTimeAlarm(this.mContext, var11, var5, OTHER_ALARM_END);
+                    var8 = new StringBuilder();
+                    var8.append("设置结束时间=hour");
+                    var8.append(var11);
+                    var8.append("minute+");
+                    var8.append(var5);
+                    ICLogger.i(var8.toString());
+                }
+
+                if (var6.startTimeMillis <= var2 && var6.endTimeMillis > var2) {
+                    break;
+                }
+            }
         }
 
-        //刚好在silent时段,则直接退出
-        if (silent.startTimeMillis <= currenttime && silent.endTimeMillis > currenttime) {
-          isSilent=true;
-          break;
-        }
-      }else{
-        ICLogger.i(sb+" not in ["+week+"] silent is false");
-      }
+        this.mRuntime.setNeedAntioff(var1);
+        return var1;
     }
 
-    return isSilent;
-  }
-
-  private boolean isStheartRateTime(boolean var1) {
-    long var2 = System.currentTimeMillis();
-    ArrayList var4 = this.stheartRateList;
-    if (this.mTodayWeek == 1) {
-      this.mTodayWeek += 7;
-    }
+    private boolean isSilentTime() {
+        long currenttime = System.currentTimeMillis();
+        ArrayList slist = this.silentList;
+        int todayWeek = this.mTodayWeek;
+        boolean isSilent = false; //默认不在silent时间段
+//    if (todayWeek == 1) {
+//      this.mTodayWeek += 7;
+//    }
 
-    Iterator var12 = var4.iterator();
+        Iterator it = slist.iterator();
 
-    while(true) {
-      if (var12.hasNext()) {
-        StheartRate var5 = (StheartRate)var12.next();
-        String var6 = var5.week;
-        StringBuilder var7 = new StringBuilder();
-        var7.append(this.mTodayWeek - 1);
-        var7.append("");
-        if (!var6.contains(var7.toString())) {
-          continue;
-        }
+        while (true) {
+            if (!it.hasNext()) {
+                isSilent = false;
+                break;
+            }
 
-        long var8 = var5.startTimeMillis - var2;
-        int var10;
-        int var11;
-        if (var8 < (long)(CoreService.alarmCycle * 60 * 1000) && var8 > 0L) {
-          var10 = Integer.parseInt(var5.start.substring(2, 4));
-          var11 = Integer.parseInt(var5.start.substring(5, 7));
-          AlarmHelper.setTimeAlarm(this.mContext, var10, var11, "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START");
+            Silent silent = (Silent) it.next();
+            String week = silent.week;
+            StringBuilder sb = new StringBuilder();
+//      sb.append(this.mTodayWeek - 1);
+            sb.append(this.mTodayWeek);
+            sb.append("");
+            if (week.contains(sb.toString())) {
+                long var9 = silent.startTimeMillis - currenttime;
+                int hour, minutes;
+                StringBuilder sblog;
+                ICLogger.i("startTimeMillis  - currenttime " + var9);
+                if (var9 < (long) (CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {
+                    hour = Integer.parseInt(silent.start.substring(2, 4));
+                    minutes = Integer.parseInt(silent.start.substring(5, 7));
+                    AlarmHelper.setTimeAlarm(this.mContext, hour, minutes, OTHER_ALARM_START);
+                    sblog = new StringBuilder();
+                    sblog.append("设置起始时间=hour");
+                    sblog.append(hour);
+                    sblog.append("minute+");
+                    sblog.append(minutes);
+                    ICLogger.i(sblog.toString());
+                }
+
+                var9 = silent.endTimeMillis - currenttime;
+                ICLogger.i("endTimeMillis  - currenttime " + var9);
+                if (var9 < (long) (CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {
+                    hour = Integer.parseInt(silent.end.substring(2, 4));
+                    minutes = Integer.parseInt(silent.end.substring(5, 7));
+                    AlarmHelper.setTimeAlarm(this.mContext, hour, minutes, OTHER_ALARM_END);
+                    sblog = new StringBuilder();
+                    sblog.append("设置结束时间=hour");
+                    sblog.append(hour);
+                    sblog.append("minute+");
+                    sblog.append(minutes);
+                    ICLogger.i(sblog.toString());
+                }
+
+                //刚好在silent时段,则直接退出
+                if (silent.startTimeMillis <= currenttime && silent.endTimeMillis > currenttime) {
+                    isSilent = true;
+                    break;
+                }
+            } else {
+                ICLogger.i(sb + " not in [" + week + "] silent is false");
+            }
         }
 
-        var8 = var5.endTimeMillis - var2;
-        if (var8 < (long)(CoreService.alarmCycle * 60 * 1000) && var8 > 0L) {
-          var10 = Integer.parseInt(var5.end.substring(2, 4));
-          var11 = Integer.parseInt(var5.end.substring(5, 7));
-          AlarmHelper.setTimeAlarm(this.mContext, var10, var11, "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_END");
-        }
+        return isSilent;
+    }
 
-        if (var5.startTimeMillis > var2 || var5.endTimeMillis <= var2) {
-          continue;
+    private boolean isStheartRateTime(boolean var1) {
+        long var2 = System.currentTimeMillis();
+        ArrayList var4 = this.stheartRateList;
+        if (this.mTodayWeek == 1) {
+            this.mTodayWeek += 7;
         }
 
-        this.mInterval = var5.interval;
-        if (!var1) {
+        Iterator var12 = var4.iterator();
+
+        while (true) {
+            if (var12.hasNext()) {
+                StheartRate var5 = (StheartRate) var12.next();
+                String var6 = var5.week;
+                StringBuilder var7 = new StringBuilder();
+                var7.append(this.mTodayWeek - 1);
+                var7.append("");
+                if (!var6.contains(var7.toString())) {
+                    continue;
+                }
+
+                long var8 = var5.startTimeMillis - var2;
+                int var10;
+                int var11;
+                if (var8 < (long) (CoreService.alarmCycle * 60 * 1000) && var8 > 0L) {
+                    var10 = Integer.parseInt(var5.start.substring(2, 4));
+                    var11 = Integer.parseInt(var5.start.substring(5, 7));
+                    AlarmHelper.setTimeAlarm(this.mContext, var10, var11, "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START");
+                }
+
+                var8 = var5.endTimeMillis - var2;
+                if (var8 < (long) (CoreService.alarmCycle * 60 * 1000) && var8 > 0L) {
+                    var10 = Integer.parseInt(var5.end.substring(2, 4));
+                    var11 = Integer.parseInt(var5.end.substring(5, 7));
+                    AlarmHelper.setTimeAlarm(this.mContext, var10, var11, "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_END");
+                }
+
+                if (var5.startTimeMillis > var2 || var5.endTimeMillis <= var2) {
+                    continue;
+                }
+
+                this.mInterval = var5.interval;
+                if (!var1) {
 //          AlarmHelper.setRealTimeAlarm(this.mContext, Integer.parseInt(this.mInterval), ACTION_HEATR_RATE_START);
 //          this.mRuntime.getContextProxy().sendStheartRateBroadcast(ACTION_HEATR_RATE_START, 0);
-        }
+                }
 
-        var1 = true;
-        break;
-      }
+                var1 = true;
+                break;
+            }
+
+            var1 = false;
+            break;
+        }
 
-      var1 = false;
-      break;
+        return var1;
     }
 
-    return var1;
-  }
+    private void onSilentStateChange(boolean var1) {
 
-  private void onSilentStateChange(boolean var1) {
+        SharPreferenceUtil.setPrefBoolean(mContext, "KEY_ISSILENCE", var1);
+        setSilentConfig(mContext, var1);
 
-    SharPreferenceUtil.setPrefBoolean(mContext, "KEY_ISSILENCE", var1);
-    setSilentConfig(mContext,var1);
 
+        if (this.alarms != null) {
+            if (var1) {
+                this.cancelAlarm(this.alarms);
+            } else {
+                this.setNewAlarm(this.alarms);
+            }
+        }
 
-    if (this.alarms != null) {
-      if (var1) {
-        this.cancelAlarm(this.alarms);
-      } else {
-        this.setNewAlarm(this.alarms);
-      }
-    }
+        if (this.voiceNotice != null) {
+            if (var1) {
+                this.cancelNoticeAlarm(this.voiceNotice);
+            } else {
+                this.setNewNoticeAlarm(this.voiceNotice);
+            }
+        }
 
-    if (this.voiceNotice != null) {
-      if (var1) {
-        this.cancelNoticeAlarm(this.voiceNotice);
-      } else {
-        this.setNewNoticeAlarm(this.voiceNotice);
-      }
     }
 
-  }
+    private ArrayList<Alarm> queryAlarm() {
+        ArrayList var1 = this.mDbHelper.queryAlarm();
+        if (!this.mInSilent) {
+            if (this.alarms != null) {
+                this.cancelAlarm(this.alarms);
+            }
 
-  private ArrayList<Alarm> queryAlarm() {
-    ArrayList var1 = this.mDbHelper.queryAlarm();
-    if (!this.mInSilent) {
-      if (this.alarms != null) {
-        this.cancelAlarm(this.alarms);
-      }
+            this.setNewAlarm(var1);
+        }
 
-      this.setNewAlarm(var1);
+        return var1;
     }
 
-    return var1;
-  }
-
-  private ArrayList<Antioff> queryAntioff() {
-    return this.mDbHelper.queryAntioff(true);
-  }
-
-  private ArrayList<NoticeContent> queryNotice() {
-    String var1 = TimeUtil.getSystemTime4();
-    ArrayList var2 = this.mDbHelper.queryNotice(var1);
-    if (!this.mInSilent) {
-      if (this.voiceNotice != null) {
-        this.cancelNoticeAlarm(this.voiceNotice);
-      }
-
-      this.setNewNoticeAlarm(var2);
+    private ArrayList<Antioff> queryAntioff() {
+        return this.mDbHelper.queryAntioff(true);
     }
 
-    return var2;
-  }
-
-  private ArrayList<Silent> querySilent() {
-    return this.mDbHelper.querySilence(true);
-  }
-
-  private ArrayList<StheartRate> queryStheartRate() {
-    return this.mDbHelper.queryStheartRate(true);
-  }
+    private ArrayList<NoticeContent> queryNotice() {
+        String var1 = TimeUtil.getSystemTime4();
+        ArrayList var2 = this.mDbHelper.queryNotice(var1);
+        if (!this.mInSilent) {
+            if (this.voiceNotice != null) {
+                this.cancelNoticeAlarm(this.voiceNotice);
+            }
 
-  private void setNewAlarm(ArrayList<Alarm> alarmArrayList) {
-    Calendar calendar = Calendar.getInstance();
-    calendar.set(Calendar.SECOND, 0);
-    long currentTime = System.currentTimeMillis();
-    Iterator itAlarm = alarmArrayList.iterator();
+            this.setNewNoticeAlarm(var2);
+        }
 
+        return var2;
+    }
 
-    while (itAlarm.hasNext()){
-      Alarm alarm = (Alarm)itAlarm.next();
-      if ("ON".equals(alarm.status)) {
-        int hour = Integer.parseInt(alarm.time.substring(2, 4));
-        int minute = Integer.parseInt(alarm.time.substring(5, 7));
-        calendar.set(Calendar.HOUR_OF_DAY, hour);
-        calendar.set(Calendar.MINUTE, minute);
+    private ArrayList<Silent> querySilent() {
+        return this.mDbHelper.querySilence(true);
+    }
 
-        char[] weeklist = alarm.week.toCharArray();
-        int weeklistlen = weeklist.length;
-        ICLogger.i("repeat = "+alarm.week+", list size = "+weeklistlen);
-        if (weeklistlen>1) {
-          //如果week大于0 则证明有循环,没有循环就证明只是一次的闹铃。
-          for (int i = 1; i < weeklistlen; i++) {
+    private ArrayList<StheartRate> queryStheartRate() {
+        return this.mDbHelper.queryStheartRate(true);
+    }
 
-            long tmpTimeInMillis;
-            int dayofweek = weeklist[i] - 47;
-            calendar.set(Calendar.DAY_OF_WEEK, dayofweek);
-            tmpTimeInMillis = calendar.getTimeInMillis();
-            if (tmpTimeInMillis <= currentTime) {
-              tmpTimeInMillis += ONE_WEEK;
-            }
-              Date date = new Date(tmpTimeInMillis);
-              ICLogger.i("set date "+date.toLocaleString());
-            PendingIntent pendingIntent = this.getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, dayofweek);
-            AlarmHelper.setAlarm(this.mAlarmManager, tmpTimeInMillis, pendingIntent);
-          }
-        }else{
-          //只是一次的闹铃
-          long tmpTimeInMillis;
+    private void setNewAlarm(ArrayList<Alarm> alarmArrayList) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.SECOND, 0);
+        long currentTime = System.currentTimeMillis();
+        Iterator itAlarm = alarmArrayList.iterator();
+
+
+        while (itAlarm.hasNext()) {
+            Alarm alarm = (Alarm) itAlarm.next();
+            if ("ON".equals(alarm.status)) {
+                int hour = Integer.parseInt(alarm.time.substring(2, 4));
+                int minute = Integer.parseInt(alarm.time.substring(5, 7));
+                calendar.set(Calendar.HOUR_OF_DAY, hour);
+                calendar.set(Calendar.MINUTE, minute);
+
+                char[] weeklist = alarm.week.toCharArray();
+                int weeklistlen = weeklist.length;
+                ICLogger.i("repeat = " + alarm.week + ", list size = " + weeklistlen);
+                if (weeklistlen > 1) {
+                    //如果week大于0 则证明有循环,没有循环就证明只是一次的闹铃。
+                    for (int i = 1; i < weeklistlen; i++) {
+
+                        long tmpTimeInMillis;
+                        int dayofweek = weeklist[i] - 47;
+                        calendar.set(Calendar.DAY_OF_WEEK, dayofweek);
+                        tmpTimeInMillis = calendar.getTimeInMillis();
+                        if (tmpTimeInMillis <= currentTime) {
+                            tmpTimeInMillis += ONE_WEEK;
+                        }
+                        Date date = new Date(tmpTimeInMillis);
+                        ICLogger.i("set date " + date.toLocaleString());
+                        PendingIntent pendingIntent = this.getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, dayofweek);
+                        AlarmHelper.setAlarm(this.mAlarmManager, tmpTimeInMillis, pendingIntent);
+                    }
+                } else {
+                    //只是一次的闹铃
+                    long tmpTimeInMillis;
 //          int dayofweek = weeklist[i] - 47;
 //          calendar.set(Calendar.DAY_OF_WEEK, dayofweek);
 //          tmpTimeInMillis = calendar.getTimeInMillis();
 
-            Date date = new Date(System.currentTimeMillis());
-            ICLogger.i("date "+date.toLocaleString());
-            Calendar c = Calendar.getInstance();
-            c.setTime(date);
-            int wek = c.get(Calendar.DAY_OF_WEEK);
-            calendar.set(Calendar.DAY_OF_WEEK, wek);
-            tmpTimeInMillis = calendar.getTimeInMillis();
-            if (tmpTimeInMillis <= currentTime) {
-              tmpTimeInMillis += ONE_DAY;
-            }
-          date = new Date(tmpTimeInMillis);
-            c = Calendar.getInstance();
-          c.setTime(date);
-          wek = c.get(Calendar.DAY_OF_WEEK);
-
-            ICLogger.i("set date "+date.toLocaleString());
+                    Date date = new Date(System.currentTimeMillis());
+                    ICLogger.i("date " + date.toLocaleString());
+                    Calendar c = Calendar.getInstance();
+                    c.setTime(date);
+                    int wek = c.get(Calendar.DAY_OF_WEEK);
+                    calendar.set(Calendar.DAY_OF_WEEK, wek);
+                    tmpTimeInMillis = calendar.getTimeInMillis();
+                    if (tmpTimeInMillis <= currentTime) {
+                        tmpTimeInMillis += ONE_DAY;
+                    }
+                    date = new Date(tmpTimeInMillis);
+                    c = Calendar.getInstance();
+                    c.setTime(date);
+                    wek = c.get(Calendar.DAY_OF_WEEK);
+
+                    ICLogger.i("set date " + date.toLocaleString());
+
+                    PendingIntent pendingIntent = this.getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, wek);
+                    AlarmHelper.setAlarmOnce(this.mAlarmManager, tmpTimeInMillis, pendingIntent);
+                }
 
-            PendingIntent pendingIntent = this.getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, wek);
-          AlarmHelper.setAlarmOnce(this.mAlarmManager, tmpTimeInMillis, pendingIntent);
+            }
         }
+    }
 
-      }
-    }
-  }
-
-  private void setNewNoticeAlarm(ArrayList<NoticeContent> var1) {
-    Iterator var19 = var1.iterator();
-
-    while(var19.hasNext()) {
-      NoticeContent var2 = (NoticeContent)var19.next();
-      String var3 = var2.noticeTime;
-      String var4 = var2.noticeName;
-      String var5 = var2.noticeNumber;
-      String var6 = var2.noticeID;
-      String var7 = var2.noticeCategory;
-      String var8 = var2.noticeFrequency;
-      String var9 = var2.noticeContent;
-      Calendar var10 = Calendar.getInstance();
-      long var11 = System.currentTimeMillis();
-      var10.set(Calendar.SECOND, 0);
-      if (var3 != null) {
-        String var13 = var3.substring(0, 4);
-        String var20 = var3.substring(4, 6);
-        String var14 = var3.substring(6, 8);
-        String var15 = var3.substring(8, 10);
-        String var16 = var3.substring(10, 12);
-        var10.set(Calendar.YEAR, Integer.parseInt(var13));
-        var10.set(Calendar.MONTH, Integer.parseInt(var20) - 1);
-        var10.set(Calendar.DATE, Integer.parseInt(var14));
-        var10.set(Calendar.HOUR_OF_DAY, Integer.parseInt(var15));
-        var10.set(Calendar.MINUTE, Integer.parseInt(var16));
-        long var17 = var10.getTimeInMillis();
-        if (var17 >= var11) {
-          PendingIntent var21 = this.getPendingIntent(var3, var4, var5, var6, var7, var8, var9);
-          AlarmHelper.setAlarm(this.mAlarmManager, var17, var21);
+    private void setNewNoticeAlarm(ArrayList<NoticeContent> var1) {
+        Iterator var19 = var1.iterator();
+
+        while (var19.hasNext()) {
+            NoticeContent var2 = (NoticeContent) var19.next();
+            String var3 = var2.noticeTime;
+            String var4 = var2.noticeName;
+            String var5 = var2.noticeNumber;
+            String var6 = var2.noticeID;
+            String var7 = var2.noticeCategory;
+            String var8 = var2.noticeFrequency;
+            String var9 = var2.noticeContent;
+            Calendar var10 = Calendar.getInstance();
+            long var11 = System.currentTimeMillis();
+            var10.set(Calendar.SECOND, 0);
+            if (var3 != null) {
+                String var13 = var3.substring(0, 4);
+                String var20 = var3.substring(4, 6);
+                String var14 = var3.substring(6, 8);
+                String var15 = var3.substring(8, 10);
+                String var16 = var3.substring(10, 12);
+                var10.set(Calendar.YEAR, Integer.parseInt(var13));
+                var10.set(Calendar.MONTH, Integer.parseInt(var20) - 1);
+                var10.set(Calendar.DATE, Integer.parseInt(var14));
+                var10.set(Calendar.HOUR_OF_DAY, Integer.parseInt(var15));
+                var10.set(Calendar.MINUTE, Integer.parseInt(var16));
+                long var17 = var10.getTimeInMillis();
+                if (var17 >= var11) {
+                    PendingIntent var21 = this.getPendingIntent(var3, var4, var5, var6, var7, var8, var9);
+                    AlarmHelper.setAlarm(this.mAlarmManager, var17, var21);
+                }
+            }
         }
-      }
-    }
-
-  }
-
-  public void onAlarmClock(Connection var1, Runtime runtime) {
-    //每个心跳检查静默消息状态
-    this.handleSilent(runtime, true);
-  }
-
-  public void onAttach(Connection var1, Runtime runtime) {
-    this.mRuntime = runtime;
-    this.mConnection = var1;
-    this.mContext = runtime.getContextProxy().context;
-    this.mAlarmManager = (AlarmManager)this.mContext.getSystemService(Context.ALARM_SERVICE);
-    this.mDbHelper = runtime.getDbHelper();
-    this.silentList = this.querySilent();
-    this.getSilentListStartAndEndTime();
-    this.mInSilent = this.isSilentTime();
-    DBHelper var3 = this.mDbHelper;
-    String var4;
-    if (this.mInSilent) {
-      var4 = "ON";
-    } else {
-      var4 = "OFF";
+
     }
 
-    var3.upDateorInsertDeviceStatus(var4);
-    this.handSilence(this.mContext, this.mInSilent);
+    public void onAlarmClock(Connection var1, Runtime runtime) {
+        //每个心跳检查静默消息状态
+        this.handleSilent(runtime, true);
+    }
+
+    public void onAttach(Connection var1, Runtime runtime) {
+        this.mRuntime = runtime;
+        this.mConnection = var1;
+        this.mContext = runtime.getContextProxy().context;
+        this.mAlarmManager = (AlarmManager) this.mContext.getSystemService(Context.ALARM_SERVICE);
+        this.mDbHelper = runtime.getDbHelper();
+        this.silentList = this.querySilent();
+        this.getSilentListStartAndEndTime();
+        this.mInSilent = this.isSilentTime();
+        DBHelper var3 = this.mDbHelper;
+        String var4;
+        if (this.mInSilent) {
+            var4 = "ON";
+        } else {
+            var4 = "OFF";
+        }
+
+        var3.upDateorInsertDeviceStatus(var4);
+        this.handSilence(this.mContext, this.mInSilent);
     /*
     this.stheartRateList = this.queryStheartRate();
     this.getStartAndEndStheartRateTime();
     this.mIsStheartRate = this.isStheartRateTime(false);
      */
-    this.alarms = this.queryAlarm();
-    this.voiceNotice = this.queryNotice();
-    runtime.getContextProxy().context.getContentResolver().registerContentObserver(ICContentProvider.SILENT_URI, false, this.mContentObserver);
-    this.mAlramReceiver = new SilentManager.AlramReceiver();
-    IntentFilter var5 = new IntentFilter();
-    var5.addAction(ACTION_NOTICE_ALARM_CHANGE);
-    var5.addAction(ACTION_ALARM_ALARM_CHANGE);
-  //  var5.addAction("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE");
-   // var5.addAction("com.eqc.heartrate.action.RESULT");
-    this.mContext.registerReceiver(this.mAlramReceiver, var5);
-    runtime.getContextProxy().getTelephonyManager().listen(this.phoneStateListener, 32);
-  }
-
-  public void onDetach(Connection var1, Runtime var2) {
-    var2.getContextProxy().context.getContentResolver().unregisterContentObserver(this.mContentObserver);
-    this.mContext.unregisterReceiver(this.mAlramReceiver);
-  }
-
-  @Override
-  public boolean onUserRequest(Intent var1, Connection var2, Runtime runtime) {
-    String action = var1.getAction();
-    if (ACTION_CARE_ALARM.equals(action)) {
-      String alarmTime = var1.getDataString();  //alarm:ST00.43,W,CON,闹铃,2
-      String currentTime = TimeUtil.getSystemTime();
-      alarmTime.substring(6).split("\\.");
-      int alarmTime_minutes = Integer.parseInt(alarmTime.substring(6).split("\\.")[1].substring(0, 2));
-      int alarmTime_hour = Integer.parseInt(alarmTime.substring(6).split("\\.")[0].substring(2));
-      String[] currentTimeArray = currentTime.split(";")[1].split(":");
-      int currentTime_hour = Integer.parseInt(currentTimeArray[0]);
-      int currentTime_minutes = Integer.parseInt(currentTimeArray[1]);
-      ICLogger.i("alarm time["+alarmTime_hour+":"+alarmTime_minutes+"], current time["+currentTime_hour+":"+currentTime_minutes+"]");
-      if (alarmTime_hour != currentTime_hour || alarmTime_minutes != currentTime_minutes) {
-        return false;
-      }
-
-      if (this.isIdle(this.mContext)) {
-        try {
-          Intent intent = new Intent("com.enqualcomm.icare.ALARM", Uri.parse(alarmTime));
-            intent.putExtra("closeAlarm", 0);
-            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-          this.mContext.startActivity(intent);
-        } catch (Exception e) {
-          e.printStackTrace();
-          ICLogger.e(e.getMessage(),e);
+        this.alarms = this.queryAlarm();
+        this.voiceNotice = this.queryNotice();
+        runtime.getContextProxy().context.getContentResolver().registerContentObserver(ICContentProvider.SILENT_URI, false, this.mContentObserver);
+        this.mAlramReceiver = new SilentManager.AlramReceiver();
+        IntentFilter var5 = new IntentFilter();
+        var5.addAction(ACTION_NOTICE_ALARM_CHANGE);
+        var5.addAction(ACTION_ALARM_ALARM_CHANGE);
+        //  var5.addAction("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE");
+        // var5.addAction("com.eqc.heartrate.action.RESULT");
+        this.mContext.registerReceiver(this.mAlramReceiver, var5);
+        runtime.getContextProxy().getTelephonyManager().listen(this.phoneStateListener, 32);
+    }
+
+    public void onDetach(Connection var1, Runtime var2) {
+        var2.getContextProxy().context.getContentResolver().unregisterContentObserver(this.mContentObserver);
+        this.mContext.unregisterReceiver(this.mAlramReceiver);
+    }
+
+    @Override
+    public boolean onUserRequest(Intent var1, Connection var2, Runtime runtime) {
+        String action = var1.getAction();
+        if (ACTION_CARE_ALARM.equals(action)) {
+            String alarmTime = var1.getDataString();  //alarm:ST00.43,W,CON,闹铃,2
+            String currentTime = TimeUtil.getSystemTime();
+            alarmTime.substring(6).split("\\.");
+            int alarmTime_minutes = Integer.parseInt(alarmTime.substring(6).split("\\.")[1].substring(0, 2));
+            int alarmTime_hour = Integer.parseInt(alarmTime.substring(6).split("\\.")[0].substring(2));
+            String[] currentTimeArray = currentTime.split(";")[1].split(":");
+            int currentTime_hour = Integer.parseInt(currentTimeArray[0]);
+            int currentTime_minutes = Integer.parseInt(currentTimeArray[1]);
+            ICLogger.i("alarm time[" + alarmTime_hour + ":" + alarmTime_minutes + "], current time[" + currentTime_hour + ":" + currentTime_minutes + "]");
+            if (alarmTime_hour != currentTime_hour || alarmTime_minutes != currentTime_minutes) {
+                return false;
+            }
+
+            if (this.isIdle(this.mContext)) {
+                try {
+                    Intent intent = new Intent("com.enqualcomm.icare.ALARM", Uri.parse(alarmTime));
+                    intent.putExtra("closeAlarm", 0);
+                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    this.mContext.startActivity(intent);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    ICLogger.e(e.getMessage(), e);
+                }
+            }
+        } else if ("com.enqualcomm.support.ACTION_NOTICE_ALARM".equals(action)) {
+            String alarmTime = var1.getDataString();
+            if (this.isIdle(this.mContext)) {
+                try {
+                    var1 = new Intent("com.enqualcomm.icare.NOTICE", Uri.parse(alarmTime));
+                    var1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    this.mContext.startActivity(var1);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    ICLogger.e(e.getMessage(), e);
+                }
+            }
+        } else {
+            ICLogger.i("静默闹钟来了");
+            boolean silentchange;
+            if (!"com.eqc.heartrate.action.SILENT_START".equals(action) && !"com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START".equals(action)) {
+                silentchange = false;
+            } else {
+                silentchange = true;
+            }
+
+            //this.handleSilent(runtime, silentchange ^ true);
         }
-      }
-    } else if ("com.enqualcomm.support.ACTION_NOTICE_ALARM".equals(action)) {
-        String alarmTime = var1.getDataString();
-      if (this.isIdle(this.mContext)) {
-        try {
-          var1 = new Intent("com.enqualcomm.icare.NOTICE", Uri.parse(alarmTime));
-          var1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-          this.mContext.startActivity(var1);
-        } catch (Exception e) {
-          e.printStackTrace();
-          ICLogger.e(e.getMessage(),e);
+
+        return false;
+    }
+
+    @Override
+    public boolean onUserRequest(Message paramMessage, Connection paramConnection, Runtime paramRuntime) {
+        return false;
+    }
+
+    class AlramReceiver extends BroadcastReceiver {
+        AlramReceiver() {
         }
-      }
-    } else {
-      ICLogger.i("静默闹钟来了");
-      boolean silentchange;
-      if (!"com.eqc.heartrate.action.SILENT_START".equals(action) && !"com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START".equals(action)) {
-        silentchange = false;
-      } else {
-        silentchange = true;
-      }
-
-      //this.handleSilent(runtime, silentchange ^ true);
-    }
-
-    return false;
-  }
-
-  @Override
-  public boolean onUserRequest(Message paramMessage, Connection paramConnection, Runtime paramRuntime) {
-    return false;
-  }
-
-  class AlramReceiver extends BroadcastReceiver {
-    AlramReceiver() {
-    }
-
-    public void onReceive(Context var1, Intent var2) {
-      String action = var2.getAction();
-      StringBuilder var3 = new StringBuilder();
-      var3.append("action = ");
-      var3.append(action);
-      ICLogger.i(var3.toString());
-      if (ACTION_NOTICE_ALARM_CHANGE.equals(action)) {
-        SilentManager.this.voiceNotice = SilentManager.this.queryNotice();
-      } else if (ACTION_ALARM_ALARM_CHANGE.equals(action)) {
-        SilentManager.this.alarms = SilentManager.this.queryAlarm();
-      } else if ("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE".equals(action)) {
-        SilentManager.this.stheartRateList = SilentManager.this.queryStheartRate();
-        SilentManager.this.getStartAndEndStheartRateTime();
-        SilentManager.this.isStheartRateTime(false);
-      } else if ("com.eqc.heartrate.action.RESULT".equals(action)) {
-        String time = var2.getStringExtra("time");
-        int var4 = var2.getIntExtra("value", 0);
-        int var5 = var2.getIntExtra("type", 0);
-        StringBuilder var7 = new StringBuilder();
-        var7.append("(");
-        var7.append(time);
-        var7.append("@");
-        var7.append(var4);
-        var7.append("@");
-        var7.append(var5);
-        var7.append(")");
-        time = var7.toString();
+
+        public void onReceive(Context var1, Intent var2) {
+            String action = var2.getAction();
+            StringBuilder var3 = new StringBuilder();
+            var3.append("action = ");
+            var3.append(action);
+            ICLogger.i(var3.toString());
+            if (ACTION_NOTICE_ALARM_CHANGE.equals(action)) {
+                SilentManager.this.voiceNotice = SilentManager.this.queryNotice();
+            } else if (ACTION_ALARM_ALARM_CHANGE.equals(action)) {
+                SilentManager.this.alarms = SilentManager.this.queryAlarm();
+            } else if ("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE".equals(action)) {
+                SilentManager.this.stheartRateList = SilentManager.this.queryStheartRate();
+                SilentManager.this.getStartAndEndStheartRateTime();
+                SilentManager.this.isStheartRateTime(false);
+            } else if ("com.eqc.heartrate.action.RESULT".equals(action)) {
+                String time = var2.getStringExtra("time");
+                int var4 = var2.getIntExtra("value", 0);
+                int var5 = var2.getIntExtra("type", 0);
+                StringBuilder var7 = new StringBuilder();
+                var7.append("(");
+                var7.append(time);
+                var7.append("@");
+                var7.append(var4);
+                var7.append("@");
+                var7.append(var5);
+                var7.append(")");
+                time = var7.toString();
 //        SilentManager.this.mConnection.send(API.H60(SilentManager.this.mRuntime, var6));
-      } else if (ACTION_ANTIOFF_ALARM_CHANGE.equals(action)) {
-        SilentManager.this.sAntioffList = SilentManager.this.queryAntioff();
-        SilentManager.this.getStartAndEndSantioffTime();
-        SilentManager.this.mIsNeedAntioff = SilentManager.this.isAntioffTime(false);
-      }
+            } else if (ACTION_ANTIOFF_ALARM_CHANGE.equals(action)) {
+                SilentManager.this.sAntioffList = SilentManager.this.queryAntioff();
+                SilentManager.this.getStartAndEndSantioffTime();
+                SilentManager.this.mIsNeedAntioff = SilentManager.this.isAntioffTime(false);
+            }
 
+        }
     }
-  }
 }
\ No newline at end of file
index 473c612..8e38dc2 100644 (file)
@@ -6,7 +6,6 @@ import android.content.ContextWrapper;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.BatteryManager;
-import android.os.Build;
 import android.os.Handler;
 import android.os.Message;
 import android.os.PowerManager;
@@ -15,13 +14,11 @@ import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.LocationClient;
 import com.enqualcomm.support.bean.EventLooperHandlerThread;
+import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.service.AntiMonitorService;
 import com.enqualcomm.support.service.AudioService;
-import com.enqualcomm.support.service.Deliver;
 import com.ic.protocols.protocolAPIHelper;
-import com.enqualcomm.support.bean.Runtime;
 
-//import static android.content.Context.BATTERY_SERVICE;
 import static android.os.BatteryManager.BATTERY_STATUS_CHARGING;
 import static android.os.BatteryManager.BATTERY_STATUS_DISCHARGING;
 import static android.os.BatteryManager.BATTERY_STATUS_FULL;
@@ -34,258 +31,265 @@ import static android.os.BatteryManager.EXTRA_VOLTAGE;
 import static com.enqualcomm.support.Constants.ACTION_BATTERYLOW;
 import static com.enqualcomm.support.Constants.KEY_BATTERY_EVENT;
 
+//import static android.content.Context.BATTERY_SERVICE;
+
 public class BatteryUtil {
-  private BroadcastReceiver batteryChangedReceiver = new BroadcastReceiver() {
-      public void onReceive(Context param1Context, Intent intent) {
-        if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
-          int extra_status = intent.getIntExtra(EXTRA_STATUS , BATTERY_STATUS_UNKNOWN );
-          StringBuilder msg=new StringBuilder("EXTRA_STATUS = ");
-          switch (extra_status){
-            case BATTERY_STATUS_CHARGING:
-              msg.append("BATTERY_STATUS_CHARGING ");
-              break;
-            case BATTERY_STATUS_UNKNOWN:
-              msg.append("BATTERY_STATUS_UNKNOWN ");
-              break;
-            case BATTERY_STATUS_DISCHARGING:
-              msg.append("BATTERY_STATUS_DISCHARGING ");
-              break;
-            case BATTERY_STATUS_FULL:
-              msg.append("BATTERY_STATUS_FULL ");
-              if (Config.isL03Tracker){
-                LedUtil.setRedLedOn(false);
-                LedUtil.setBlueLedOn(true);
-              }
-              break;
-            case BATTERY_STATUS_NOT_CHARGING:
-              msg.append("BATTERY_STATUS_NOT_CHARGING ");
-              break;
+    private BroadcastReceiver batteryChangedReceiver = new BroadcastReceiver() {
+        public void onReceive(Context param1Context, Intent intent) {
+            if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
+                int extra_status = intent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);
+                StringBuilder msg = new StringBuilder("EXTRA_STATUS = ");
+                switch (extra_status) {
+                    case BATTERY_STATUS_CHARGING:
+                        msg.append("BATTERY_STATUS_CHARGING ");
+                        break;
+                    case BATTERY_STATUS_UNKNOWN:
+                        msg.append("BATTERY_STATUS_UNKNOWN ");
+                        break;
+                    case BATTERY_STATUS_DISCHARGING:
+                        msg.append("BATTERY_STATUS_DISCHARGING ");
+                        break;
+                    case BATTERY_STATUS_FULL:
+                        msg.append("BATTERY_STATUS_FULL ");
+                        if (Config.isL03Tracker) {
+                            LedUtil.setRedLedOn(false);
+                            LedUtil.setBlueLedOn(true);
+                        }
+                        break;
+                    case BATTERY_STATUS_NOT_CHARGING:
+                        msg.append("BATTERY_STATUS_NOT_CHARGING ");
+                        break;
 
-          }
-          msg.append("; ");
-          if (extra_status == BATTERY_STATUS_CHARGING) {
-            if(mRuntime.getBatterychanging()==false){
-              ICLogger.i("Send BatteryCharging event!");
-              connection.send(protocolAPIHelper.getChargingMSG(1));
-            }
-            mRuntime.setBatterychanging(true);
-            mRuntime.setBatteryLow(false);
-          } else {
-            if(mRuntime.getBatterychanging()==true){
-              //send
-              ICLogger.i("Send no BatteryCharging event!");
-              connection.send(protocolAPIHelper.getChargingMSG(0));
-            }
-            mRuntime.setBatterychanging(false);
-          }
-          int batLevel = intent.getIntExtra(EXTRA_LEVEL, 0) * 100 / intent.getIntExtra(EXTRA_SCALE, 100);
-          // 当前电池电压
-          int batteryVolt = intent.getIntExtra(EXTRA_VOLTAGE, -1);
-          mRuntime.setBatteryVoltage(batteryVolt);
-          msg.append("BatteryLevel "+batLevel + " BatteryVotage "+batteryVolt+"; ");
-          if (Config.LOG_TOFILE)ICLogger.logToFile("Battery",msg.toString());
-          ICLogger.i(msg.toString());
-          //处理电压
-          process_battery_level(param1Context,batLevel);
+                }
+                msg.append("; ");
+                if (extra_status == BATTERY_STATUS_CHARGING) {
+                    if (mRuntime.getBatterychanging() == false) {
+                        ICLogger.i("Send BatteryCharging event!");
+                        connection.send(protocolAPIHelper.getChargingMSG(1));
+                    }
+                    mRuntime.setBatterychanging(true);
+                    mRuntime.setBatteryLow(false);
+                } else {
+                    if (mRuntime.getBatterychanging() == true) {
+                        //send
+                        ICLogger.i("Send no BatteryCharging event!");
+                        connection.send(protocolAPIHelper.getChargingMSG(0));
+                    }
+                    mRuntime.setBatterychanging(false);
+                }
+                int batLevel = intent.getIntExtra(EXTRA_LEVEL, 0) * 100 / intent.getIntExtra(EXTRA_SCALE, 100);
+                // 当前电池电压
+                int batteryVolt = intent.getIntExtra(EXTRA_VOLTAGE, -1);
+                mRuntime.setBatteryVoltage(batteryVolt);
+                msg.append("BatteryLevel " + batLevel + " BatteryVotage " + batteryVolt + "; ");
+                if (Config.LOG_TOFILE) ICLogger.logToFile("Battery", msg.toString());
+                ICLogger.i(msg.toString());
+                //处理电压
+                process_battery_level(param1Context, batLevel);
 
-        }else if (Intent.ACTION_BATTERY_LOW.equals(intent.getAction())) {
-        //  mRuntime.setBatteryLow(true);
-       //   if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","BatteryLow !");
-        //  mRuntime.setAlarmType(false,mRuntime.getBatteryLow(),false,false);
-          //trigger AP10 报警定位
-       //   connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.getWarningMSG(mRuntime)));
+            } else if (Intent.ACTION_BATTERY_LOW.equals(intent.getAction())) {
+                //  mRuntime.setBatteryLow(true);
+                //   if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","BatteryLow !");
+                //  mRuntime.setAlarmType(false,mRuntime.getBatteryLow(),false,false);
+                //trigger AP10 报警定位
+                //   connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.getWarningMSG(mRuntime)));
 
-        }else if (Intent.ACTION_BATTERY_OKAY.equals(intent.getAction())){
-          ICLogger.i("Battery OKAY !");
-          if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","Battery OKAY !");
-          send_batterylow_event_broadcast(param1Context,0);
-        }else if (Intent.ACTION_POWER_CONNECTED.equals(intent.getAction())){
-          ICLogger.i("ACTION_POWER_CONNECTED !");
-          mRuntime.setPowerConnected(true);
-          if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","ACTION_POWER_CONNECTED!");
-          if (Config.isL03Tracker){
-            LedUtil.setRedLedOn(true);
-          }
+            } else if (Intent.ACTION_BATTERY_OKAY.equals(intent.getAction())) {
+                ICLogger.i("Battery OKAY !");
+                if (Config.LOG_TOFILE) ICLogger.logToFile("Battery", "Battery OKAY !");
+                send_batterylow_event_broadcast(param1Context, 0);
+            } else if (Intent.ACTION_POWER_CONNECTED.equals(intent.getAction())) {
+                ICLogger.i("ACTION_POWER_CONNECTED !");
+                mRuntime.setPowerConnected(true);
+                if (Config.LOG_TOFILE) ICLogger.logToFile("Battery", "ACTION_POWER_CONNECTED!");
+                if (Config.isL03Tracker) {
+                    LedUtil.setRedLedOn(true);
+                }
 
-        }else if (Intent.ACTION_POWER_DISCONNECTED.equals(intent.getAction())){
-          ICLogger.i("ACTION_POWER_DISCONNECTED!");
-          mRuntime.setPowerConnected(false);
-          if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","ACTION_POWER_DISCONNECTED !");
+            } else if (Intent.ACTION_POWER_DISCONNECTED.equals(intent.getAction())) {
+                ICLogger.i("ACTION_POWER_DISCONNECTED!");
+                mRuntime.setPowerConnected(false);
+                if (Config.LOG_TOFILE) ICLogger.logToFile("Battery", "ACTION_POWER_DISCONNECTED !");
 
-          if (Config.isL03Tracker){
-            LedUtil.setRedLedOn(false);
-          }
+                if (Config.isL03Tracker) {
+                    LedUtil.setRedLedOn(false);
+                }
+            }
         }
-      }
     };
-  private Handler mHandler=null;
-  PowerManager.WakeLock mWakeLock = null;
+    private Handler mHandler = null;
+    PowerManager.WakeLock mWakeLock = null;
 
-  private static void play_waning_notify(Context context){
-    AudioService.getInstance().play(context.getAssets(), "warning.mp3");
-  }
+    private static void play_waning_notify(Context context) {
+        AudioService.getInstance().play(context.getAssets(), "warning.mp3");
+    }
 
-  //根据电池电压进行低电报警等状态处理
-  public void process_battery_level(Context param1Context, int batLevel){
-    if (batLevel >= 100) {
-      mRuntime.setBattery(String.format("%03d",100));
-      mRuntime.setBattery(100);
-      mRuntime.setHaveBatteryChange(false);
-      mRuntime.setBatteryLow(false);
-    } else if (batLevel<100 && batLevel >= 25) {
-      mRuntime.setBattery(String.format("%03d",batLevel));
-      mRuntime.setBattery(batLevel);
-      mRuntime.setHaveBatteryChange(false);
-      mRuntime.setBatteryLow(false);
-    } else if (batLevel<25 && batLevel > 15) {
-      mRuntime.setBattery(String.format("%03d",batLevel));
-      mRuntime.setBattery(batLevel);
-      mRuntime.setHaveBatteryChange(true);
-      mRuntime.setBatteryLow(false);
-    } else if (batLevel<=15 && batLevel > 10) {
-      if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","BatteryLow  less than 15%!");
-      checkAndSendBatteryEvent(param1Context,mRuntime);
-      mRuntime.setBattery(String.format("%03d",batLevel));
-      mRuntime.setBattery(batLevel);
-      mRuntime.setHaveBatteryChange(true);
-      mRuntime.setBatteryLow(true);
-    } else if (batLevel<=10 && batLevel > 5) {
-      if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","BatteryLow  less than 10%!");
-      checkAndSendBatteryEvent(param1Context,mRuntime);
-      mRuntime.setBattery(String.format("%03d",batLevel));
-      mRuntime.setBattery(batLevel);
-      mRuntime.setHaveBatteryChange(true);
-      mRuntime.setBatteryLow(true);
-    } else {
-      if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","BatteryLow less than 5% !");
-      checkAndSendBatteryEvent(param1Context,mRuntime);
-      mRuntime.setBattery(String.format("%03d",batLevel));
-      mRuntime.setBattery(batLevel);
-      mRuntime.setHaveBatteryChange(true);
-      mRuntime.setBatteryLow(true);
+    //根据电池电压进行低电报警等状态处理
+    public void process_battery_level(Context param1Context, int batLevel) {
+        if (batLevel >= 100) {
+            mRuntime.setBattery(String.format("%03d", 100));
+            mRuntime.setBattery(100);
+            mRuntime.setHaveBatteryChange(false);
+            mRuntime.setBatteryLow(false);
+        } else if (batLevel < 100 && batLevel >= 25) {
+            mRuntime.setBattery(String.format("%03d", batLevel));
+            mRuntime.setBattery(batLevel);
+            mRuntime.setHaveBatteryChange(false);
+            mRuntime.setBatteryLow(false);
+        } else if (batLevel < 25 && batLevel > 15) {
+            mRuntime.setBattery(String.format("%03d", batLevel));
+            mRuntime.setBattery(batLevel);
+            mRuntime.setHaveBatteryChange(true);
+            mRuntime.setBatteryLow(false);
+        } else if (batLevel <= 15 && batLevel > 10) {
+            if (Config.LOG_TOFILE) ICLogger.logToFile("Battery", "BatteryLow  less than 15%!");
+            checkAndSendBatteryEvent(param1Context, mRuntime);
+            mRuntime.setBattery(String.format("%03d", batLevel));
+            mRuntime.setBattery(batLevel);
+            mRuntime.setHaveBatteryChange(true);
+            mRuntime.setBatteryLow(true);
+        } else if (batLevel <= 10 && batLevel > 5) {
+            if (Config.LOG_TOFILE) ICLogger.logToFile("Battery", "BatteryLow  less than 10%!");
+            checkAndSendBatteryEvent(param1Context, mRuntime);
+            mRuntime.setBattery(String.format("%03d", batLevel));
+            mRuntime.setBattery(batLevel);
+            mRuntime.setHaveBatteryChange(true);
+            mRuntime.setBatteryLow(true);
+        } else {
+            if (Config.LOG_TOFILE) ICLogger.logToFile("Battery", "BatteryLow less than 5% !");
+            checkAndSendBatteryEvent(param1Context, mRuntime);
+            mRuntime.setBattery(String.format("%03d", batLevel));
+            mRuntime.setBattery(batLevel);
+            mRuntime.setHaveBatteryChange(true);
+            mRuntime.setBatteryLow(true);
+        }
     }
-  }
 
-  public static void checkAndSendBatteryEvent(Context context, Runtime runtime){
+    public static void checkAndSendBatteryEvent(Context context, Runtime runtime) {
 
-    //没有充电,上次电池level > 15% , 上次电池并且不是 低电状态,则报警
-    if (runtime.isPowerConnected()==false  && runtime.getBatterylevel()<= 15 && runtime.getBatterylevel()> 10 && runtime.getBatteryLow()==false) {
-      Intent intent = new Intent();
-      intent.setAction(ACTION_BATTERYLOW);
-      intent.putExtra(KEY_BATTERY_EVENT, 1);
-      context.sendBroadcast(intent);
-      play_waning_notify(context);
-      runtime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);
-      //trigger AP10 报警定位
+        //没有充电,上次电池level > 15% , 上次电池并且不是 低电状态,则报警
+        if (runtime.isPowerConnected() == false && runtime.getBatterylevel() <= 15 && runtime.getBatterylevel() > 10 && runtime.getBatteryLow() == false) {
+            Intent intent = new Intent();
+            intent.setAction(ACTION_BATTERYLOW);
+            intent.putExtra(KEY_BATTERY_EVENT, 1);
+            context.sendBroadcast(intent);
+            play_waning_notify(context);
+            runtime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);
+            //trigger AP10 报警定位
 //      Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-      ICLogger.i("triggerSOSLocationProcess ");
-      LocationClient.getInstance().triggerSOSLocationProcess();
-    }else if (runtime.isPowerConnected()==false  && runtime.getBatterylevel()<= 10 && runtime.getBatterylevel()> 5 && runtime.getBatteryLow()==false) {
-      //百分之10以内的还不能正常报数,需要后面再优化
-      Intent intent=new Intent();
-      intent.setAction(ACTION_BATTERYLOW);
-      intent.putExtra(KEY_BATTERY_EVENT,1);
-      context.sendBroadcast(intent);
-      play_waning_notify(context);
-      runtime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);
-      //trigger AP10 报警定位
+            ICLogger.i("triggerSOSLocationProcess ");
+            LocationClient.getInstance().triggerSOSLocationProcess();
+        } else if (runtime.isPowerConnected() == false && runtime.getBatterylevel() <= 10 && runtime.getBatterylevel() > 5 && runtime.getBatteryLow() == false) {
+            //百分之10以内的还不能正常报数,需要后面再优化
+            Intent intent = new Intent();
+            intent.setAction(ACTION_BATTERYLOW);
+            intent.putExtra(KEY_BATTERY_EVENT, 1);
+            context.sendBroadcast(intent);
+            play_waning_notify(context);
+            runtime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);
+            //trigger AP10 报警定位
 //      Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-      ICLogger.i("triggerSOSLocationProcess ");
-      LocationClient.getInstance().triggerSOSLocationProcess();
-    }else if (runtime.isPowerConnected()==false && runtime.getBatterylevel()<= 5 ) {
-      //没有充电,上次电池level > 15% , 上次电池并且不是 电池低电状态,则报警
-      Intent intent=new Intent();
-      intent.setAction(ACTION_BATTERYLOW);
-      intent.putExtra(KEY_BATTERY_EVENT,1);
-      context.sendBroadcast(intent);
-      play_waning_notify(context);
-      runtime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);
-      //trigger AP10 报警定位
+            ICLogger.i("triggerSOSLocationProcess ");
+            LocationClient.getInstance().triggerSOSLocationProcess();
+        } else if (runtime.isPowerConnected() == false && runtime.getBatterylevel() <= 5) {
+            //没有充电,上次电池level > 15% , 上次电池并且不是 电池低电状态,则报警
+            Intent intent = new Intent();
+            intent.setAction(ACTION_BATTERYLOW);
+            intent.putExtra(KEY_BATTERY_EVENT, 1);
+            context.sendBroadcast(intent);
+            play_waning_notify(context);
+            runtime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);
+            //trigger AP10 报警定位
 //      Deliver.sendLocationMSG( protocolAPIHelper.getWarningMSG(runtime));
-      ICLogger.i("triggerSOSLocationProcess ");
-      LocationClient.getInstance().triggerSOSLocationProcess();
+            ICLogger.i("triggerSOSLocationProcess ");
+            LocationClient.getInstance().triggerSOSLocationProcess();
+        }
     }
-  }
-  private void send_batterylow_event_broadcast(Context context,int batlow){
-    mHandler.post(new Runnable() {
-      @Override
-      public void run() {
-        Intent intent=new Intent();
-        intent.setAction(ACTION_BATTERYLOW);
-        intent.putExtra(KEY_BATTERY_EVENT,batlow);
-        context.sendBroadcast(intent);
-      }
-    });
-  }
-  private StringBuffer mBuffer;
-
-  Runtime mRuntime;
-  Connection connection;
-  public BatteryUtil(Runtime paramRuntime,Connection _connection) {
-    this.mRuntime = paramRuntime;
-    connection = _connection;
 
-    if (mHandler==null) {
-      mHandler = new Handler(EventLooperHandlerThread.makeLooper(BatteryUtil.class.getSimpleName())) {
-        public void handleMessage(Message msg) {
-          super.handleMessage(msg);
-          if (msg.what == 100) {
-            if (mWakeLock != null && mWakeLock.isHeld()) {
-              mWakeLock.release();
+    private void send_batterylow_event_broadcast(Context context, int batlow) {
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                Intent intent = new Intent();
+                intent.setAction(ACTION_BATTERYLOW);
+                intent.putExtra(KEY_BATTERY_EVENT, batlow);
+                context.sendBroadcast(intent);
             }
-          }else if (msg.what == 200){
-            AudioService.getInstance().stop();
-          }
-        }
-      };
+        });
     }
-    if (mWakeLock==null) {
-      PowerManager mPowerManager = (PowerManager) CoreService.getInstance().getSystemService(Context.POWER_SERVICE);
-      mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, AntiMonitorService.class.getSimpleName());
+
+    private StringBuffer mBuffer;
+
+    Runtime mRuntime;
+    Connection connection;
+
+    public BatteryUtil(Runtime paramRuntime, Connection _connection) {
+        this.mRuntime = paramRuntime;
+        connection = _connection;
+
+        if (mHandler == null) {
+            mHandler = new Handler(EventLooperHandlerThread.getInstance().makeLooper()) {
+                public void handleMessage(Message msg) {
+                    super.handleMessage(msg);
+                    if (msg.what == 100) {
+                        if (mWakeLock != null && mWakeLock.isHeld()) {
+                            mWakeLock.release();
+                        }
+                    } else if (msg.what == 200) {
+                        AudioService.getInstance().stop();
+                    }
+                }
+            };
+        }
+        if (mWakeLock == null) {
+            PowerManager mPowerManager = (PowerManager) CoreService.getInstance().getSystemService(Context.POWER_SERVICE);
+            mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, AntiMonitorService.class.getSimpleName());
+        }
+
     }
 
-  }
-  
-  public void registerBroadReceiver() {
-    IntentFilter intentFilter = new IntentFilter();
-    intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
-    intentFilter.addAction(Intent.ACTION_BATTERY_LOW);
-    intentFilter.addAction(Intent.ACTION_BATTERY_OKAY);
-    intentFilter.addAction(Intent.ACTION_POWER_CONNECTED);
-    intentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
-    (this.mRuntime.getContextProxy()).context.registerReceiver(this.batteryChangedReceiver, intentFilter);
-  }
+    public void registerBroadReceiver() {
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
+        intentFilter.addAction(Intent.ACTION_BATTERY_LOW);
+        intentFilter.addAction(Intent.ACTION_BATTERY_OKAY);
+        intentFilter.addAction(Intent.ACTION_POWER_CONNECTED);
+        intentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
+        (this.mRuntime.getContextProxy()).context.registerReceiver(this.batteryChangedReceiver, intentFilter);
+    }
 
-  public int getBatteryLevel(Context context) {
+    public int getBatteryLevel(Context context) {
 //    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
 //      BatteryManager batteryManager = (BatteryManager)context.getSystemService(BATTERY_SERVICE);
 //      return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
 //    } else {
-    Intent intent = new ContextWrapper(context.getApplicationContext()).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
-    int batLevel = (intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100) /
-            intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+        Intent intent = new ContextWrapper(context.getApplicationContext()).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+        int batLevel = (intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100) /
+                intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
 
-    process_battery_level(context,batLevel);
+        process_battery_level(context, batLevel);
 
-    return batLevel;
-  }
+        return batLevel;
+    }
 
 
-  public boolean isPowerConnected(Context context){
+    public boolean isPowerConnected(Context context) {
 
-    IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
-    Intent batteryStatus = context.registerReceiver(null, ifilter);
+        IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+        Intent batteryStatus = context.registerReceiver(null, ifilter);
 //你可以读到充电状态,如果在充电,可以读到是usb还是交流电
 
 // 是否在充电
-    int status = batteryStatus.getIntExtra(EXTRA_STATUS, -1);
-    boolean isCharging = (status == BATTERY_STATUS_CHARGING)  ;//||     status == BatteryManager.BATTERY_STATUS_FULL;
-    boolean isCharging2 = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) != 0;
-    ICLogger.d("isCharging = " +isCharging+" isCharging2 "+ isCharging2 );
-    return isCharging2;
-  }
+        int status = batteryStatus.getIntExtra(EXTRA_STATUS, -1);
+        boolean isCharging = (status == BATTERY_STATUS_CHARGING);//||     status == BatteryManager.BATTERY_STATUS_FULL;
+        boolean isCharging2 = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) != 0;
+        ICLogger.d("isCharging = " + isCharging + " isCharging2 " + isCharging2);
+        return isCharging2;
+    }
 
-  public void unregisterBroadReceiver() { (this.mRuntime.getContextProxy()).context.unregisterReceiver(this.batteryChangedReceiver); }
+    public void unregisterBroadReceiver() {
+        (this.mRuntime.getContextProxy()).context.unregisterReceiver(this.batteryChangedReceiver);
+    }
 }
 
 
index a7fca22..f8c9f7a 100644 (file)
@@ -10,334 +10,339 @@ import android.hardware.SensorManager;
 import android.location.LocationManager;
 import android.net.Uri;
 import android.net.wifi.WifiManager;
-import android.os.Build;
-import android.os.Environment;
 import android.os.Handler;
-import android.os.PowerManager;
+import android.os.HandlerThread;
 import android.telephony.TelephonyManager;
-import android.util.Log;
-
 
 import com.enqualcomm.support.Config;
-import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.ICContentProvider;
 import com.enqualcomm.support.R;
 import com.enqualcomm.support.bean.Alarm;
-import com.enqualcomm.support.bean.EventLooperHandlerThread;
 import com.enqualcomm.support.bean.NoticeContent;
-import com.enqualcomm.support.bean.Silent;
 import com.enqualcomm.support.bean.Runtime;
-import com.enqualcomm.support.bean.VoiceContent;
 import com.enqualcomm.support.service.AudioService;
-import com.enqualcomm.support.service.Deliver;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Iterator;
-import java.util.concurrent.TimeUnit;
-
 
 import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
 import static com.enqualcomm.support.Constants.ACTION_ISCONNECTED;
 import static com.enqualcomm.support.Constants.ACTION_KEEPSIT_ALARM;
-import static com.enqualcomm.support.Constants.ACTION_SIT_ALARM;
 import static com.enqualcomm.support.Constants.ActionReceivePushTxt;
 import static com.enqualcomm.support.Constants.ActionSrvPushTxt;
 import static com.enqualcomm.support.Constants.DIALOG_ACTION;
 
 public class ContextProxy {
-  private static final long ONE_WEEK = 604800000L;
-  
-  private final AlarmManager alarmManager;
-  
-  public Context context;
-  
-  private final LocationManager locationManager;
-  
-  private final ContentResolver resolver;
-  
-  private final SensorManager sensorManager;
-  
-  private final TelephonyManager telephonyManager;
-  
-  private final WifiManager wifiManager;
-  private static Handler mHandler=new Handler(EventLooperHandlerThread.makeLooper(ContextProxy.class.getSimpleName()));
-  public ContextProxy(Context _context) {
-    this.context = _context;
-    this.resolver = context.getContentResolver();
-    this.locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
-    this.alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
-    this.telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
-    this.wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
-    this.sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
-
-  }
-
-  private PendingIntent getPendingIntent(String paramString1, String paramString2, String paramString3, String name, int paramInt) {
-    StringBuilder stringBuilder = new StringBuilder("alarm:");
-    stringBuilder.append(paramString1);
-    stringBuilder.append(",");
-    stringBuilder.append(paramString2);
-    stringBuilder.append(",");
-    stringBuilder.append(paramString3);
-    stringBuilder.append(",");
-    stringBuilder.append(name);
-    stringBuilder.append(",");
-    stringBuilder.append(paramInt);
-    Intent intent = new Intent("com.enqualcomm.icare.ALARM", Uri.parse(stringBuilder.toString()));
-    return PendingIntent.getActivity(this.context, 0, intent, FLAG_UPDATE_CURRENT);
-  }
-  
-  private PendingIntent getPendingIntent(String noticeTime, String noticeName, String noticeNumber, String noticeID, String noticeCategory, String noticeFrequency, String noticeContent) {
-    StringBuilder stringBuilder = new StringBuilder("notice:");
-    stringBuilder.append(noticeTime);
-    stringBuilder.append(",");
-    stringBuilder.append(noticeName);
-    stringBuilder.append(",");
-    stringBuilder.append(noticeNumber);
-    stringBuilder.append(",");
-    stringBuilder.append(noticeID);
-    stringBuilder.append(",");
-    stringBuilder.append(noticeCategory);
-    stringBuilder.append(",");
-    stringBuilder.append(noticeFrequency);
-    stringBuilder.append(",");
-    stringBuilder.append(noticeContent);
-    Intent intent = new Intent("com.enqualcomm.icare.NOTICE", Uri.parse(stringBuilder.toString()));
-
-    return PendingIntent.getActivity(this.context, 0, intent, FLAG_UPDATE_CURRENT);
-  }
-  
-  private void initAlarmAndSilent() {
-
-    Calendar calendar2 = Calendar.getInstance();
-    calendar2.set(Calendar.SECOND, 0);
-    long l = System.currentTimeMillis();
-    Cursor cursor2 = this.context.getContentResolver().query(ICContentProvider.ALARM_URI, null, null, null, null);
-    byte b2 = 3;
-    byte b1 = 5;
-    char c = '\002';
-    if (cursor2 != null) {
-      while (cursor2.moveToNext()) {
-        try {
-          if ("ON".equals(cursor2.getString(4))) {
-            String str2 = cursor2.getString(1);
-            String str1 = cursor2.getString(c);
-            String str3 = cursor2.getString(b2);
-            String str4 = cursor2.getString(b1);
-            calendar2.set(Calendar.HOUR_OF_DAY, Integer.parseInt(str2.substring(c, 4)));
-            calendar2.set(Calendar.MINUTE, Integer.parseInt(str2.substring(b1, 7)));
-            char[] arrayOfChar = str1.toCharArray();
-            int i = arrayOfChar.length;
-            byte b = 1;
-            while (b < i) {
-              c = (char) (arrayOfChar[b] - '/'); //将ascii数字字符转换为对应的数字
-              calendar2.set(Calendar.DAY_OF_WEEK, c);
-              long l1 = calendar2.getTimeInMillis();
-              if (l1 <= l)
-                l1 += ONE_WEEK;
-              PendingIntent pendingIntent = getPendingIntent(str2, str1, str3, str4, c);
-              AlarmHelper.setAlarm(this.alarmManager, l1, pendingIntent);
-              b++;
-              c = '\002';
-              b1 = 5;
-              b2 = 3;
-            }
-          }
-        }catch (Exception e){
-          e.printStackTrace();
-          ICLogger.e(e.getMessage(),e);
+    private static final long ONE_WEEK = 604800000L;
+
+    private final AlarmManager alarmManager;
+
+    public Context context;
+
+    private final LocationManager locationManager;
+
+    private final ContentResolver resolver;
+
+    private final SensorManager sensorManager;
+
+    private final TelephonyManager telephonyManager;
+
+    private final WifiManager wifiManager;
+    private static Handler mHandler = null;
+
+    public ContextProxy(Context _context) {
+        if (mHandler == null) {
+            HandlerThread handlerThread = new HandlerThread("ic:context-proxy-handler-thread");
+            handlerThread.start();
+            mHandler = new Handler(handlerThread.getLooper());
         }
-      }
-      cursor2.close();
+        this.context = _context;
+        this.resolver = context.getContentResolver();
+        this.locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
+        this.alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+        this.telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+        this.wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        this.sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
+
+    }
+
+    private PendingIntent getPendingIntent(String paramString1, String paramString2, String paramString3, String name, int paramInt) {
+        StringBuilder stringBuilder = new StringBuilder("alarm:");
+        stringBuilder.append(paramString1);
+        stringBuilder.append(",");
+        stringBuilder.append(paramString2);
+        stringBuilder.append(",");
+        stringBuilder.append(paramString3);
+        stringBuilder.append(",");
+        stringBuilder.append(name);
+        stringBuilder.append(",");
+        stringBuilder.append(paramInt);
+        Intent intent = new Intent("com.enqualcomm.icare.ALARM", Uri.parse(stringBuilder.toString()));
+        return PendingIntent.getActivity(this.context, 0, intent, FLAG_UPDATE_CURRENT);
+    }
+
+    private PendingIntent getPendingIntent(String noticeTime, String noticeName, String noticeNumber, String noticeID, String noticeCategory, String noticeFrequency, String noticeContent) {
+        StringBuilder stringBuilder = new StringBuilder("notice:");
+        stringBuilder.append(noticeTime);
+        stringBuilder.append(",");
+        stringBuilder.append(noticeName);
+        stringBuilder.append(",");
+        stringBuilder.append(noticeNumber);
+        stringBuilder.append(",");
+        stringBuilder.append(noticeID);
+        stringBuilder.append(",");
+        stringBuilder.append(noticeCategory);
+        stringBuilder.append(",");
+        stringBuilder.append(noticeFrequency);
+        stringBuilder.append(",");
+        stringBuilder.append(noticeContent);
+        Intent intent = new Intent("com.enqualcomm.icare.NOTICE", Uri.parse(stringBuilder.toString()));
+
+        return PendingIntent.getActivity(this.context, 0, intent, FLAG_UPDATE_CURRENT);
     }
-    Calendar calendar1 = Calendar.getInstance();
-    calendar1.set(Calendar.SECOND, 0);
-    Cursor cursor1 = this.context.getContentResolver().query(ICContentProvider.NOTICE_URL, null, null, null, null);
-    if (cursor1 != null) {
-      while (cursor1.moveToNext()) {
-        try {
-          String str1 = cursor1.getString(1);
-          String str2 = cursor1.getString(2);
-          String str3 = cursor1.getString(3);
-          String str4 = cursor1.getString(4);
-          String str5 = cursor1.getString(5);
-          String str6 = cursor1.getString(6);
-          String str7 = cursor1.getString(6);
-          if (str1 != null) {
-            String year = str1.substring(0, 4);
-            String month = str1.substring(4, 6);
-            String day = str1.substring(6, 8);
-            String hour = str1.substring(8, 10);
-            String minute = str1.substring(10, 12);
-            calendar1.set(Calendar.YEAR, Integer.parseInt(year));
-            calendar1.set(Calendar.MONTH, Integer.parseInt(month));
-            calendar1.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));
-            calendar1.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
-            calendar1.set(Calendar.MINUTE, Integer.parseInt(minute));
-            long l1 = calendar1.getTimeInMillis();
-            if (l1 > l) {
-              PendingIntent pendingIntent = getPendingIntent(str1, str2, str3, str4, str5, str6, str7);
-              AlarmHelper.setAlarm(this.alarmManager, l1, pendingIntent);
+
+    private void initAlarmAndSilent() {
+
+        Calendar calendar2 = Calendar.getInstance();
+        calendar2.set(Calendar.SECOND, 0);
+        long l = System.currentTimeMillis();
+        Cursor cursor2 = this.context.getContentResolver().query(ICContentProvider.ALARM_URI, null, null, null, null);
+        byte b2 = 3;
+        byte b1 = 5;
+        char c = '\002';
+        if (cursor2 != null) {
+            while (cursor2.moveToNext()) {
+                try {
+                    if ("ON".equals(cursor2.getString(4))) {
+                        String str2 = cursor2.getString(1);
+                        String str1 = cursor2.getString(c);
+                        String str3 = cursor2.getString(b2);
+                        String str4 = cursor2.getString(b1);
+                        calendar2.set(Calendar.HOUR_OF_DAY, Integer.parseInt(str2.substring(c, 4)));
+                        calendar2.set(Calendar.MINUTE, Integer.parseInt(str2.substring(b1, 7)));
+                        char[] arrayOfChar = str1.toCharArray();
+                        int i = arrayOfChar.length;
+                        byte b = 1;
+                        while (b < i) {
+                            c = (char) (arrayOfChar[b] - '/'); //将ascii数字字符转换为对应的数字
+                            calendar2.set(Calendar.DAY_OF_WEEK, c);
+                            long l1 = calendar2.getTimeInMillis();
+                            if (l1 <= l)
+                                l1 += ONE_WEEK;
+                            PendingIntent pendingIntent = getPendingIntent(str2, str1, str3, str4, c);
+                            AlarmHelper.setAlarm(this.alarmManager, l1, pendingIntent);
+                            b++;
+                            c = '\002';
+                            b1 = 5;
+                            b2 = 3;
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    ICLogger.e(e.getMessage(), e);
+                }
+            }
+            cursor2.close();
+        }
+        Calendar calendar1 = Calendar.getInstance();
+        calendar1.set(Calendar.SECOND, 0);
+        Cursor cursor1 = this.context.getContentResolver().query(ICContentProvider.NOTICE_URL, null, null, null, null);
+        if (cursor1 != null) {
+            while (cursor1.moveToNext()) {
+                try {
+                    String str1 = cursor1.getString(1);
+                    String str2 = cursor1.getString(2);
+                    String str3 = cursor1.getString(3);
+                    String str4 = cursor1.getString(4);
+                    String str5 = cursor1.getString(5);
+                    String str6 = cursor1.getString(6);
+                    String str7 = cursor1.getString(6);
+                    if (str1 != null) {
+                        String year = str1.substring(0, 4);
+                        String month = str1.substring(4, 6);
+                        String day = str1.substring(6, 8);
+                        String hour = str1.substring(8, 10);
+                        String minute = str1.substring(10, 12);
+                        calendar1.set(Calendar.YEAR, Integer.parseInt(year));
+                        calendar1.set(Calendar.MONTH, Integer.parseInt(month));
+                        calendar1.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));
+                        calendar1.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
+                        calendar1.set(Calendar.MINUTE, Integer.parseInt(minute));
+                        long l1 = calendar1.getTimeInMillis();
+                        if (l1 > l) {
+                            PendingIntent pendingIntent = getPendingIntent(str1, str2, str3, str4, str5, str6, str7);
+                            AlarmHelper.setAlarm(this.alarmManager, l1, pendingIntent);
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    ICLogger.e(e.getMessage(), e);
+                }
             }
-          }
-        }catch (Exception e){
-          e.printStackTrace();
-          ICLogger.e(e.getMessage(),e);
+            cursor1.close();
         }
-      }
-      cursor1.close();
     }
-  }
-  
-  public LocationManager getLocationManager() { return this.locationManager; }
-  
-  public ContentResolver getResolver() { return this.resolver; }
-  
-  public SensorManager getSensorManager() { return this.sensorManager; }
-  
-  public TelephonyManager getTelephonyManager() { return this.telephonyManager; }
-  
-  public WifiManager getWifiManager() { return this.wifiManager; }
-  
-
-  public void resolverAlarm(ArrayList<Alarm> paramArrayList) {
-    Cursor cursor = this.context.getContentResolver().query(ICContentProvider.ALARM_URI, null, null, null, null);
-    char c = '\001';
-    if (cursor != null) {
-      while (cursor.moveToNext()) {
-        if ("ON".equals(cursor.getString(4))) {
-          String str1 = cursor.getString(c);
-          String str2 = cursor.getString(2);
-          String str3 = cursor.getString(3);
-          String str4 = cursor.getString(5);
-          char[] arrayOfChar = str2.toCharArray();
-          int i = arrayOfChar.length;
-          byte b = 1;
-          while (b < i) {
-            c = arrayOfChar[b];
-            this.alarmManager.cancel(getPendingIntent(str1, str2, str3, str4, c - '/'));
-            b++;
-            c = '\001';
-          }
+
+    public LocationManager getLocationManager() {
+        return this.locationManager;
+    }
+
+    public ContentResolver getResolver() {
+        return this.resolver;
+    }
+
+    public SensorManager getSensorManager() {
+        return this.sensorManager;
+    }
+
+    public TelephonyManager getTelephonyManager() {
+        return this.telephonyManager;
+    }
+
+    public WifiManager getWifiManager() {
+        return this.wifiManager;
+    }
+
+
+    public void resolverAlarm(ArrayList<Alarm> paramArrayList) {
+        Cursor cursor = this.context.getContentResolver().query(ICContentProvider.ALARM_URI, null, null, null, null);
+        char c = '\001';
+        if (cursor != null) {
+            while (cursor.moveToNext()) {
+                if ("ON".equals(cursor.getString(4))) {
+                    String str1 = cursor.getString(c);
+                    String str2 = cursor.getString(2);
+                    String str3 = cursor.getString(3);
+                    String str4 = cursor.getString(5);
+                    char[] arrayOfChar = str2.toCharArray();
+                    int i = arrayOfChar.length;
+                    byte b = 1;
+                    while (b < i) {
+                        c = arrayOfChar[b];
+                        this.alarmManager.cancel(getPendingIntent(str1, str2, str3, str4, c - '/'));
+                        b++;
+                        c = '\001';
+                    }
+                }
+            }
+            cursor.close();
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.SECOND, 0);
+        long l = System.currentTimeMillis();
+        for (Alarm alarm : paramArrayList) {
+            long l1 = l;
+
+            if ("ON".equals(alarm.status)) {
+                try {
+                    int i = Integer.parseInt(alarm.time.substring(2, 4));
+                    int j = Integer.parseInt(alarm.time.substring(5, 7));
+                    calendar.set(Calendar.HOUR_OF_DAY, i);
+                    calendar.set(Calendar.MINUTE, j);
+                    char[] arrayOfChar = alarm.week.toCharArray();
+                    i = arrayOfChar.length;
+                    j = 1;
+                    while (true) {
+                        l1 = l;
+                        if (j < i) {
+                            c = (char) (arrayOfChar[j] - '/');
+                            calendar.set(Calendar.DAY_OF_WEEK, c);
+                            long l2 = calendar.getTimeInMillis();
+                            l1 = l2;
+                            if (l2 <= l)
+                                l1 = l2 + ONE_WEEK;
+                            PendingIntent pendingIntent = getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, c);
+                            AlarmHelper.setAlarm(this.alarmManager, l1, pendingIntent);
+                            j++;
+                            continue;
+                        }
+                        break;
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    ICLogger.e(e.getMessage(), e);
+                }
+            }
+            l = l1;
         }
-      }
-      cursor.close();
     }
-    Calendar calendar = Calendar.getInstance();
-    calendar.set(Calendar.SECOND, 0);
-    long l = System.currentTimeMillis();
-    for (Alarm alarm : paramArrayList) {
-      long l1 = l;
-
-      if ("ON".equals(alarm.status)) {
-        try {
-          int i = Integer.parseInt(alarm.time.substring(2, 4));
-          int j = Integer.parseInt(alarm.time.substring(5, 7));
-          calendar.set(Calendar.HOUR_OF_DAY, i);
-          calendar.set(Calendar.MINUTE, j);
-          char[] arrayOfChar = alarm.week.toCharArray();
-          i = arrayOfChar.length;
-          j = 1;
-          while (true) {
-            l1 = l;
-            if (j < i) {
-              c = (char) (arrayOfChar[j] - '/');
-              calendar.set(Calendar.DAY_OF_WEEK, c);
-              long l2 = calendar.getTimeInMillis();
-              l1 = l2;
-              if (l2 <= l)
-                l1 = l2 + ONE_WEEK;
-              PendingIntent pendingIntent = getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, c);
-              AlarmHelper.setAlarm(this.alarmManager, l1, pendingIntent);
-              j++;
-              continue;
+
+    public void resolverNotice(ArrayList<NoticeContent> paramArrayList) {
+        Cursor cursor = this.context.getContentResolver().query(ICContentProvider.NOTICE_URL, null, null, null, null);
+        if (cursor != null) {
+            while (cursor.moveToNext()) {
+                String str1 = cursor.getString(1);
+                String str2 = cursor.getString(2);
+                String str3 = cursor.getString(3);
+                String str4 = cursor.getString(4);
+                String str5 = cursor.getString(5);
+                String str6 = cursor.getString(6);
+                String str7 = cursor.getString(6);
+                this.alarmManager.cancel(getPendingIntent(str1, str2, str3, str4, str5, str6, str7));
+            }
+            cursor.close();
+        }
+        for (NoticeContent noticeContent : paramArrayList) {
+            String str1 = noticeContent.noticeTime;
+            String str2 = noticeContent.noticeName;
+            String str3 = noticeContent.noticeNumber;
+            String str4 = noticeContent.noticeID;
+            String str5 = noticeContent.noticeCategory;
+            String str6 = noticeContent.noticeFrequency;
+            String str7 = noticeContent.noticeContent;
+            Calendar calendar = Calendar.getInstance();
+            long l = System.currentTimeMillis();
+            calendar.set(Calendar.SECOND, 0);
+            if (str1 != null) {
+                try {
+                    String str8 = str1.substring(0, 4);
+                    String str9 = str1.substring(4, 6);
+                    String str10 = str1.substring(6, 8);
+                    String str11 = str1.substring(8, 10);
+                    String str12 = str1.substring(10, 12);
+                    calendar.set(Calendar.YEAR, Integer.parseInt(str8));
+                    calendar.set(Calendar.MONTH, Integer.parseInt(str9) - 1);
+                    calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(str10));
+                    calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(str11));
+                    calendar.set(Calendar.MINUTE, Integer.parseInt(str12));
+                    long l1 = calendar.getTimeInMillis();
+                    if (l1 >= l) {
+                        PendingIntent pendingIntent = getPendingIntent(str1, str2, str3, str4, str5, str6, str7);
+                        AlarmHelper.setAlarm(this.alarmManager, l1, pendingIntent);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    ICLogger.e(e.getMessage(), e);
+                }
             }
-            break;
-          }
-        }catch (Exception e){
-          e.printStackTrace();
-          ICLogger.e(e.getMessage(),e);
         }
-      }
-      l = l1;
     }
-  }
-  
-  public void resolverNotice(ArrayList<NoticeContent> paramArrayList) {
-    Cursor cursor = this.context.getContentResolver().query(ICContentProvider.NOTICE_URL, null, null, null, null);
-    if (cursor != null) {
-      while (cursor.moveToNext()) {
-        String str1 = cursor.getString(1);
-        String str2 = cursor.getString(2);
-        String str3 = cursor.getString(3);
-        String str4 = cursor.getString(4);
-        String str5 = cursor.getString(5);
-        String str6 = cursor.getString(6);
-        String str7 = cursor.getString(6);
-        this.alarmManager.cancel(getPendingIntent(str1, str2, str3, str4, str5, str6, str7));
-      }
-      cursor.close();
+
+    private static final String PED_TOTAL_KEY = "PED_TOTAL";
+    private static final String PED_FINISH_ACTION = "com.ic.action.PED_FINISH";
+
+    public void brodcastResetStepCount(int StepCount) {
+        Intent intent = new Intent();
+        intent.putExtra(PED_TOTAL_KEY, StepCount);
+        intent.setAction(PED_FINISH_ACTION);
+        ICLogger.i("send broadcast  action " + PED_FINISH_ACTION + ", key " + PED_TOTAL_KEY + " value " + StepCount);
+        this.context.sendBroadcast(intent);
     }
-    for (NoticeContent noticeContent : paramArrayList) {
-      String str1 = noticeContent.noticeTime;
-      String str2 = noticeContent.noticeName;
-      String str3 = noticeContent.noticeNumber;
-      String str4 = noticeContent.noticeID;
-      String str5 = noticeContent.noticeCategory;
-      String str6 = noticeContent.noticeFrequency;
-      String str7 = noticeContent.noticeContent;
-      Calendar calendar = Calendar.getInstance();
-      long l = System.currentTimeMillis();
-      calendar.set(Calendar.SECOND, 0);
-      if (str1 != null) {
-        try {
-          String str8 = str1.substring(0, 4);
-          String str9 = str1.substring(4, 6);
-          String str10 = str1.substring(6, 8);
-          String str11 = str1.substring(8, 10);
-          String str12 = str1.substring(10, 12);
-          calendar.set(Calendar.YEAR, Integer.parseInt(str8));
-          calendar.set(Calendar.MONTH, Integer.parseInt(str9) - 1);
-          calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(str10));
-          calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(str11));
-          calendar.set(Calendar.MINUTE, Integer.parseInt(str12));
-          long l1 = calendar.getTimeInMillis();
-          if (l1 >= l) {
-            PendingIntent pendingIntent = getPendingIntent(str1, str2, str3, str4, str5, str6, str7);
-            AlarmHelper.setAlarm(this.alarmManager, l1, pendingIntent);
-          }
-        }catch (Exception e){
-          e.printStackTrace();
-          ICLogger.e(e.getMessage(),e);
-        }
-      }
+
+    public void sendBrodcast(String action, Intent intent) {
+        intent.setAction(action);
+        ICLogger.i("send broadcast  action " + action);
+        this.context.sendBroadcast(intent);
+    }
+
+    public void sendBroadcast(String cmd, Runtime dev) {
+        Intent intent = new Intent();
+        intent.putExtra("longitude", dev.getLocationInstance().getLocation().lon);
+        intent.putExtra("latitude", dev.getLocationInstance().getLocation().lat);
+        intent.setAction(cmd);
+        this.context.sendBroadcast(intent);
     }
-  }
-  private static final String PED_TOTAL_KEY = "PED_TOTAL";
-  private static final String PED_FINISH_ACTION = "com.ic.action.PED_FINISH";
-  public void brodcastResetStepCount(int StepCount){
-    Intent intent = new Intent();
-    intent.putExtra(PED_TOTAL_KEY, StepCount);
-    intent.setAction(PED_FINISH_ACTION);
-    ICLogger.i("send broadcast  action "+PED_FINISH_ACTION+", key "+PED_TOTAL_KEY+" value "+StepCount);
-    this.context.sendBroadcast(intent);
-  }
-  public void sendBrodcast(String action,Intent intent){
-    intent.setAction(action);
-    ICLogger.i("send broadcast  action "+action);
-    this.context.sendBroadcast(intent);
-  }
-
-  public void sendBroadcast(String cmd, Runtime dev) {
-    Intent intent = new Intent();
-    intent.putExtra("longitude", dev.getLocationInstance().getLocation().lon);
-    intent.putExtra("latitude", dev.getLocationInstance().getLocation().lat);
-    intent.setAction(cmd);
-    this.context.sendBroadcast(intent);
-  }
 
 //  public void sendBroadcastVoiceReceived(String cmd, VoiceContent vcontent) {
 //    Intent intent = new Intent();
@@ -347,158 +352,161 @@ public class ContextProxy {
 //    this.context.sendBroadcast(intent);
 //  }
 
-  public void sendBroadcastServerConnectionChanged(boolean paramBoolean) {
-    Intent intent = new Intent();
-    intent.setAction(ACTION_ISCONNECTED);
-    intent.putExtra("isConnected", paramBoolean);
-    Util.setSystemProperties("persist.sys.server_connected",paramBoolean?"true":"false");
-    this.context.sendBroadcast(intent);
-  }
-
-  public void saveMstToSMSDB(String msg){
-    Intent intent = new Intent();
-    intent.setAction(ActionReceivePushTxt);
-    intent.putExtra("txtMsg", msg);
-    intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
-    this.context.sendBroadcast(intent);
-  }
-  public void sendMsgBroadcast(String msg, int msgType) {
-    sendMsgBroadcast(this.context,msg,msgType);
-  }
-  private static void play_waning_notify(Context context){
-    AudioService.getInstance().play(context.getAssets(), "warning.mp3");
-  }
-  public static void sendMsgBroadcast(Context _context,String msg, int msgType) {
-
-    if (msgType==0) {
-      mHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          //本应用弹出消息框
-          if (Config.noPushTxtNotifyDialog == false) {
-            Intent intent = new Intent();
-            intent.setAction(DIALOG_ACTION);
-            intent.putExtra("pushtxt", msg);
-            _context.sendBroadcast(intent);
-          } else {
-            WakeLockUtil.ScreenOnWakeLockTemperary(_context);
-            play_waning_notify(_context);
-            VibrateUtil.getInstance(_context).VibrateOnOnce(true);
-            Util.mSleep(2000);
-          }
-          //launcher 弹出消息
-          if(Config.noBroadCastPushTxtNotify==false) {
-            Intent intent = new Intent(ActionSrvPushTxt);
-            intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息
-            intent.putExtra("txtMsg", msg);
-            intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
-            _context.sendBroadcast(intent);
-          }
-        }
-      },50);
-
-    }else  if (msgType==2) {
-      mHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          //本应用弹出消息框
-          if (Config.noPushTxtNotifyDialog == false) {
-            Intent intent = new Intent();
-            intent.setAction(DIALOG_ACTION);
-            intent.putExtra("pushtxt", msg);
-            _context.sendBroadcast(intent);
-          } else {
-            WakeLockUtil.ScreenOnWakeLockTemperary(_context);
-            play_waning_notify(_context);
-            VibrateUtil.getInstance(_context).VibrateOnOnce(true);
-            Util.mSleep(2000);
-          }
-          //launcher 弹出消息
-          if (Config.noBroadCastPushTxtNotify == false) {
-            Intent intent = new Intent(ActionSrvPushTxt);
-            intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息
-            intent.putExtra("txtMsg", msg);
-            intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
-            _context.sendBroadcast(intent);
-          }
-        }
-      }, 50);
+    public void sendBroadcastServerConnectionChanged(boolean paramBoolean) {
+        Intent intent = new Intent();
+        intent.setAction(ACTION_ISCONNECTED);
+        intent.putExtra("isConnected", paramBoolean);
+        Util.setSystemProperties("persist.sys.server_connected", paramBoolean ? "true" : "false");
+        this.context.sendBroadcast(intent);
+    }
 
-    }else if (msgType==3){ //专门给需要回复的消息
+    public void saveMstToSMSDB(String msg) {
+        Intent intent = new Intent();
+        intent.setAction(ActionReceivePushTxt);
+        intent.putExtra("txtMsg", msg);
+        intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
+        this.context.sendBroadcast(intent);
+    }
 
-      mHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          //本应用弹出消息框
-          if (Config.noPushTxtNotifyDialog == false) {
-            Intent intent = new Intent();
-            intent.setAction(DIALOG_ACTION);
-            intent.putExtra("pushtxt", msg);
-            intent.putExtra("needreply",true);
-            _context.sendBroadcast(intent);
-          } else {
-            WakeLockUtil.ScreenOnWakeLockTemperary(_context);
-            play_waning_notify(_context);
-            VibrateUtil.getInstance(_context).VibrateOnOnce(true);
-            Util.mSleep(2000);
-          }
+    public void sendMsgBroadcast(String msg, int msgType) {
+        sendMsgBroadcast(this.context, msg, msgType);
+    }
 
-        }
-      },50);
-    }else{
-
-      mHandler.postDelayed(new Runnable() {
-        @Override
-        public void run() {
-          //本应用弹出消息框
-          if(Config.noSMSNotifyDialog==false) {
-            Intent intent = new Intent();
-            intent.setAction(DIALOG_ACTION);
-            intent.putExtra("sms", msg);
-            _context.sendBroadcast(intent);
-          }else{
-            WakeLockUtil.ScreenOnWakeLockTemperary(_context);
-            play_waning_notify(_context);
-            VibrateUtil.getInstance(_context).VibrateOnOnce(true);
-            Util.mSleep(2000);
-          }
-          //launcher 弹出消息
-          if(Config.noBroadCastPushTxtNotify==false) {
-            Intent intent = new Intent(ActionSrvPushTxt);
-            intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息
-            intent.putExtra("txtMsg", msg);
-            intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
-            _context.sendBroadcast(intent);
-          }
-        }
-      },50);
+    private static void play_waning_notify(Context context) {
+        AudioService.getInstance().play(context.getAssets(), "warning.mp3");
     }
 
+    public static void sendMsgBroadcast(Context _context, String msg, int msgType) {
+
+        if (msgType == 0) {
+            mHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    //本应用弹出消息框
+                    if (Config.noPushTxtNotifyDialog == false) {
+                        Intent intent = new Intent();
+                        intent.setAction(DIALOG_ACTION);
+                        intent.putExtra("pushtxt", msg);
+                        _context.sendBroadcast(intent);
+                    } else {
+                        WakeLockUtil.ScreenOnWakeLockTemperary(_context);
+                        play_waning_notify(_context);
+                        VibrateUtil.getInstance(_context).VibrateOnOnce(true);
+                        Util.mSleep(2000);
+                    }
+                    //launcher 弹出消息
+                    if (Config.noBroadCastPushTxtNotify == false) {
+                        Intent intent = new Intent(ActionSrvPushTxt);
+                        intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息
+                        intent.putExtra("txtMsg", msg);
+                        intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
+                        _context.sendBroadcast(intent);
+                    }
+                }
+            }, 50);
+
+        } else if (msgType == 2) {
+            mHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    //本应用弹出消息框
+                    if (Config.noPushTxtNotifyDialog == false) {
+                        Intent intent = new Intent();
+                        intent.setAction(DIALOG_ACTION);
+                        intent.putExtra("pushtxt", msg);
+                        _context.sendBroadcast(intent);
+                    } else {
+                        WakeLockUtil.ScreenOnWakeLockTemperary(_context);
+                        play_waning_notify(_context);
+                        VibrateUtil.getInstance(_context).VibrateOnOnce(true);
+                        Util.mSleep(2000);
+                    }
+                    //launcher 弹出消息
+                    if (Config.noBroadCastPushTxtNotify == false) {
+                        Intent intent = new Intent(ActionSrvPushTxt);
+                        intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息
+                        intent.putExtra("txtMsg", msg);
+                        intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
+                        _context.sendBroadcast(intent);
+                    }
+                }
+            }, 50);
+
+        } else if (msgType == 3) { //专门给需要回复的消息
+
+            mHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    //本应用弹出消息框
+                    if (Config.noPushTxtNotifyDialog == false) {
+                        Intent intent = new Intent();
+                        intent.setAction(DIALOG_ACTION);
+                        intent.putExtra("pushtxt", msg);
+                        intent.putExtra("needreply", true);
+                        _context.sendBroadcast(intent);
+                    } else {
+                        WakeLockUtil.ScreenOnWakeLockTemperary(_context);
+                        play_waning_notify(_context);
+                        VibrateUtil.getInstance(_context).VibrateOnOnce(true);
+                        Util.mSleep(2000);
+                    }
+
+                }
+            }, 50);
+        } else {
+
+            mHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    //本应用弹出消息框
+                    if (Config.noSMSNotifyDialog == false) {
+                        Intent intent = new Intent();
+                        intent.setAction(DIALOG_ACTION);
+                        intent.putExtra("sms", msg);
+                        _context.sendBroadcast(intent);
+                    } else {
+                        WakeLockUtil.ScreenOnWakeLockTemperary(_context);
+                        play_waning_notify(_context);
+                        VibrateUtil.getInstance(_context).VibrateOnOnce(true);
+                        Util.mSleep(2000);
+                    }
+                    //launcher 弹出消息
+                    if (Config.noBroadCastPushTxtNotify == false) {
+                        Intent intent = new Intent(ActionSrvPushTxt);
+                        intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息
+                        intent.putExtra("txtMsg", msg);
+                        intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
+                        _context.sendBroadcast(intent);
+                    }
+                }
+            }, 50);
+        }
+
 
+    }
+
+    public void sendStheartRateBroadcast(String paramString, int paramInt) {
+        Intent intent = new Intent();
+        intent.setAction(paramString);
+        intent.putExtra("stheartRateType", paramInt);
+        this.context.sendBroadcast(intent, "com.eqc.broadcast.permission");
+    }
 
+    public void sendBroadcastSitLongAlarm() {
 
-  }
-  public void sendStheartRateBroadcast(String paramString, int paramInt) {
-    Intent intent = new Intent();
-    intent.setAction(paramString);
-    intent.putExtra("stheartRateType", paramInt);
-    this.context.sendBroadcast(intent, "com.eqc.broadcast.permission");
-  }
-  public void sendBroadcastSitLongAlarm() {
-
-    if (Util.installed(context,"com.ic.ak.launcher")) {
-      Intent intent = new Intent();
-      intent.setAction(ACTION_KEEPSIT_ALARM);
-      intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
-      this.context.sendBroadcast(intent);
-    }else {
-      Intent intent = new Intent();
-      //显示提示窗口
-      intent.setAction(DIALOG_ACTION);
-      intent.putExtra("takephoto", context.getResources().getString(R.string.sedentary_msg));
-      context.sendBroadcast(intent);
+        if (Util.installed(context, "com.ic.ak.launcher")) {
+            Intent intent = new Intent();
+            intent.setAction(ACTION_KEEPSIT_ALARM);
+            intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
+            this.context.sendBroadcast(intent);
+        } else {
+            Intent intent = new Intent();
+            //显示提示窗口
+            intent.setAction(DIALOG_ACTION);
+            intent.putExtra("takephoto", context.getResources().getString(R.string.sedentary_msg));
+            context.sendBroadcast(intent);
+        }
     }
-  }
 
 }
 
index 7eb153d..f74f418 100644 (file)
@@ -1,22 +1,19 @@
 
 package com.enqualcomm.support.utils;
 
-import android.content.ContentProviderOperation;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
-import android.content.ContentProviderOperation.Builder;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Handler;
+import android.os.HandlerThread;
 import android.os.SystemClock;
-import android.provider.BaseColumns;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.RawContacts;
-import android.text.TextUtils;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.ICContentProvider;
@@ -25,7 +22,6 @@ import com.enqualcomm.support.bean.Antioff;
 import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.Content;
 import com.enqualcomm.support.bean.DeviceStatus;
-import com.enqualcomm.support.bean.EventLooperHandlerThread;
 import com.enqualcomm.support.bean.NoticeContent;
 import com.enqualcomm.support.bean.NotificationParam;
 import com.enqualcomm.support.bean.Silent;
@@ -38,6 +34,10 @@ import com.enqualcomm.support.bean.Weather;
 import java.util.ArrayList;
 import java.util.Iterator;
 
+import rx.Observable;
+import rx.Subscriber;
+import rx.schedulers.Schedulers;
+
 import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.ACTION_ANTIOFF_ALARM_CHANGE;
 import static com.enqualcomm.support.bean.Contact.CATEGORY_ADMIN;
@@ -48,1131 +48,1156 @@ import static com.enqualcomm.support.bean.Contact.CATEGORY_SOS;
 import static com.enqualcomm.support.bean.Contact.CATEGORY_VIDEO;
 
 public class DBHelper {
-  private static long lastUpdateTime;
-  private Context context;
-  private ContentResolver cr;
-  private Handler mHandler;//=new Handler(EventLooperHandlerThread.makeLooper(DBHelper.class.getSimpleName()));
-//  private Handler mHandler=new Handler();
-  public DBHelper(ContentResolver var1, Context var2) {
-    this.cr = var1;
-    this.context = var2;
-    EventLooperHandlerThread eventLooperHandlerThread=new EventLooperHandlerThread(DBHelper.class.getSimpleName());
-    eventLooperHandlerThread.start();
-    mHandler=new Handler( eventLooperHandlerThread.looper);
-  }
-
-  private void addAllContact(ArrayList<Contact> contactArray, ContentResolver resolver) {
-    Iterator contactIT = contactArray.iterator();
-
-    while(contactIT.hasNext()) {
-      Contact contact = (Contact)contactIT.next();
-      ContentValues contentvalues = new ContentValues();
-      long raw_contactID = ContentUris.parseId(resolver.insert(RawContacts.CONTENT_URI, contentvalues));
-
-      contentvalues.clear();
-      contentvalues.put("raw_contact_id", raw_contactID);
-      contentvalues.put("mimetype", "vnd.android.cursor.item/name");
-      contentvalues.put("data2", contact.name);
-      resolver.insert(Data.CONTENT_URI, contentvalues);
-      contentvalues.clear();
-
-      contentvalues.put("raw_contact_id", raw_contactID);
-      contentvalues.put("mimetype", "vnd.android.cursor.item/phone_v2");
-      contentvalues.put("data1", contact.number);
-      contentvalues.put("data2", 2);
-      resolver.insert(Data.CONTENT_URI, contentvalues);
-      contentvalues.clear();
+    private static long lastUpdateTime;
+    private Context context;
+    private ContentResolver cr;
+    private Handler mHandler;//=new Handler(EventLooperHandlerThread.makeLooper(DBHelper.class.getSimpleName()));
+
+    //  private Handler mHandler=new Handler();
+    public DBHelper(ContentResolver var1, Context var2) {
+        this.cr = var1;
+        this.context = var2;
+        HandlerThread handlerThread = new HandlerThread("ic:db-handler-thread");
+        handlerThread.start();
+        mHandler = new Handler(handlerThread.getLooper());
     }
 
-  }
+    /**
+     * 添加联系人
+     *
+     * @param contactArray
+     * @param resolver
+     */
+    private void addAllContact(ArrayList<Contact> contactArray, ContentResolver resolver) {
+        Observable.create(subscriber -> {
+            Iterator contactIT = contactArray.iterator();
+            while (contactIT.hasNext()) {
+                Contact contact = (Contact) contactIT.next();
+                ContentValues contentvalues = new ContentValues();
+                long raw_contactID = ContentUris.parseId(resolver.insert(RawContacts.CONTENT_URI, contentvalues));
+                contentvalues.clear();
+                contentvalues.put("raw_contact_id", raw_contactID);
+                contentvalues.put("mimetype", "vnd.android.cursor.item/name");
+                contentvalues.put("data2", contact.name);
+                resolver.insert(Data.CONTENT_URI, contentvalues);
+                contentvalues.clear();
+                contentvalues.put("raw_contact_id", raw_contactID);
+                contentvalues.put("mimetype", "vnd.android.cursor.item/phone_v2");
+                contentvalues.put("data1", contact.number);
+                contentvalues.put("data2", 2);
+                resolver.insert(Data.CONTENT_URI, contentvalues);
+                contentvalues.clear();
+            }
+        }).subscribeOn(Schedulers.io()).subscribe();
+    }
 
-  public int getContactCount(ContentResolver resolver)
-  {
-    StringBuilder sb = new StringBuilder();
+    /**
+     * 获取联系人个数
+     *
+     * @param resolver
+     * @return
+     */
+    public int getContactCount(ContentResolver resolver) {
+        try {
+            //这个要做到同步返回,没法用异步
+            //如果要用异步的方式则要通过回调来实现
+            Cursor cursor = resolver.query(ICContentProvider.CONTACT_URI, (String[]) null, null, (String[]) null, "CATEGORY ASC");
+            return cursor.getCount();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
 
-    Cursor cursor = resolver.query(ICContentProvider.CONTACT_URI, (String[])null, null, (String[])null, "CATEGORY ASC");
+    /**
+     * 删除所有的联系人
+     *
+     * @param contactArrayList
+     * @param where
+     * @param resolver
+     */
+    private void deleteAllContact(ArrayList<Contact> contactArrayList, String where, ContentResolver resolver) {
+        Observable.create(subscriber -> {
+            String sb = "where=" + where;
+            ICLogger.i(sb);
+            for (Contact contact : contactArrayList) {
+                deleteContactId(resolver, contact.name);
+            }
+            resolver.delete(ICContentProvider.CONTACT_URI, where, null);
+        }).subscribeOn(Schedulers.io()).subscribe();
+    }
 
-    return cursor.getCount();
+    private Uri insertDownLoadInfo(String var1, int var2, int var3, String var4) {
+        ContentValues var5 = new ContentValues();
+        var5.put("IMSI", var1);
+        var5.put("TIME", var4);
+        var5.put("NUMBER", var2);
+        var5.put("TOTAL_NUMBER", var3);
+        return this.cr.insert(ICContentProvider.DOWNLOADINFO_URL, var5);
+    }
 
-  }
-  private void deleteAllContact(ArrayList<Contact> contactArraylist, String where, ContentResolver resolver) {
-    StringBuilder sb = new StringBuilder();
-    sb.append("where=");
-    sb.append(where);
-    ICLogger.i(sb.toString());
-    Cursor cursor = resolver.query(ICContentProvider.CONTACT_URI, (String[])null, where, (String[])null, "CATEGORY ASC");
+    private void saveContactsImpl(ArrayList<Contact> contactArray,
+                                  boolean admin, boolean care,
+                                  boolean call, boolean partner,
+                                  boolean video, boolean sos) {
+        StringBuilder log = new StringBuilder();
+        log.append("saveContactsImpl contactList = ");
+        log.append(contactArray.toString());
+        ICLogger.i(log.toString());
+        StringBuilder where = new StringBuilder("CATEGORY IN (");
+        if (admin) {
+            where.append(CATEGORY_ADMIN);
+            where.append(",");
+        }
 
-    Iterator contactIT = contactArraylist.iterator();
+        if (care) {
+            where.append(CATEGORY_CARE);
+            where.append(",");
+        }
 
-    while(contactIT.hasNext()) {
-      this.DeleteContactId(resolver, ((Contact)contactIT.next()).name);
-    }
-    resolver.delete(ICContentProvider.CONTACT_URI, where, (String[])null);
-  }
-
-  private Uri insertDownLoadInfo(String var1, int var2, int var3, String var4) {
-    ContentValues var5 = new ContentValues();
-    var5.put("IMSI", var1);
-    var5.put("TIME", var4);
-    var5.put("NUMBER", var2);
-    var5.put("TOTAL_NUMBER", var3);
-    return this.cr.insert(ICContentProvider.DOWNLOADINFO_URL, var5);
-  }
-
-  private void saveContactsImpl(ArrayList<Contact> contactArray, boolean admin, boolean care, boolean call, boolean partner, boolean video,boolean sos) {
-    StringBuilder log = new StringBuilder();
-    log.append("saveContactsImpl contactList = ");
-    log.append(contactArray.toString());
-    ICLogger.i(log.toString());
-    StringBuilder where = new StringBuilder("CATEGORY IN (");
-    if (admin) {
-      where.append(CATEGORY_ADMIN);
-      where.append(",");
-    }
+        if (call) {
+            where.append(CATEGORY_CALL);
+            where.append(",");
+        }
 
-    if (care) {
-      where.append(CATEGORY_CARE);
-      where.append(",");
-    }
+        if (partner) {
+            where.append(CATEGORY_PARTNER);
+            where.append(",");
+        }
 
-    if (call) {
-      where.append(CATEGORY_CALL);
-      where.append(",");
-    }
+        if (video) {
+            where.append(CATEGORY_VIDEO);
+            where.append(",");
+        }
 
-    if (partner) {
-      where.append(CATEGORY_PARTNER);
-      where.append(",");
-    }
+        if (sos) {
+            where.append(CATEGORY_SOS);
+            where.append(",");
+        }
+        int len = where.length();
+        if (len > 13) {
+            where.setCharAt(len - 1, ')');
+            this.deleteAllContact(contactArray, where.toString(), this.cr);
+            int contactCount = contactArray.size();
+            if (contactCount != 0) {
+                ContentValues[] contentlist = new ContentValues[contactCount];
+
+                for (int i = 0; i < contactCount; ++i) {
+                    Contact contact = (Contact) contactArray.get(i);
+                    ContentValues contentValues = new ContentValues();
+                    contentlist[i] = contentValues;
+                    contentValues.put("CATEGORY", contact.category);
+                    contentValues.put("NAME", contact.name);
+                    contentValues.put("NUMBER", contact.number);
+                    contentValues.put("ICON", contact.icon_index);
+                    contentValues.put("EXTRA", contact.extra);
+                    StringBuilder log1 = new StringBuilder();
+                    log1.append("contact=");
+                    log1.append(contact.toString());
+                    ICLogger.i(log1.toString());
+                }
+
+                this.cr.bulkInsert(ICContentProvider.CONTACT_URI, contentlist);
+                this.addAllContact(contactArray, this.cr);
+            }
 
-    if (video) {
-      where.append(CATEGORY_VIDEO);
-      where.append(",");
+        }
     }
 
-    if (sos) {
-      where.append(CATEGORY_SOS);
-      where.append(",");
-    }
-    int len = where.length();
-    if (len > 13) {
-      where.setCharAt(len - 1, ')');
-      this.deleteAllContact(contactArray, where.toString(), this.cr);
-      int contactCount = contactArray.size();
-      if (contactCount != 0) {
-        ContentValues[] contentlist = new ContentValues[contactCount];
-
-        for(int i = 0; i < contactCount; ++i) {
-          Contact contact = (Contact)contactArray.get(i);
-          ContentValues contentValues = new ContentValues();
-          contentlist[i] = contentValues;
-          contentValues.put("CATEGORY", contact.category);
-          contentValues.put("NAME", contact.name);
-          contentValues.put("NUMBER", contact.number);
-          contentValues.put("ICON", contact.icon_index);
-          contentValues.put("EXTRA", contact.extra);
-          StringBuilder log1 = new StringBuilder();
-          log1.append("contact=");
-          log1.append(contact.toString());
-          ICLogger.i(log1.toString());
+    private void upDateMonitorImpl(String var1, String var2) {
+        Cursor var5 = this.cr.query(ICContentProvider.DEVICESTATUS_URL, (String[]) null, (String) null, (String[]) null, (String) null);
+        ArrayList var4 = new ArrayList();
+        if (var5 != null) {
+            while (true) {
+                if (!var5.moveToNext()) {
+                    var5.close();
+                    break;
+                }
+
+                var4.add(new DeviceStatus(var5.getString(1), "0", "0", var5.getInt(4)));
+            }
         }
 
-        this.cr.bulkInsert(ICContentProvider.CONTACT_URI, contentlist);
-        this.addAllContact(contactArray, this.cr);
-      }
+        this.cr.delete(ICContentProvider.DEVICESTATUS_URL, (String) null, (String[]) null);
+        if (var4.size() != 0) {
+            ContentValues[] var8 = new ContentValues[var4.size()];
+
+            for (int var3 = 0; var3 < var4.size(); ++var3) {
+                DeviceStatus var6 = (DeviceStatus) var4.get(var3);
+                ContentValues var7 = new ContentValues();
+                var8[var3] = var7;
+                var7.put("IS_SILENCE", var6.isSilence);
+                var7.put("START_MONITOR", var1);
+                var7.put("END_MONITOR", var2);
+                var7.put("IS_ALARM", var6.isAlarm);
+            }
 
-    }
-  }
-
-  private void upDateMonitorImpl(String var1, String var2) {
-    Cursor var5 = this.cr.query(ICContentProvider.DEVICESTATUS_URL, (String[])null, (String)null, (String[])null, (String)null);
-    ArrayList var4 = new ArrayList();
-    if (var5 != null) {
-      while(true) {
-        if (!var5.moveToNext()) {
-          var5.close();
-          break;
+            this.cr.bulkInsert(ICContentProvider.DEVICESTATUS_URL, var8);
         }
 
-        var4.add(new DeviceStatus(var5.getString(1), "0", "0", var5.getInt(4)));
-      }
     }
 
-    this.cr.delete(ICContentProvider.DEVICESTATUS_URL, (String)null, (String[])null);
-    if (var4.size() != 0) {
-      ContentValues[] var8 = new ContentValues[var4.size()];
-
-      for(int var3 = 0; var3 < var4.size(); ++var3) {
-        DeviceStatus var6 = (DeviceStatus)var4.get(var3);
-        ContentValues var7 = new ContentValues();
-        var8[var3] = var7;
-        var7.put("IS_SILENCE", var6.isSilence);
-        var7.put("START_MONITOR", var1);
-        var7.put("END_MONITOR", var2);
-        var7.put("IS_ALARM", var6.isAlarm);
-      }
-
-      this.cr.bulkInsert(ICContentProvider.DEVICESTATUS_URL, var8);
+    public void deleteMessage(Uri var1) {
+        this.cr.delete(var1, (String) null, (String[]) null);
     }
 
-  }
-
-  public void deleteMessage(Uri var1) {
-    this.cr.delete(var1, (String)null, (String[])null);
-  }
-
-  public String DeleteContactId(ContentResolver contentResolver, String name) {
-    String ContactId=null;
-    Uri uri = ContactsContract.RawContacts.CONTENT_URI;
-    ContentResolver resolver = contentResolver;
-    String where = ContactsContract.PhoneLookup.DISPLAY_NAME;
-    Cursor cursor = resolver.query(uri, new String[]{Data._ID}, where + "=?", new String[]{name}, null);
-    if (cursor.moveToFirst()) {
-      int id = cursor.getInt(0);
-      ContactId=String.valueOf(id);
-      //根据id删除data中的相应数据
-      resolver.delete(uri, where + "=?", new String[]{name});
-      uri = ContactsContract.Data.CONTENT_URI;
-      resolver.delete(uri, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[]{id + ""});
-    }
-    return ContactId;
-  }
-
-  public boolean getWeather() {
-    Cursor var5 = this.cr.query(ICContentProvider.WEATHER_URL, (String[])null, (String)null, (String[])null, (String)null);
-    if (var5 != null && var5.moveToNext()) {
-      String var1 = var5.getString(1);
-      String var2 = var5.getString(2);
-      String var3 = var5.getString(3);
-      String var4 = var5.getString(4);
-      String var7 = var5.getString(5);
-      StringBuilder var6 = new StringBuilder();
-      var6.append("weather_type=");
-      var6.append(var1);
-      var6.append("min_temperature=");
-      var6.append(var2);
-      var6.append("max_temperature=");
-      var6.append(var3);
-      var6.append("cur_temperature=");
-      var6.append(var4);
-      var6.append("weather_index=");
-      var6.append(var7);
-      ICLogger.i(var6.toString());
-      return true;
-    } else {
-      return false;
+    public String deleteContactId(ContentResolver contentResolver, String name) {
+        String ContactId = null;
+        Uri uri = ContactsContract.RawContacts.CONTENT_URI;
+        ContentResolver resolver = contentResolver;
+        String where = ContactsContract.PhoneLookup.DISPLAY_NAME;
+        Cursor cursor = resolver.query(uri, new String[]{Data._ID}, where + "=?", new String[]{name}, null);
+        if (cursor.moveToFirst()) {
+            int id = cursor.getInt(0);
+            ContactId = String.valueOf(id);
+            //根据id删除data中的相应数据
+            resolver.delete(uri, where + "=?", new String[]{name});
+            uri = ContactsContract.Data.CONTENT_URI;
+            resolver.delete(uri, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[]{id + ""});
+        }
+        return ContactId;
     }
-  }
-
-  public Uri insertMessage(Content var1) {
-    ContentValues var2 = new ContentValues();
-    var2.put("CATEGORY", var1.category);
-    var2.put("CONTENT", var1.content);
-    var2.put("PREVIEW", var1.preview);
-    var2.put("STATUS", var1.status);
-    var2.put("IN_OR_OUT", var1.inOrOut);
-    var2.put("CONTACT_CATEGORY", var1.contactCategory);
-    var2.put("CONTACT_NUMBER", var1.contactNumber);
-    var2.put("SERVER_TIME", var1.serverTime);
-    var2.put("LOCAL_TIME", var1.localTime);
-    var2.put("ICON", var1.icon);
-    return this.cr.insert(ICContentProvider.MESSAGE_URI, var2);
-  }
-
-  public Uri insertOrUpdate(Content var1) {
-    StringBuilder sb = new StringBuilder("CATEGORY=");
-    sb.append(var1.category);
-    sb.append(" and CONTENT='");
-    sb.append(var1.content);
-    sb.append("' and CONTACT_NUMBER='");
-    sb.append(var1.contactNumber);
-    sb.append("' and CONTACT_CATEGORY=");
-    sb.append(var1.contactCategory);
-    String where = sb.toString();
-    Cursor cursor = this.cr.query(ICContentProvider.MESSAGE_URI, new String[]{"_id"}, where, (String[])null, (String)null);
-    long id;
-    if (cursor != null) {
-      if (cursor.moveToNext()) {
-        id = cursor.getLong(0);
-      } else {
-        id = -1L;
-      }
-
-      cursor.close();
-    } else {
-      id = -1L;
+
+    public boolean getWeather() {
+        Cursor var5 = this.cr.query(ICContentProvider.WEATHER_URL, (String[]) null, (String) null, (String[]) null, (String) null);
+        if (var5 != null && var5.moveToNext()) {
+            String var1 = var5.getString(1);
+            String var2 = var5.getString(2);
+            String var3 = var5.getString(3);
+            String var4 = var5.getString(4);
+            String var7 = var5.getString(5);
+            StringBuilder var6 = new StringBuilder();
+            var6.append("weather_type=");
+            var6.append(var1);
+            var6.append("min_temperature=");
+            var6.append(var2);
+            var6.append("max_temperature=");
+            var6.append(var3);
+            var6.append("cur_temperature=");
+            var6.append(var4);
+            var6.append("weather_index=");
+            var6.append(var7);
+            ICLogger.i(var6.toString());
+            return true;
+        } else {
+            return false;
+        }
     }
 
-    if (id != -1L) {
-      Uri var6 = ContentUris.withAppendedId(ICContentProvider.MESSAGE_URI, id);
-      ContentValues var5 = new ContentValues();
-      var5.put("STATUS", var1.status);
-      var5.put("CONTENT", var1.content);
-      this.cr.update(var6, var5, (String)null, (String[])null);
-      return var6;
-    } else {
-      return this.insertMessage(var1);
+    public Uri insertMessage(Content var1) {
+        ContentValues var2 = new ContentValues();
+        var2.put("CATEGORY", var1.category);
+        var2.put("CONTENT", var1.content);
+        var2.put("PREVIEW", var1.preview);
+        var2.put("STATUS", var1.status);
+        var2.put("IN_OR_OUT", var1.inOrOut);
+        var2.put("CONTACT_CATEGORY", var1.contactCategory);
+        var2.put("CONTACT_NUMBER", var1.contactNumber);
+        var2.put("SERVER_TIME", var1.serverTime);
+        var2.put("LOCAL_TIME", var1.localTime);
+        var2.put("ICON", var1.icon);
+        return this.cr.insert(ICContentProvider.MESSAGE_URI, var2);
     }
-  }
-
-  public Uri insertOrUpdate(Content content, long id) {
-    label21: {
-      if (id > 0L) {
-        ContentResolver var4 = this.cr;
-        Uri var5 = ICContentProvider.MESSAGE_URI;
-        StringBuilder var6 = new StringBuilder();
-        var6.append("_id=");
-        var6.append(id);
-        String where = var6.toString();
-        Cursor cursor = var4.query(var5, new String[]{"_id"}, where, (String[])null, (String)null);
+
+    public Uri insertOrUpdate(Content var1) {
+        StringBuilder sb = new StringBuilder("CATEGORY=");
+        sb.append(var1.category);
+        sb.append(" and CONTENT='");
+        sb.append(var1.content);
+        sb.append("' and CONTACT_NUMBER='");
+        sb.append(var1.contactNumber);
+        sb.append("' and CONTACT_CATEGORY=");
+        sb.append(var1.contactCategory);
+        String where = sb.toString();
+        Cursor cursor = this.cr.query(ICContentProvider.MESSAGE_URI, new String[]{"_id"}, where, (String[]) null, (String) null);
+        long id;
         if (cursor != null) {
-          if (cursor.moveToNext()) {
-            id = cursor.getLong(0);
-          } else {
-            id = -1L;
-          }
+            if (cursor.moveToNext()) {
+                id = cursor.getLong(0);
+            } else {
+                id = -1L;
+            }
 
-          cursor.close();
-          break label21;
+            cursor.close();
+        } else {
+            id = -1L;
         }
-      }
 
-      id = -1L;
+        if (id != -1L) {
+            Uri var6 = ContentUris.withAppendedId(ICContentProvider.MESSAGE_URI, id);
+            ContentValues var5 = new ContentValues();
+            var5.put("STATUS", var1.status);
+            var5.put("CONTENT", var1.content);
+            this.cr.update(var6, var5, (String) null, (String[]) null);
+            return var6;
+        } else {
+            return this.insertMessage(var1);
+        }
     }
 
-    if (id != -1L) {
-      Uri var8 = ContentUris.withAppendedId(ICContentProvider.MESSAGE_URI, id);
-      ContentValues var9 = new ContentValues();
-      var9.put("STATUS", content.status);
-      this.cr.update(var8, var9, (String)null, (String[])null);
-      return var8;
-    } else {
-      return this.insertMessage(content);
-    }
-  }
-
-  public Uri insertOrUpdateDownLoadInfo(String var1, int var2, int var3, String var4) {
-    StringBuilder var7 = new StringBuilder("IMSI=");
-    var7.append(var1);
-    String var9 = var7.toString();
-    Cursor var10 = this.cr.query(ICContentProvider.DOWNLOADINFO_URL, new String[]{"_id"}, var9, (String[])null, (String)null);
-    long var5;
-    if (var10 != null) {
-      if (var10.moveToNext()) {
-        var5 = var10.getLong(0);
-      } else {
-        var5 = -1L;
-      }
-
-      var10.close();
-    } else {
-      var5 = -1L;
-    }
+    public Uri insertOrUpdate(Content content, long id) {
+        label21:
+        {
+            if (id > 0L) {
+                ContentResolver var4 = this.cr;
+                Uri var5 = ICContentProvider.MESSAGE_URI;
+                StringBuilder var6 = new StringBuilder();
+                var6.append("_id=");
+                var6.append(id);
+                String where = var6.toString();
+                Cursor cursor = var4.query(var5, new String[]{"_id"}, where, (String[]) null, (String) null);
+                if (cursor != null) {
+                    if (cursor.moveToNext()) {
+                        id = cursor.getLong(0);
+                    } else {
+                        id = -1L;
+                    }
+
+                    cursor.close();
+                    break label21;
+                }
+            }
 
-    if (var5 != -1L) {
-      Uri var11 = ContentUris.withAppendedId(ICContentProvider.DOWNLOADINFO_URL, var5);
-      ContentValues var8 = new ContentValues();
-      var8.put("IMSI", var1);
-      var8.put("TIME", var4);
-      var8.put("NUMBER", var2);
-      var8.put("TOTAL_NUMBER", var3);
-      this.cr.update(var11, var8, (String)null, (String[])null);
-      return var11;
-    } else {
-      ICLogger.i("插入");
-      return this.insertDownLoadInfo(var1, var2, var3, var4);
-    }
-  }
-
-  public void insertOrUpdateUnreadMsg(NotificationParam var1) {
-    StringBuilder var4 = new StringBuilder("id=");
-    var4.append(var1.id);
-    String var8 = var4.toString();
-    Cursor var9 = this.cr.query(ICContentProvider.UNREAD_MSG_URI, new String[]{"category"}, var8, (String[])null, (String)null);
-    boolean var2 = false;
-    boolean var3 = false;
-    if (var9 != null) {
-      while(true) {
-        var2 = var3;
-        if (var9.moveToNext()) {
-          int var7 = var9.getInt(0);
-          if (var7 != var1.category) {
-            continue;
-          }
-
-          Uri var5 = ContentUris.withAppendedId(ICContentProvider.UNREAD_MSG_URI, (long)var7);
-          ContentValues var6 = new ContentValues();
-          var6.put("category", var1.category);
-          var6.put("id", var1.id);
-          var6.put("count", var1.noReadmsgCount);
-          var6.put("recvtime", var1.lastRevTime);
-          this.cr.update(var5, var6, (String)null, (String[])null);
-          var2 = true;
+            id = -1L;
         }
 
-        var9.close();
-        break;
-      }
+        if (id != -1L) {
+            Uri var8 = ContentUris.withAppendedId(ICContentProvider.MESSAGE_URI, id);
+            ContentValues var9 = new ContentValues();
+            var9.put("STATUS", content.status);
+            this.cr.update(var8, var9, (String) null, (String[]) null);
+            return var8;
+        } else {
+            return this.insertMessage(content);
+        }
     }
 
-    if (!var2) {
-      ContentValues var10 = new ContentValues();
-      var10.put("category", var1.category);
-      var10.put("id", var1.id);
-      var10.put("count", var1.noReadmsgCount);
-      var10.put("recvtime", var1.lastRevTime);
-      this.cr.insert(ICContentProvider.UNREAD_MSG_URI, var10);
-    }
+    public Uri insertOrUpdateDownLoadInfo(String var1, int var2, int var3, String var4) {
+        StringBuilder var7 = new StringBuilder("IMSI=");
+        var7.append(var1);
+        String var9 = var7.toString();
+        Cursor var10 = this.cr.query(ICContentProvider.DOWNLOADINFO_URL, new String[]{"_id"}, var9, (String[]) null, (String) null);
+        long var5;
+        if (var10 != null) {
+            if (var10.moveToNext()) {
+                var5 = var10.getLong(0);
+            } else {
+                var5 = -1L;
+            }
 
-  }
-
-  public void insertTest(ArrayList<Contact> var1) {
-    int var3 = var1.size();
-    if (var3 != 0) {
-      ContentValues[] var4 = new ContentValues[var3];
-
-      for(int var2 = 0; var2 < var3; ++var2) {
-        Contact var5 = (Contact)var1.get(var2);
-        ContentValues var6 = new ContentValues();
-        var4[var2] = var6;
-        var6.put("CATEGORY", var5.category);
-        var6.put("NAME", var5.name);
-        var6.put("NUMBER", var5.number);
-        var6.put("ICON", var5.icon_index);
-        var6.put("EXTRA", var5.extra);
-      }
-
-      this.cr.bulkInsert(ICContentProvider.CONTACT_URI, var4);
-    }
+            var10.close();
+        } else {
+            var5 = -1L;
+        }
 
-  }
+        if (var5 != -1L) {
+            Uri var11 = ContentUris.withAppendedId(ICContentProvider.DOWNLOADINFO_URL, var5);
+            ContentValues var8 = new ContentValues();
+            var8.put("IMSI", var1);
+            var8.put("TIME", var4);
+            var8.put("NUMBER", var2);
+            var8.put("TOTAL_NUMBER", var3);
+            this.cr.update(var11, var8, (String) null, (String[]) null);
+            return var11;
+        } else {
+            ICLogger.i("插入");
+            return this.insertDownLoadInfo(var1, var2, var3, var4);
+        }
+    }
 
-  public ArrayList<Alarm> queryAlarm() {
-    ArrayList var1 = new ArrayList();
-    Cursor cursor = this.cr.query(ICContentProvider.ALARM_URI, (String[])null, (String)null, (String[])null, (String)null);
-    if (cursor != null) {
-      while(true) {
-        if (!cursor.moveToNext()) {
-          cursor.close();
-          break;
+    public void insertOrUpdateUnreadMsg(NotificationParam var1) {
+        StringBuilder var4 = new StringBuilder("id=");
+        var4.append(var1.id);
+        String var8 = var4.toString();
+        Cursor var9 = this.cr.query(ICContentProvider.UNREAD_MSG_URI, new String[]{"category"}, var8, (String[]) null, (String) null);
+        boolean var2 = false;
+        boolean var3 = false;
+        if (var9 != null) {
+            while (true) {
+                var2 = var3;
+                if (var9.moveToNext()) {
+                    int var7 = var9.getInt(0);
+                    if (var7 != var1.category) {
+                        continue;
+                    }
+
+                    Uri var5 = ContentUris.withAppendedId(ICContentProvider.UNREAD_MSG_URI, (long) var7);
+                    ContentValues var6 = new ContentValues();
+                    var6.put("category", var1.category);
+                    var6.put("id", var1.id);
+                    var6.put("count", var1.noReadmsgCount);
+                    var6.put("recvtime", var1.lastRevTime);
+                    this.cr.update(var5, var6, (String) null, (String[]) null);
+                    var2 = true;
+                }
+
+                var9.close();
+                break;
+            }
         }
 
-        if ("ON".equals(cursor.getString(4))) {
-          var1.add(new Alarm(cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5)));
+        if (!var2) {
+            ContentValues var10 = new ContentValues();
+            var10.put("category", var1.category);
+            var10.put("id", var1.id);
+            var10.put("count", var1.noReadmsgCount);
+            var10.put("recvtime", var1.lastRevTime);
+            this.cr.insert(ICContentProvider.UNREAD_MSG_URI, var10);
         }
-      }
+
     }
 
-    return var1;
-  }
-
-  public ArrayList<Antioff> queryAntioff(boolean var1) {
-    ContentResolver var3 = this.cr;
-    Uri var4 = ICContentProvider.ANTIOFF_URI;
-    String var2;
-    if (var1) {
-      var2 = "STATUS='ON'";
-    } else {
-      var2 = null;
+    public void insertTest(ArrayList<Contact> var1) {
+        int var3 = var1.size();
+        if (var3 != 0) {
+            ContentValues[] var4 = new ContentValues[var3];
+
+            for (int var2 = 0; var2 < var3; ++var2) {
+                Contact var5 = (Contact) var1.get(var2);
+                ContentValues var6 = new ContentValues();
+                var4[var2] = var6;
+                var6.put("CATEGORY", var5.category);
+                var6.put("NAME", var5.name);
+                var6.put("NUMBER", var5.number);
+                var6.put("ICON", var5.icon_index);
+                var6.put("EXTRA", var5.extra);
+            }
+
+            this.cr.bulkInsert(ICContentProvider.CONTACT_URI, var4);
+        }
+
     }
 
-    Cursor var5 = var3.query(var4, (String[])null, var2, (String[])null, (String)null);
-    ArrayList var6 = new ArrayList();
-    if (var5 != null) {
-      while(var5.moveToNext()) {
-        var6.add(new Antioff(var5.getString(1), var5.getString(2), var5.getString(3), var5.getString(4), var5.getString(5)));
-      }
+    public ArrayList<Alarm> queryAlarm() {
+        ArrayList var1 = new ArrayList();
+        Cursor cursor = this.cr.query(ICContentProvider.ALARM_URI, (String[]) null, (String) null, (String[]) null, (String) null);
+        if (cursor != null) {
+            while (true) {
+                if (!cursor.moveToNext()) {
+                    cursor.close();
+                    break;
+                }
+
+                if ("ON".equals(cursor.getString(4))) {
+                    var1.add(new Alarm(cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5)));
+                }
+            }
+        }
 
-      var5.close();
+        return var1;
     }
 
-    return var6;
-  }
-
-  public Contact queryContactIconInfo(String var1) {
-    String var2 = var1;
-    Cursor var4 = this.cr.query(ICContentProvider.CONTACT_URI, (String[])null, "NUMBER=?", new String[]{var1}, "CATEGORY ASC");
-    Contact var5 = null;
-    Contact var3 = null;
-    if (var4 != null) {
-      var5 = var3;
-      if (var4.moveToNext()) {
-        var5 = new Contact(var4.getInt(1), var4.getString(2), var4.getString(3), var4.getString(4), var4.getString(5));
-      }
-
-      var4.close();
+    public ArrayList<Antioff> queryAntioff(boolean var1) {
+        ContentResolver var3 = this.cr;
+        Uri var4 = ICContentProvider.ANTIOFF_URI;
+        String var2;
+        if (var1) {
+            var2 = "STATUS='ON'";
+        } else {
+            var2 = null;
+        }
+
+        Cursor var5 = var3.query(var4, (String[]) null, var2, (String[]) null, (String) null);
+        ArrayList var6 = new ArrayList();
+        if (var5 != null) {
+            while (var5.moveToNext()) {
+                var6.add(new Antioff(var5.getString(1), var5.getString(2), var5.getString(3), var5.getString(4), var5.getString(5)));
+            }
+
+            var5.close();
+        }
+
+        return var6;
     }
 
-    var3 = var5;
-    if (var5 == null) {
-      String var7 = var2;
-      if (var2.contains("@")) {
-        var7 = var2.substring(2);
-      }
-
-      Cursor var6 = this.context.getContentResolver().query(ICContentProvider.CONTACT_URI, (String[])null, "EXTRA=?", new String[]{var7}, "CATEGORY ASC");
-      var3 = var5;
-      if (var6 != null) {
-        if (var6.moveToNext()) {
-          var5 = new Contact(var6.getInt(1), var6.getString(2), var6.getString(3), var6.getString(4), var6.getString(5));
+    public Contact queryContactIconInfo(String var1) {
+        String var2 = var1;
+        Cursor var4 = this.cr.query(ICContentProvider.CONTACT_URI, (String[]) null, "NUMBER=?", new String[]{var1}, "CATEGORY ASC");
+        Contact var5 = null;
+        Contact var3 = null;
+        if (var4 != null) {
+            var5 = var3;
+            if (var4.moveToNext()) {
+                var5 = new Contact(var4.getInt(1), var4.getString(2), var4.getString(3), var4.getString(4), var4.getString(5));
+            }
+
+            var4.close();
         }
 
-        var4.close();
         var3 = var5;
-      }
-    }
+        if (var5 == null) {
+            String var7 = var2;
+            if (var2.contains("@")) {
+                var7 = var2.substring(2);
+            }
+
+            Cursor var6 = this.context.getContentResolver().query(ICContentProvider.CONTACT_URI, (String[]) null, "EXTRA=?", new String[]{var7}, "CATEGORY ASC");
+            var3 = var5;
+            if (var6 != null) {
+                if (var6.moveToNext()) {
+                    var5 = new Contact(var6.getInt(1), var6.getString(2), var6.getString(3), var6.getString(4), var6.getString(5));
+                }
 
-    return var3;
-  }
-
-  public ArrayList<NoticeContent> queryNotice(String var1) {
-    ArrayList noticelist = new ArrayList();
-    ContentResolver var3 = this.cr;
-    Uri var4 = ICContentProvider.NOTICE_URL;
-    StringBuilder var5 = new StringBuilder();
-    var5.append("TIME like '");
-    var5.append(var1);
-    var5.append("%'");
-    Cursor cr_notice = var3.query(var4, (String[])null, var5.toString(), (String[])null, (String)null);
-    if (cr_notice != null) {
-      while(true) {
-        if (!cr_notice.moveToNext()) {
-          cr_notice.close();
-          break;
+                var4.close();
+                var3 = var5;
+            }
         }
 
-        noticelist.add(new NoticeContent(cr_notice.getString(1),
-                cr_notice.getString(2),
-                cr_notice.getString(3),
-                cr_notice.getString(4),
-                cr_notice.getString(5),
-                cr_notice.getString(6),
-                cr_notice.getString(7)));
-      }
+        return var3;
     }
 
-    return noticelist;
-  }
-
-  public ArrayList<Silent> querySilence(boolean var1) {
-    ContentResolver var3 = this.cr;
-    Uri var4 = ICContentProvider.SILENT_URI;
-    String var2;
-    if (var1) {
-      var2 = "STATUS='ON'";
-    } else {
-      var2 = null;
+    public ArrayList<NoticeContent> queryNotice(String var1) {
+        ArrayList noticelist = new ArrayList();
+        ContentResolver var3 = this.cr;
+        Uri var4 = ICContentProvider.NOTICE_URL;
+        StringBuilder var5 = new StringBuilder();
+        var5.append("TIME like '");
+        var5.append(var1);
+        var5.append("%'");
+        Cursor cr_notice = var3.query(var4, (String[]) null, var5.toString(), (String[]) null, (String) null);
+        if (cr_notice != null) {
+            while (true) {
+                if (!cr_notice.moveToNext()) {
+                    cr_notice.close();
+                    break;
+                }
+
+                noticelist.add(new NoticeContent(cr_notice.getString(1),
+                        cr_notice.getString(2),
+                        cr_notice.getString(3),
+                        cr_notice.getString(4),
+                        cr_notice.getString(5),
+                        cr_notice.getString(6),
+                        cr_notice.getString(7)));
+            }
+        }
+
+        return noticelist;
     }
 
-    Cursor var5 = var3.query(var4, (String[])null, var2, (String[])null, (String)null);
-    ArrayList var6 = new ArrayList();
-    if (var5 != null) {
-      while(var5.moveToNext()) {
-        var6.add(new Silent(var5.getString(1), var5.getString(2), var5.getString(3), var5.getString(4), var5.getString(5)));
-      }
+    public ArrayList<Silent> querySilence(boolean var1) {
+        ContentResolver var3 = this.cr;
+        Uri var4 = ICContentProvider.SILENT_URI;
+        String var2;
+        if (var1) {
+            var2 = "STATUS='ON'";
+        } else {
+            var2 = null;
+        }
+
+        Cursor var5 = var3.query(var4, (String[]) null, var2, (String[]) null, (String) null);
+        ArrayList var6 = new ArrayList();
+        if (var5 != null) {
+            while (var5.moveToNext()) {
+                var6.add(new Silent(var5.getString(1), var5.getString(2), var5.getString(3), var5.getString(4), var5.getString(5)));
+            }
 
-      var5.close();
-    }
+            var5.close();
+        }
 
-    return var6;
-  }
-
-  public ArrayList<StheartRate> queryStheartRate(boolean var1) {
-    ContentResolver var3 = this.cr;
-    Uri var4 = ICContentProvider.STHEART_RATE_URL;
-    String var2;
-    if (var1) {
-      var2 = "STATUS='ON'";
-    } else {
-      var2 = null;
+        return var6;
     }
 
-    Cursor var5 = var3.query(var4, (String[])null, var2, (String[])null, (String)null);
-    ArrayList var6 = new ArrayList();
-    if (var5 != null) {
-      while(var5.moveToNext()) {
-        var6.add(new StheartRate(var5.getString(1), var5.getString(2), var5.getString(3), var5.getString(4), var5.getString(5)));
-      }
+    public ArrayList<StheartRate> queryStheartRate(boolean var1) {
+        ContentResolver var3 = this.cr;
+        Uri var4 = ICContentProvider.STHEART_RATE_URL;
+        String var2;
+        if (var1) {
+            var2 = "STATUS='ON'";
+        } else {
+            var2 = null;
+        }
 
-      var5.close();
-    }
+        Cursor var5 = var3.query(var4, (String[]) null, var2, (String[]) null, (String) null);
+        ArrayList var6 = new ArrayList();
+        if (var5 != null) {
+            while (var5.moveToNext()) {
+                var6.add(new StheartRate(var5.getString(1), var5.getString(2), var5.getString(3), var5.getString(4), var5.getString(5)));
+            }
 
-    return var6;
-  }
+            var5.close();
+        }
 
-  public NotificationParam queryUnreadMsg(String id, int value) {
+        return var6;
+    }
 
-    Cursor cursor = this.cr.query(ICContentProvider.UNREAD_MSG_URI, new String[]{"category"}, new StringBuilder("id=").append(id).toString(), (String[])null, (String)null);
-    NotificationParam ret = null;
+    public NotificationParam queryUnreadMsg(String id, int value) {
 
-    if (cursor != null) {
-      while(true) {
-        if (cursor.moveToNext()) {
-          if (cursor.getInt(0) != value) {
-            continue;
-          }
-          ret = new NotificationParam(value, cursor.getString(1), cursor.getInt(2), cursor.getLong(3));
+        Cursor cursor = this.cr.query(ICContentProvider.UNREAD_MSG_URI, new String[]{"category"}, new StringBuilder("id=").append(id).toString(), (String[]) null, (String) null);
+        NotificationParam ret = null;
+
+        if (cursor != null) {
+            while (true) {
+                if (cursor.moveToNext()) {
+                    if (cursor.getInt(0) != value) {
+                        continue;
+                    }
+                    ret = new NotificationParam(value, cursor.getString(1), cursor.getInt(2), cursor.getLong(3));
+                }
+
+                cursor.close();
+                break;
+            }
         }
 
-        cursor.close();
-        break;
-      }
+        return ret;
     }
 
-    return ret;
-  }
-
-  public ArrayList<NotificationParam> queryUnreadMsg() {
-    ArrayList var1 = new ArrayList();
-    Cursor var2 = this.cr.query(ICContentProvider.UNREAD_MSG_URI, (String[])null, (String)null, (String[])null, (String)null);
-    if (var2 != null) {
-      while(true) {
-        if (!var2.moveToNext()) {
-          var2.close();
-          break;
+    public ArrayList<NotificationParam> queryUnreadMsg() {
+        ArrayList var1 = new ArrayList();
+        Cursor var2 = this.cr.query(ICContentProvider.UNREAD_MSG_URI, (String[]) null, (String) null, (String[]) null, (String) null);
+        if (var2 != null) {
+            while (true) {
+                if (!var2.moveToNext()) {
+                    var2.close();
+                    break;
+                }
+
+                var1.add(new NotificationParam(var2.getInt(0), var2.getString(1), var2.getInt(2), Long.valueOf(var2.getLong(3))));
+            }
         }
 
-        var1.add(new NotificationParam(var2.getInt(0), var2.getString(1), var2.getInt(2), Long.valueOf(var2.getLong(3))));
-      }
+        return var1;
     }
 
-    return var1;
-  }
-
-  public void resetDatabase() {
-    this.cr.delete(ICContentProvider.NOTICE_URL, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.STHEART_RATE_URL, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.URLDOWNLOADPIC_URL, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.DEVICESTATUS_URL, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.DOWNLOADINFO_URL, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.IKNOWLEDGE_URL, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.WEATHER_URL, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.ALARM_URI, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.CONTACT_URI, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.MESSAGE_URI, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.SILENT_URI, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.ANTIOFF_URI, (String)null, (String[])null);
-    this.cr.delete(ICContentProvider.UNREAD_MSG_URI, (String)null, (String[])null);
-  }
-
-  public void saveAlarm(ArrayList<Alarm> paramArrayList) {
-    this.cr.delete(ICContentProvider.ALARM_URI, null, null);
-    int i = paramArrayList.size();
-    if (i != 0) {
-      ContentValues[] arrayOfContentValues = new ContentValues[i];
-      for (byte b = 0; b < i; b++) {
-        Alarm alarm = paramArrayList.get(b);
-        ContentValues contentValues = new ContentValues();
-        arrayOfContentValues[b] = contentValues;
-        contentValues.put("TIME", alarm.time);
-        contentValues.put("WEEK", alarm.week);
-        contentValues.put("RING", alarm.ring);
-        contentValues.put("STATUS", alarm.status);
-        contentValues.put("NAME", alarm.name);
-      }
-      this.cr.bulkInsert(ICContentProvider.ALARM_URI, arrayOfContentValues);
+    public void resetDatabase() {
+        this.cr.delete(ICContentProvider.NOTICE_URL, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.STHEART_RATE_URL, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.URLDOWNLOADPIC_URL, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.DEVICESTATUS_URL, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.DOWNLOADINFO_URL, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.IKNOWLEDGE_URL, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.WEATHER_URL, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.ALARM_URI, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.CONTACT_URI, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.MESSAGE_URI, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.SILENT_URI, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.ANTIOFF_URI, (String) null, (String[]) null);
+        this.cr.delete(ICContentProvider.UNREAD_MSG_URI, (String) null, (String[]) null);
     }
-    this.context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
-  }
-
-  public void saveAntioff(ArrayList<Antioff> paramArrayList) {
-    String str;
-    Cursor cursor = this.cr.query(ICContentProvider.ANTIOFF_URI, null, null, null, null);
-    if (cursor != null) {
-      for (str = null; cursor.moveToNext(); str = cursor.getString(5));
-      cursor.close();
-    } else {
-      str = null;
+
+    public void saveAlarm(ArrayList<Alarm> paramArrayList) {
+        this.cr.delete(ICContentProvider.ALARM_URI, null, null);
+        int i = paramArrayList.size();
+        if (i != 0) {
+            ContentValues[] arrayOfContentValues = new ContentValues[i];
+            for (byte b = 0; b < i; b++) {
+                Alarm alarm = paramArrayList.get(b);
+                ContentValues contentValues = new ContentValues();
+                arrayOfContentValues[b] = contentValues;
+                contentValues.put("TIME", alarm.time);
+                contentValues.put("WEEK", alarm.week);
+                contentValues.put("RING", alarm.ring);
+                contentValues.put("STATUS", alarm.status);
+                contentValues.put("NAME", alarm.name);
+            }
+            this.cr.bulkInsert(ICContentProvider.ALARM_URI, arrayOfContentValues);
+        }
+        this.context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
+    }
+
+    public void saveAntioff(ArrayList<Antioff> paramArrayList) {
+        String str;
+        Cursor cursor = this.cr.query(ICContentProvider.ANTIOFF_URI, null, null, null, null);
+        if (cursor != null) {
+            for (str = null; cursor.moveToNext(); str = cursor.getString(5)) ;
+            cursor.close();
+        } else {
+            str = null;
+        }
+        this.cr.delete(ICContentProvider.ANTIOFF_URI, null, null);
+        int i = paramArrayList.size();
+        if (i != 0) {
+            ContentValues[] arrayOfContentValues = new ContentValues[i];
+            for (byte b = 0; b < i; b++) {
+                Antioff antioff = paramArrayList.get(b);
+                ContentValues contentValues = new ContentValues();
+                arrayOfContentValues[b] = contentValues;
+                contentValues.put("START_TIME", antioff.start);
+                contentValues.put("END_TIME", antioff.end);
+                contentValues.put("WEEK", antioff.week);
+                contentValues.put("STATUS", antioff.status);
+                contentValues.put("CUR_SYS_STATUS", str);
+            }
+            this.cr.bulkInsert(ICContentProvider.ANTIOFF_URI, arrayOfContentValues);
+        }
+        this.context.sendBroadcast(new Intent(ACTION_ANTIOFF_ALARM_CHANGE));
     }
-    this.cr.delete(ICContentProvider.ANTIOFF_URI, null, null);
-    int i = paramArrayList.size();
-    if (i != 0) {
-      ContentValues[] arrayOfContentValues = new ContentValues[i];
-      for (byte b = 0; b < i; b++) {
-        Antioff antioff = paramArrayList.get(b);
-        ContentValues contentValues = new ContentValues();
-        arrayOfContentValues[b] = contentValues;
-        contentValues.put("START_TIME", antioff.start);
-        contentValues.put("END_TIME", antioff.end);
-        contentValues.put("WEEK", antioff.week);
-        contentValues.put("STATUS", antioff.status);
-        contentValues.put("CUR_SYS_STATUS", str);
-      }
-      this.cr.bulkInsert(ICContentProvider.ANTIOFF_URI, arrayOfContentValues);
+
+    public void saveContacts(final ArrayList<Contact> contactArray, boolean admin, boolean care, boolean call, boolean partner, boolean video, boolean sos) {
+        synchronized (this) {
+        }
+
+        try {
+            long currenttime = SystemClock.elapsedRealtime();
+            if (currenttime - lastUpdateTime > 1000L) {
+                this.saveContactsImpl(contactArray, admin, care, call, partner, video, sos);
+                lastUpdateTime = currenttime;
+            } else {
+                mHandler.postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        DBHelper.this.saveContacts(contactArray, admin, care, call, partner, video, sos);
+                    }
+                }, 1000);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
-    this.context.sendBroadcast(new Intent(ACTION_ANTIOFF_ALARM_CHANGE));
-  }
-
-  public void saveContacts(final ArrayList<Contact> contactArray, boolean admin, boolean care, boolean call, boolean partner, boolean video,boolean sos) {
-    synchronized(this){}
-
-    try {
-      long currenttime = SystemClock.elapsedRealtime();
-      if (currenttime - lastUpdateTime > 1000L) {
-        this.saveContactsImpl(contactArray, admin, care,call, partner, video,sos);
-        lastUpdateTime = currenttime;
-      } else {
-        mHandler.postDelayed(new Runnable() {
-          @Override
-          public void run() {
-            DBHelper.this.saveContacts(contactArray, admin, care,call,  partner, video,sos);
-          }
-        }, 1000);
-      }
-    } finally {
-      ;
+
+    public void saveNoticeContent(ArrayList<NoticeContent> var1) {
+        this.cr.delete(ICContentProvider.NOTICE_URL, (String) null, (String[]) null);
+        if (var1 != null) {
+            int var3 = var1.size();
+            if (var3 != 0) {
+                ContentValues[] var4 = new ContentValues[var3];
+
+                for (int var2 = 0; var2 < var3; ++var2) {
+                    NoticeContent var5 = (NoticeContent) var1.get(var2);
+                    ContentValues var6 = new ContentValues();
+                    var4[var2] = var6;
+                    var6.put("TIME", var5.noticeTime);
+                    var6.put("NAME", var5.noticeName);
+                    var6.put("NUMBER", var5.noticeNumber);
+                    var6.put("ID", var5.noticeID);
+                    var6.put("CATEGORY", var5.noticeCategory);
+                    var6.put("FREQUENCY", var5.noticeFrequency);
+                    var6.put("CONTENT", var5.noticeContent);
+                }
+
+                this.cr.bulkInsert(ICContentProvider.NOTICE_URL, var4);
+            }
+        }
+
+        this.context.sendBroadcast(new Intent("com.enqualcomm.support.ACTION_NOTICE_ALARM_CHANGE"));
     }
 
-  }
-
-  public void saveNoticeContent(ArrayList<NoticeContent> var1) {
-    this.cr.delete(ICContentProvider.NOTICE_URL, (String)null, (String[])null);
-    if (var1 != null) {
-      int var3 = var1.size();
-      if (var3 != 0) {
-        ContentValues[] var4 = new ContentValues[var3];
-
-        for(int var2 = 0; var2 < var3; ++var2) {
-          NoticeContent var5 = (NoticeContent)var1.get(var2);
-          ContentValues var6 = new ContentValues();
-          var4[var2] = var6;
-          var6.put("TIME", var5.noticeTime);
-          var6.put("NAME", var5.noticeName);
-          var6.put("NUMBER", var5.noticeNumber);
-          var6.put("ID", var5.noticeID);
-          var6.put("CATEGORY", var5.noticeCategory);
-          var6.put("FREQUENCY", var5.noticeFrequency);
-          var6.put("CONTENT", var5.noticeContent);
+    public void saveSilent(ArrayList<Silent> slist) {
+        Cursor cursor = this.cr.query(ICContentProvider.SILENT_URI, (String[]) null, (String) null, (String[]) null, (String) null);
+        String current_sys_status;
+        if (cursor != null) {
+            //获取silent免打扰状态 ON/OFF
+            for (current_sys_status = null; cursor.moveToNext(); current_sys_status = cursor.getString(5)) {
+            }
+
+            cursor.close();
+        } else {
+            current_sys_status = null;
+        }
+
+        this.cr.delete(ICContentProvider.SILENT_URI, (String) null, (String[]) null);
+        int count = slist.size();
+        if (count != 0) {
+            ContentValues[] contentValueslist = new ContentValues[count];
+
+            for (int row = 0; row < count; ++row) {
+                Silent silent = (Silent) slist.get(row);
+                ContentValues contentValues = new ContentValues();
+                contentValueslist[row] = contentValues;
+                contentValues.put("START_TIME", silent.start);
+                contentValues.put("END_TIME", silent.end);
+                contentValues.put("WEEK", silent.week);
+                contentValues.put("STATUS", silent.status);
+                contentValues.put("CUR_SYS_STATUS", current_sys_status);
+                ICLogger.i("add silience " + silent.start + "-" + silent.end + " " + silent.week + " " + silent.status + " " + current_sys_status);
+
+            }
+
+            this.cr.bulkInsert(ICContentProvider.SILENT_URI, contentValueslist);
         }
 
-        this.cr.bulkInsert(ICContentProvider.NOTICE_URL, var4);
-      }
     }
 
-    this.context.sendBroadcast(new Intent("com.enqualcomm.support.ACTION_NOTICE_ALARM_CHANGE"));
-  }
+    public void saveStheartRateList(ArrayList<StheartRate> var1) {
+        StringBuilder var4 = new StringBuilder();
+        var4.append("stheartRateListSize=");
+        var4.append(var1.size());
+        var4.append("stheartRateList=");
+        var4.append(var1.toString());
+        ICLogger.i(var4.toString());
+        this.cr.delete(ICContentProvider.STHEART_RATE_URL, (String) null, (String[]) null);
+        int var3 = var1.size();
+        if (var3 != 0) {
+            ContentValues[] var7 = new ContentValues[var3];
+
+            for (int var2 = 0; var2 < var3; ++var2) {
+                StheartRate var5 = (StheartRate) var1.get(var2);
+                ContentValues var6 = new ContentValues();
+                var7[var2] = var6;
+                var6.put("START_TIME", var5.start);
+                var6.put("END_TIME", var5.end);
+                var6.put("WEEK", var5.week);
+                var6.put("STATUS", var5.status);
+                var6.put("INTERVAL", var5.interval);
+            }
 
-  public void saveSilent(ArrayList<Silent> slist) {
-    Cursor cursor = this.cr.query(ICContentProvider.SILENT_URI, (String[])null, (String)null, (String[])null, (String)null);
-    String current_sys_status;
-    if (cursor != null) {
-      //获取silent免打扰状态 ON/OFF
-      for(current_sys_status = null; cursor.moveToNext(); current_sys_status = cursor.getString(5)) {
-      }
+            this.cr.bulkInsert(ICContentProvider.STHEART_RATE_URL, var7);
+        }
 
-      cursor.close();
-    } else {
-      current_sys_status = null;
+        this.context.sendBroadcast(new Intent("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE"));
     }
 
-    this.cr.delete(ICContentProvider.SILENT_URI, (String)null, (String[])null);
-    int count = slist.size();
-    if (count != 0) {
-      ContentValues[] contentValueslist = new ContentValues[count];
-
-      for(int row = 0; row < count; ++row) {
-        Silent silent = (Silent)slist.get(row);
-        ContentValues contentValues = new ContentValues();
-        contentValueslist[row] = contentValues;
-        contentValues.put("START_TIME", silent.start);
-        contentValues.put("END_TIME", silent.end);
-        contentValues.put("WEEK", silent.week);
-        contentValues.put("STATUS", silent.status);
-        contentValues.put("CUR_SYS_STATUS", current_sys_status);
-        ICLogger.i("add silience "+silent.start+"-"+silent.end+" "+silent.week+" "+silent.status+" "+current_sys_status);
-
-      }
-
-      this.cr.bulkInsert(ICContentProvider.SILENT_URI, contentValueslist);
+    public void saveUrlDownloadPic(String var1) {
+        String[] var8 = var1.split(",");
+
+        for (int var2 = 0; var2 < var8.length; ++var2) {
+            ContentResolver var5 = this.cr;
+            Uri var6 = ICContentProvider.URLDOWNLOADPIC_URL;
+            String var7 = var8[var2];
+            Cursor var9 = var5.query(var6, new String[]{"_id"}, "URL=?", new String[]{var7}, (String) null);
+            long var3;
+            if (var9 != null) {
+                if (var9.moveToNext()) {
+                    var3 = var9.getLong(0);
+                } else {
+                    var3 = -1L;
+                }
+
+                var9.close();
+            } else {
+                var3 = -1L;
+            }
+
+            if (var3 == -1L) {
+                ContentValues var10 = new ContentValues();
+                var10.put("URL", var8[var2]);
+                this.cr.insert(ICContentProvider.URLDOWNLOADPIC_URL, var10);
+            }
+        }
+
     }
 
-  }
-
-  public void saveStheartRateList(ArrayList<StheartRate> var1) {
-    StringBuilder var4 = new StringBuilder();
-    var4.append("stheartRateListSize=");
-    var4.append(var1.size());
-    var4.append("stheartRateList=");
-    var4.append(var1.toString());
-    ICLogger.i(var4.toString());
-    this.cr.delete(ICContentProvider.STHEART_RATE_URL, (String)null, (String[])null);
-    int var3 = var1.size();
-    if (var3 != 0) {
-      ContentValues[] var7 = new ContentValues[var3];
-
-      for(int var2 = 0; var2 < var3; ++var2) {
-        StheartRate var5 = (StheartRate)var1.get(var2);
-        ContentValues var6 = new ContentValues();
-        var7[var2] = var6;
-        var6.put("START_TIME", var5.start);
-        var6.put("END_TIME", var5.end);
-        var6.put("WEEK", var5.week);
-        var6.put("STATUS", var5.status);
-        var6.put("INTERVAL", var5.interval);
-      }
-
-      this.cr.bulkInsert(ICContentProvider.STHEART_RATE_URL, var7);
+    public void saveWeather(Weather var1) {
+        this.cr.delete(ICContentProvider.WEATHER_URL, (String) null, (String[]) null);
+        ContentValues var2 = new ContentValues();
+        var2.put("WEATHER_TYPE", var1.weatherType);
+        var2.put("MIN_TEMPERATURE", var1.min_Temperature);
+        var2.put("MAX_TEMPERATURE", var1.max_Temperature);
+        var2.put("CUR_TEMPERATURE", var1.cur_Temperature);
+        var2.put("WEATHER_INDEX", var1.weatherIndex);
+        var2.put("WEATHER_INFO", var1.weatherInfo);
+        Uri var4 = this.cr.insert(ICContentProvider.WEATHER_URL, var2);
+        StringBuilder var3 = new StringBuilder();
+        var3.append("升级天气==");
+        var3.append(var1.toString());
+        var3.append("条目=");
+        var3.append(var4);
+        ICLogger.i(var3.toString());
     }
 
-    this.context.sendBroadcast(new Intent("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE"));
-  }
-
-  public void saveUrlDownloadPic(String var1) {
-    String[] var8 = var1.split(",");
-
-    for(int var2 = 0; var2 < var8.length; ++var2) {
-      ContentResolver var5 = this.cr;
-      Uri var6 = ICContentProvider.URLDOWNLOADPIC_URL;
-      String var7 = var8[var2];
-      Cursor var9 = var5.query(var6, new String[]{"_id"}, "URL=?", new String[]{var7}, (String)null);
-      long var3;
-      if (var9 != null) {
-        if (var9.moveToNext()) {
-          var3 = var9.getLong(0);
-        } else {
-          var3 = -1L;
+    public void upDateMonitor(final String var1, final String var2) {
+        synchronized (this) {
         }
 
-        var9.close();
-      } else {
-        var3 = -1L;
-      }
+        try {
+            long var3 = SystemClock.elapsedRealtime();
+            if (var3 - lastUpdateTime > 1000L) {
+                this.upDateMonitorImpl(var1, var2);
+                lastUpdateTime = var3;
+            } else {
+                mHandler.postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        DBHelper.this.upDateMonitor(var1, var2);
+                    }
+                }, 1000);
+            }
+        } finally {
+            ;
+        }
 
-      if (var3 == -1L) {
-        ContentValues var10 = new ContentValues();
-        var10.put("URL", var8[var2]);
-        this.cr.insert(ICContentProvider.URLDOWNLOADPIC_URL, var10);
-      }
     }
 
-  }
-
-  public void saveWeather(Weather var1) {
-    this.cr.delete(ICContentProvider.WEATHER_URL, (String)null, (String[])null);
-    ContentValues var2 = new ContentValues();
-    var2.put("WEATHER_TYPE", var1.weatherType);
-    var2.put("MIN_TEMPERATURE", var1.min_Temperature);
-    var2.put("MAX_TEMPERATURE", var1.max_Temperature);
-    var2.put("CUR_TEMPERATURE", var1.cur_Temperature);
-    var2.put("WEATHER_INDEX", var1.weatherIndex);
-    var2.put("WEATHER_INFO", var1.weatherInfo);
-    Uri var4 = this.cr.insert(ICContentProvider.WEATHER_URL, var2);
-    StringBuilder var3 = new StringBuilder();
-    var3.append("升级天气==");
-    var3.append(var1.toString());
-    var3.append("条目=");
-    var3.append(var4);
-    ICLogger.i(var3.toString());
-  }
-
-  public void upDateMonitor(final String var1, final String var2) {
-    synchronized(this){}
-
-    try {
-      long var3 = SystemClock.elapsedRealtime();
-      if (var3 - lastUpdateTime > 1000L) {
-        this.upDateMonitorImpl(var1, var2);
-        lastUpdateTime = var3;
-      } else {
-        mHandler.postDelayed(new Runnable() {
-          @Override
-          public void run() {
-            DBHelper.this.upDateMonitor(var1, var2);
-          }
-        },1000);
-      }
-    } finally {
-      ;
+    public void upDateStatus(int var1) {
+        ContentValues var2 = new ContentValues();
+        var2.put("IS_ALARM", var1);
+        this.cr.update(ICContentProvider.DEVICESTATUS_URL, var2, (String) null, (String[]) null);
     }
 
-  }
-
-  public void upDateStatus(int var1) {
-    ContentValues var2 = new ContentValues();
-    var2.put("IS_ALARM", var1);
-    this.cr.update(ICContentProvider.DEVICESTATUS_URL, var2, (String)null, (String[])null);
-  }
-
-  public void upDateStatus(String var1) {
-    ContentValues var2 = new ContentValues();
-    var2.put("IS_SILENCE", var1);
-    this.cr.update(ICContentProvider.DEVICESTATUS_URL, var2, (String)null, (String[])null);
-  }
-
-  public void upDateorInsertDeviceStatus(String var1) {
-    Cursor var2 = this.cr.query(ICContentProvider.DEVICESTATUS_URL, (String[])null, (String)null, (String[])null, (String)null);
-    ContentValues var3 = new ContentValues();
-    var3.put("IS_SILENCE", var1);
-    if (var2 != null) {
-      if (var2.getCount() == 0) {
-        this.cr.insert(ICContentProvider.DEVICESTATUS_URL, var3);
-        return;
-      }
-      this.cr.update(ICContentProvider.DEVICESTATUS_URL, var3, (String)null, (String[])null);
+    public void upDateStatus(String var1) {
+        ContentValues var2 = new ContentValues();
+        var2.put("IS_SILENCE", var1);
+        this.cr.update(ICContentProvider.DEVICESTATUS_URL, var2, (String) null, (String[]) null);
     }
 
-  }
+    public void upDateorInsertDeviceStatus(String var1) {
+        Cursor var2 = this.cr.query(ICContentProvider.DEVICESTATUS_URL, (String[]) null, (String) null, (String[]) null, (String) null);
+        ContentValues var3 = new ContentValues();
+        var3.put("IS_SILENCE", var1);
+        if (var2 != null) {
+            if (var2.getCount() == 0) {
+                this.cr.insert(ICContentProvider.DEVICESTATUS_URL, var3);
+                return;
+            }
+            this.cr.update(ICContentProvider.DEVICESTATUS_URL, var3, (String) null, (String[]) null);
+        }
 
+    }
 
-  public void updateMessage(Content var1, Uri var2) {
-    ContentValues var3 = new ContentValues();
-    var3.put("CATEGORY", var1.category);
-    var3.put("CONTENT", var1.content);
-    var3.put("PREVIEW", var1.preview);
-    var3.put("STATUS", var1.status);
-    var3.put("IN_OR_OUT", var1.inOrOut);
-    var3.put("CONTACT_CATEGORY", var1.contactCategory);
-    var3.put("CONTACT_NUMBER", var1.contactNumber);
-    var3.put("SERVER_TIME", var1.serverTime);
-    var3.put("LOCAL_TIME", var1.localTime);
-    this.cr.update(var2, var3, (String)null, (String[])null);
-  }
+
+    public void updateMessage(Content var1, Uri var2) {
+        ContentValues var3 = new ContentValues();
+        var3.put("CATEGORY", var1.category);
+        var3.put("CONTENT", var1.content);
+        var3.put("PREVIEW", var1.preview);
+        var3.put("STATUS", var1.status);
+        var3.put("IN_OR_OUT", var1.inOrOut);
+        var3.put("CONTACT_CATEGORY", var1.contactCategory);
+        var3.put("CONTACT_NUMBER", var1.contactNumber);
+        var3.put("SERVER_TIME", var1.serverTime);
+        var3.put("LOCAL_TIME", var1.localTime);
+        this.cr.update(var2, var3, (String) null, (String[]) null);
+    }
 
 
-  public void insertSleepRecord(SleepRecord sr){
-    /*每次打点的记录表  SLEEP_DATE 代表记录睡眠的日期,例如 22日上午7:00的计入到21日的睡眠记录中。 DATE代表记录的时间,此出应该等于上文的 22日 7:00 */
+    public void insertSleepRecord(SleepRecord sr) {
+        /*每次打点的记录表  SLEEP_DATE 代表记录睡眠的日期,例如 22日上午7:00的计入到21日的睡眠记录中。 DATE代表记录的时间,此出应该等于上文的 22日 7:00 */
 //    sqlite.execSQL("CREATE TABLE SLEEP_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,SLEEP_DATE TEXT,DATE TEXT, TIME TEXT,STEPCOUNT INTEGER ,ROLLTIMES INTEGER ,STATUS TEXT )");
-    ContentValues values=new ContentValues();
-    values.put("DATE",sr.date);
-    values.put("SLEEP_DATE",sr.sleep_date);
-    values.put("STEPCOUNT",sr.stepCount);
-    values.put("STATUS",sr.status);
-    this.cr.insert( ICContentProvider.SLEEP_RECORDS_URI, values);
-  }
-
-
-  public ArrayList<SleepRecord> querySleepRecord(String sleep_date) {
-    ArrayList sleeprecordList = new ArrayList();
-    ContentResolver pcr = this.cr;
-    Uri table = ICContentProvider.SLEEP_RECORDS_URI;
-    StringBuilder where = new StringBuilder();
-    where.append("SLEEP_DATE like '");
-    where.append(sleep_date);
-    where.append("'");
-    Cursor cr_sleeprecord = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);
-    if (cr_sleeprecord != null) {
-      while (true) {
-        if (!cr_sleeprecord.moveToNext()) {
-          cr_sleeprecord.close();
-          break;
+        ContentValues values = new ContentValues();
+        values.put("DATE", sr.date);
+        values.put("SLEEP_DATE", sr.sleep_date);
+        values.put("STEPCOUNT", sr.stepCount);
+        values.put("STATUS", sr.status);
+        this.cr.insert(ICContentProvider.SLEEP_RECORDS_URI, values);
+    }
+
+
+    public ArrayList<SleepRecord> querySleepRecord(String sleep_date) {
+        ArrayList sleeprecordList = new ArrayList();
+        ContentResolver pcr = this.cr;
+        Uri table = ICContentProvider.SLEEP_RECORDS_URI;
+        StringBuilder where = new StringBuilder();
+        where.append("SLEEP_DATE like '");
+        where.append(sleep_date);
+        where.append("'");
+        Cursor cr_sleeprecord = pcr.query(table, (String[]) null, where.toString(), (String[]) null, (String) null);
+        if (cr_sleeprecord != null) {
+            while (true) {
+                if (!cr_sleeprecord.moveToNext()) {
+                    cr_sleeprecord.close();
+                    break;
+                }
+                sleeprecordList.add(new SleepRecord(
+                        cr_sleeprecord.getString(cr_sleeprecord.getColumnIndex("DATE")), cr_sleeprecord.getString(cr_sleeprecord.getColumnIndex("SLEEP_DATE")), cr_sleeprecord.getInt(cr_sleeprecord.getColumnIndex("STEPCOUNT"))));
+            }
         }
-        sleeprecordList.add(new SleepRecord(
-                cr_sleeprecord.getString(cr_sleeprecord.getColumnIndex("DATE")), cr_sleeprecord.getString(cr_sleeprecord.getColumnIndex("SLEEP_DATE")), cr_sleeprecord.getInt(cr_sleeprecord.getColumnIndex("STEPCOUNT"))));
-      }
+        return sleeprecordList;
     }
-    return sleeprecordList;
-  }
-  public void updateSleepInfo(SleepInfo si){
-    /*计算后的分值,每天会在睡眠结束后计算Records获得*/
-//    sqlite.execSQL("CREATE TABLE SLEEP_STATUS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,DATE TEXT , DEEP_SLEEP INTEGER , LIGHT_SLEEP INTEGER ,SCORE INTEGER )");
-
-    ContentValues values = new ContentValues();
-    values.put("DATE",si.getCurrentDate());
-    values.put("DEEP_SLEEP",si.getDeepsleep_minutes());
-    values.put("LIGHT_SLEEP",si.getLightsleep_minutes());
-    values.put("SCORE",si.getScore());
-    this.cr.insert( ICContentProvider.SLEEP_STATUS_URI, values);
-  }
-
-
-  public int querySleepScore(String dateyyyyMMddHHmmss){
-
-    ContentResolver pcr = this.cr;
-    Uri table = ICContentProvider.SLEEP_STATUS_URI;
-    StringBuilder where = new StringBuilder();
-    where.append("DATE like '");
-    where.append(dateyyyyMMddHHmmss);
-    where.append("'");
-    ICLogger.i("Query SleepScore "+where);
-    Cursor cr_sleeprecord = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);
-    if (cr_sleeprecord != null) {
-        int score=0;
-        if (cr_sleeprecord.getCount()> 0) {
-            if (cr_sleeprecord.moveToFirst()) {
-                int index = cr_sleeprecord.getColumnIndex("SCORE");
-                score = cr_sleeprecord.getInt(4);
-                ICLogger.i("get SleepScore "+score + " column index "+index);
+
+    /**
+     * 更新睡眠信息
+     *
+     * @param si
+     */
+    public void updateSleepInfo(SleepInfo si) {
+        Observable.create(new Observable.OnSubscribe<Object>() {
+            @Override
+            public void call(Subscriber<? super Object> subscriber) {
+                /*计算后的分值,每天会在睡眠结束后计算Records获得*/
+                ContentValues values = new ContentValues();
+                values.put("DATE", si.getCurrentDate());
+                values.put("DEEP_SLEEP", si.getDeepsleep_minutes());
+                values.put("LIGHT_SLEEP", si.getLightsleep_minutes());
+                values.put("SCORE", si.getScore());
+                cr.insert(ICContentProvider.SLEEP_STATUS_URI, values);
             }
+        }).subscribeOn(Schedulers.io()).subscribe();
+    }
+
+
+    public int querySleepScore(String dateyyyyMMddHHmmss) {
+        ContentResolver pcr = this.cr;
+        Uri table = ICContentProvider.SLEEP_STATUS_URI;
+        StringBuilder where = new StringBuilder();
+        where.append("DATE like '");
+        where.append(dateyyyyMMddHHmmss);
+        where.append("'");
+        ICLogger.i("Query SleepScore " + where);
+        Cursor cr_sleeprecord = pcr.query(table, (String[]) null, where.toString(), (String[]) null, (String) null);
+        if (cr_sleeprecord != null) {
+            int score = 0;
+            if (cr_sleeprecord.getCount() > 0) {
+                if (cr_sleeprecord.moveToFirst()) {
+                    int index = cr_sleeprecord.getColumnIndex("SCORE");
+                    score = cr_sleeprecord.getInt(4);
+                    ICLogger.i("get SleepScore " + score + " column index " + index);
+                }
 
+            }
+            cr_sleeprecord.close();
+            ICLogger.i("get SleepScore " + score);
+            return score;
         }
-        cr_sleeprecord.close();
-        ICLogger.i("get SleepScore "+ score);
-        return score;
+        return 0;
     }
-    return 0;
-  }
-    public int deleteSleepData(){
-      this.cr.delete(ICContentProvider.SLEEP_RECORDS_URI, (String)null, (String[])null);
+
+    public int deleteSleepData() {
+        this.cr.delete(ICContentProvider.SLEEP_RECORDS_URI, (String) null, (String[]) null);
         return 0;
     }
-  public void insertEventMsg(String  dateyyyyMMddHHmmss,int event_type,String event_name){
-    //日志表格,存储开机关机,低电报警等消息。。。
-//    sqlite.execSQL("CREATE TABLE EVENT_MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT , EVENT_TYPE INTEGER, EVENT_NAME TEXT, TIME TEXT )");
-
-    ContentValues values = new ContentValues();
-    values.put("EVENT_TYPE",event_type);
-    values.put("EVENT_NAME",event_name);
-    values.put("TIME",dateyyyyMMddHHmmss);
-    this.cr.insert( ICContentProvider.EVENT_MESSAGE_URI, values);
-
-  }
-
-//sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )");
-
-  public long insertCMDRecord(StringMessage msg){
-    ContentValues values = new ContentValues();
-    values.put("FLAG",msg.haveSent());
-    if(msg.getDate()==null || msg.getTime()==null)
-      msg.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());
-    values.put("DATE",msg.getDate());
-    values.put("TIME",msg.getTime());
-    values.put("TOPIC",msg.cmd());
-    values.put("CMD",msg.isFromCache());
-    long raw_contactID = ContentUris.parseId(cr.insert(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, values));
-    if (Config.LOG_TOFILE) ICLogger.logToFile( "APILog", " insert db " +raw_contactID+" "+msg.getDate()+msg.getTime()+" "+ msg.cmd()+" "+msg.isFromCache());
-
-    return raw_contactID;
-  }
-
-
-  //
-  public void updateCMDRecord(int id, int flag){
-
-    String WhereClause=null;
-    if (id>=0) {
-      WhereClause=new StringBuilder("_id=").append(id).toString();
-
-      ContentValues flagcontent = new ContentValues();
-      flagcontent.put("FLAG", flag);
-      this.cr.update(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, flagcontent, WhereClause, (String[])null);
+
+    public void insertEventMsg(String dateyyyyMMddHHmmss, int event_type, String event_name) {
+        //日志表格,存储开机关机,低电报警等消息。。。
+        ContentValues values = new ContentValues();
+        values.put("EVENT_TYPE", event_type);
+        values.put("EVENT_NAME", event_name);
+        values.put("TIME", dateyyyyMMddHHmmss);
+        this.cr.insert(ICContentProvider.EVENT_MESSAGE_URI, values);
+
     }
-  }
-
-  public void clearCMDRecordsHaveSent(){
-    ContentResolver pcr = this.cr;
-    Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;
-    StringBuilder where = new StringBuilder();
-    where.append("FLAG>1");
-    Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);
-    if(cmdrecords!=null){
-      if(cmdrecords.getCount()>500) {
-        pcr.delete(table, where.toString(), (String[]) null);
-        ICLogger.i("delete cmdRecords have sent ");
-      }else{
-        ICLogger.i("cmdRecords less than 500 , skip delete ");
-      }
+
+    public long insertCMDRecord(StringMessage msg) {
+        ContentValues values = new ContentValues();
+        values.put("FLAG", msg.haveSent());
+        if (msg.getDate() == null || msg.getTime() == null)
+            msg.setDate(TimeUtil.getSystemDateYYMMDD(), TimeUtil.getSystemTimeHHmmss());
+        values.put("DATE", msg.getDate());
+        values.put("TIME", msg.getTime());
+        values.put("TOPIC", msg.cmd());
+        values.put("CMD", msg.isFromCache());
+        long raw_contactID = ContentUris.parseId(cr.insert(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, values));
+        if (Config.LOG_TOFILE)
+            ICLogger.logToFile("APILog", " insert db " + raw_contactID + " " + msg.getDate() + msg.getTime() + " " + msg.cmd() + " " + msg.isFromCache());
+
+        return raw_contactID;
     }
-  }
-
-  public StringMessage queryNotSentCMDRecord(){
-    ContentResolver pcr = this.cr;
-    Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;
-    StringBuilder where = new StringBuilder();
-    where.append("FLAG=0");
-    //ICLogger.i("Query cmdRecords "+where);
-    Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);
-    StringMessage msg=null;
-    if (cmdrecords != null) {
-      int score=0;
-      if (cmdrecords.getCount()> 0) {
-        if (cmdrecords.moveToFirst()) {
-          String topic=cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));
-          String cmd=cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));
-          String date=cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));
-          String time=cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));
-          int flag=cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));
-          int index=cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));
-
-          msg=new StringMessage(new String[]{topic});
-          msg.refresh(cmd);
-          msg.setDate(date,time);
-          msg.setSentFlag(flag);
-          msg.setIndex(index);
-          ICLogger.i("get cmd Record not sent  _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd);
 
-        }
-      }
-      cmdrecords.close();
 
-      if (msg==null)
-        ICLogger.i("no cmd record in not sent status !");
+    public void updateCMDRecord(int id, int flag) {
+        String WhereClause = null;
+        if (id >= 0) {
+            WhereClause = new StringBuilder("_id=").append(id).toString();
+            ContentValues flagcontent = new ContentValues();
+            flagcontent.put("FLAG", flag);
+            this.cr.update(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, flagcontent, WhereClause, null);
+        }
     }
-    return msg;
-  }
-
-
-  public StringMessage queryWaitCMDRecord(){
-    ContentResolver pcr = this.cr;
-    Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;
-    StringBuilder where = new StringBuilder();
-    where.append("FLAG=1");
-   // ICLogger.i("Query cmdRecords "+where);
-    Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);
-    StringMessage msg=null;
-    if (cmdrecords != null) {
-      int score=0;
-      if (cmdrecords.getCount()> 0) {
-        if (cmdrecords.moveToFirst()) {
-          String topic=cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));
-          String cmd=cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));
-          String date=cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));
-          String time=cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));
-          int flag=cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));
-          int index=cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));
-
-          msg=new StringMessage(new String[]{topic});
-          msg.refresh(cmd);
-          msg.setDate(date,time);
-          msg.setSentFlag(flag);
-          msg.setIndex(index);
-          ICLogger.i("get cmd Record wait response _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd);
 
+    public void clearCMDRecordsHaveSent() {
+        ContentResolver pcr = this.cr;
+        Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;
+        StringBuilder where = new StringBuilder();
+        where.append("FLAG>1");
+        Cursor cmdRecords = pcr.query(table, null, where.toString(), null, null);
+        if (cmdRecords != null) {
+            if (cmdRecords.getCount() > 500) {
+                pcr.delete(table, where.toString(), null);
+                ICLogger.i("delete cmdRecords have sent ");
+            } else {
+                ICLogger.i("cmdRecords less than 500 , skip delete ");
+            }
         }
-      }
-      cmdrecords.close();
-
-      if (msg==null)
-        ICLogger.i("no cmd record in wait status !");
     }
-    return msg;
-  }
-
-
-  public StringMessage queryDiscardCMDRecord(){
-    ContentResolver pcr = this.cr;
-    Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;
-    StringBuilder where = new StringBuilder();
-    where.append("FLAG=3");
-    // ICLogger.i("Query cmdRecords "+where);
-    Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);
-    StringMessage msg=null;
-    if (cmdrecords != null) {
-      int score=0;
-      if (cmdrecords.getCount()> 0) {
-        if (cmdrecords.moveToFirst()) {
-          String topic=cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));
-          String cmd=cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));
-          String date=cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));
-          String time=cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));
-          int flag=cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));
-          int index=cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));
-
-          msg=new StringMessage(new String[]{topic});
-          msg.refresh(cmd);
-          msg.setDate(date,time);
-          msg.setSentFlag(flag);
-          msg.setIndex(index);
-          ICLogger.i("get cmd Record discarded response _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd);
+
+    public StringMessage queryNotSentCMDRecord() {
+        ContentResolver pcr = this.cr;
+        Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;
+        StringBuilder where = new StringBuilder();
+        where.append("FLAG=0");
+        //ICLogger.i("Query cmdRecords "+where);
+        Cursor cmdrecords = pcr.query(table, null, where.toString(), null, null);
+        StringMessage msg = null;
+        if (cmdrecords != null) {
+            int score = 0;
+            if (cmdrecords.getCount() > 0) {
+                if (cmdrecords.moveToFirst()) {
+                    String topic = cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));
+                    String cmd = cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));
+                    String date = cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));
+                    String time = cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));
+                    int flag = cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));
+                    int index = cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));
+
+                    msg = new StringMessage(new String[]{topic});
+                    msg.refresh(cmd);
+                    msg.setDate(date, time);
+                    msg.setSentFlag(flag);
+                    msg.setIndex(index);
+                    ICLogger.i("get cmd Record not sent  _id " + index + " " + date + time + " topic " + topic + " cmd " + cmd);
+
+                }
+            }
+            cmdrecords.close();
+
+            if (msg == null)
+                ICLogger.i("no cmd record in not sent status !");
         }
-      }
-      cmdrecords.close();
+        return msg;
+    }
+
 
-      if (msg==null)
-        ICLogger.i("no cmd record in wait status !");
+    public StringMessage queryWaitCMDRecord() {
+        ContentResolver pcr = this.cr;
+        Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;
+        StringBuilder where = new StringBuilder();
+        where.append("FLAG=1");
+        // ICLogger.i("Query cmdRecords "+where);
+        Cursor cmdrecords = pcr.query(table, (String[]) null, where.toString(), (String[]) null, (String) null);
+        StringMessage msg = null;
+        if (cmdrecords != null) {
+            int score = 0;
+            if (cmdrecords.getCount() > 0) {
+                if (cmdrecords.moveToFirst()) {
+                    String topic = cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));
+                    String cmd = cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));
+                    String date = cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));
+                    String time = cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));
+                    int flag = cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));
+                    int index = cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));
+
+                    msg = new StringMessage(new String[]{topic});
+                    msg.refresh(cmd);
+                    msg.setDate(date, time);
+                    msg.setSentFlag(flag);
+                    msg.setIndex(index);
+                    ICLogger.i("get cmd Record wait response _id " + index + " " + date + time + " topic " + topic + " cmd " + cmd);
+
+                }
+            }
+            cmdrecords.close();
+
+            if (msg == null)
+                ICLogger.i("no cmd record in wait status !");
+        }
+        return msg;
     }
-    return msg;
-  }
 
 
+    public StringMessage queryDiscardCMDRecord() {
+        ContentResolver pcr = this.cr;
+        Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;
+        StringBuilder where = new StringBuilder();
+        where.append("FLAG=3");
+        // ICLogger.i("Query cmdRecords "+where);
+        Cursor cmdrecords = pcr.query(table, (String[]) null, where.toString(), (String[]) null, (String) null);
+        StringMessage msg = null;
+        if (cmdrecords != null) {
+            int score = 0;
+            if (cmdrecords.getCount() > 0) {
+                if (cmdrecords.moveToFirst()) {
+                    String topic = cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));
+                    String cmd = cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));
+                    String date = cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));
+                    String time = cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));
+                    int flag = cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));
+                    int index = cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));
+
+                    msg = new StringMessage(new String[]{topic});
+                    msg.refresh(cmd);
+                    msg.setDate(date, time);
+                    msg.setSentFlag(flag);
+                    msg.setIndex(index);
+                    ICLogger.i("get cmd Record discarded response _id " + index + " " + date + time + " topic " + topic + " cmd " + cmd);
+                }
+            }
+            cmdrecords.close();
+
+            if (msg == null)
+                ICLogger.i("no cmd record in wait status !");
+        }
+        return msg;
+    }
+
 
 }
index 212dd14..cc95242 100644 (file)
@@ -1,4 +1,5 @@
 package com.enqualcomm.support.utils;
+
 import android.content.Context;
 import android.content.Intent;
 import android.database.ContentObserver;
@@ -6,10 +7,12 @@ import android.database.Cursor;
 import android.os.Handler;
 import android.os.Message;
 import android.provider.CallLog.Calls;
+
 import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.EventLooperHandlerThread;
 import com.enqualcomm.support.bean.Runtime;
+
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
@@ -17,12 +20,12 @@ public class MissedCallContentObserver extends ContentObserver {
     private static final int MISSED_CALL_MSG = 1;
     private static final String[] PROJECT = new String[]{"name", "number", "type", "new", "date"};
     private Context mContext;
-    private Handler mHandler = new Handler(EventLooperHandlerThread.makeLooper(MissedCallContentObserver.class.getSimpleName())) {
+    private Handler mHandler = new Handler(EventLooperHandlerThread.getInstance().makeLooper()) {
         public void handleMessage(Message var1) {
             int var2 = var1.what;
             boolean var3 = true;
             if (var2 == 1) {
-                MissedCallContentObserver.DataHolder var5 = (MissedCallContentObserver.DataHolder)var1.obj;
+                MissedCallContentObserver.DataHolder var5 = (MissedCallContentObserver.DataHolder) var1.obj;
                 StringBuilder var4 = new StringBuilder();
                 var4.append("you have a missed call, name : ");
                 var4.append(var5.contact.name);
@@ -67,10 +70,10 @@ public class MissedCallContentObserver extends ContentObserver {
     }
 
     public void onChange(boolean var1) {
-        Cursor var2 = this.mContext.getContentResolver().query(Calls.CONTENT_URI, PROJECT, (String)null, (String[])null, "date DESC");
+        Cursor var2 = this.mContext.getContentResolver().query(Calls.CONTENT_URI, PROJECT, (String) null, (String[]) null, "date DESC");
         if (var2 != null) {
             if (var2.moveToFirst()) {
-                switch(var2.getInt(var2.getColumnIndex("type"))) {
+                switch (var2.getInt(var2.getColumnIndex("type"))) {
                     case 1:
                         ICLogger.i("incoming type");
                         break;
@@ -88,14 +91,14 @@ public class MissedCallContentObserver extends ContentObserver {
                                 this.mMissedCallDate = var4;
                                 Date var6 = new Date(var4);
                                 (new SimpleDateFormat("yyyy-MM-dd;HH:mm:ss")).format(var6);
-                                Cursor var13 = this.mContext.getContentResolver().query(Constants.CONTACT_URI, (String[])null, "CATEGORY IN (1,2,3)", (String[])null, (String)null);
+                                Cursor var13 = this.mContext.getContentResolver().query(Constants.CONTACT_URI, (String[]) null, "CATEGORY IN (1,2,3)", (String[]) null, (String) null);
                                 if (var13 != null) {
                                     StringBuilder var7 = new StringBuilder();
                                     var7.append("cursor1.size = ");
                                     var7.append(var13.getCount());
                                     ICLogger.i(var7.toString());
 
-                                    while(var13.moveToNext()) {
+                                    while (var13.moveToNext()) {
                                         String var8 = var13.getString(3);
                                         if (var8.contains(var3) || var3.contains(var8)) {
                                             int var9 = var13.getInt(1);
index 07169df..85e4a1d 100644 (file)
@@ -6,15 +6,11 @@ import android.os.Message;
 import android.os.SystemClock;
 import android.util.Log;
 
-
 import com.enqualcomm.support.Config;
-import com.enqualcomm.support.adapter.BTHelper;
 import com.enqualcomm.support.bean.EventLooperHandlerThread;
-import com.enqualcomm.support.service.SilentManager;
-import com.ic.protocols.protocolAPIHelper;
+import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
-import com.enqualcomm.support.service.HeartRateManager;
-import com.enqualcomm.support.CoreService;
+import com.ic.protocols.protocolAPIHelper;
 
 import java.nio.ByteBuffer;
 import java.util.concurrent.ExecutorService;
@@ -25,193 +21,192 @@ import rx.schedulers.Schedulers;
 
 import static com.enqualcomm.support.utils.RxSocket.SocketStatus.CONNECTED;
 
-import com.enqualcomm.support.bean.Runtime;
-
 public class NettyConnection implements Connection {
-  private static long realtime_old;
-  private static final String TAG = NettyConnection.class.getSimpleName();
+    private static long realtime_old;
+    private static final String TAG = NettyConnection.class.getSimpleName();
+
+    ExecutorService executorService = Executors.newSingleThreadExecutor();
 
-  ExecutorService executorService = Executors.newSingleThreadExecutor();
+    private protocolAPIHelper API = null;
+    private ConnectionListener listener = null;
 
-  private protocolAPIHelper API=null;
-  private ConnectionListener listener=null;
-  
-  private int timeout = 60;
+    private int timeout = 60;
     private Handler mHandler;
 
-    public NettyConnection(ConnectionListener paramConnectionListener,Runtime runtime) {
-      Log.i(TAG, "NettyConnection ");
-    this.listener = paramConnectionListener;
+    public NettyConnection(ConnectionListener paramConnectionListener, Runtime runtime) {
+        Log.i(TAG, "NettyConnection ");
+        this.listener = paramConnectionListener;
 
-    mHandler = new Handler(EventLooperHandlerThread.makeLooper(NettyConnection.class.getSimpleName()),new Handler.Callback() {
-        @Override
-        public boolean handleMessage(Message message) {
+        mHandler = new Handler(EventLooperHandlerThread.getInstance().makeLooper(), new Handler.Callback() {
+            @Override
+            public boolean handleMessage(Message message) {
 
-            if (message.what == 100){
-                byte[] bytes=message.getData().getByteArray("RecvData");
-                String msg=  new String(bytes);
+                if (message.what == 100) {
+                    byte[] bytes = message.getData().getByteArray("RecvData");
+                    String msg = new String(bytes);
 
-                log("get Msg :"+msg+" (size) byteslen" + bytes.length +" strlen"+ msg.length());
-                API.parserCmd("",bytes);
+                    log("get Msg :" + msg + " (size) byteslen" + bytes.length + " strlen" + msg.length());
+                    API.parserCmd("", bytes);
 
+                }
+                return false;
             }
-            return false;
-        }
-    });
-
-    if (API == null) API=new protocolAPIHelper(this,runtime );
-
-      initReadListener();
-      init_connection_listener();
-  }
-  
-  private void connectImpl(String host, int port) {
-     connectServer(host,port);
-  }
-  
-  public void close() {
+        });
+
+        if (API == null) API = new protocolAPIHelper(this, runtime);
+
+        initReadListener();
+        init_connection_listener();
+    }
+
+    private void connectImpl(String host, int port) {
+        connectServer(host, port);
+    }
+
+    public void close() {
 //      listener =null;
 //      RxSocket.getInstance().setConnectionListener(null);
-      this.disconnect();
-  }
-  
-  public void connect(final String host, final int port) {
-    long l = SystemClock.elapsedRealtime();
-    if (host.isEmpty()||host ==null){
-        ICLogger.i("host name error "+host);
-        return ;
+        this.disconnect();
     }
-    if (l - realtime_old < 3000L ) {
-        ICLogger.i("3秒内skip 重连!");
-        return;
-    }
-    realtime_old = l;
-    ICLogger.i("connect1 "+host+":"+port);
+
+    public void connect(final String host, final int port) {
+        long l = SystemClock.elapsedRealtime();
+        if (host.isEmpty() || host == null) {
+            ICLogger.i("host name error " + host);
+            return;
+        }
+        if (l - realtime_old < 3000L) {
+            ICLogger.i("3秒内skip 重连!");
+            return;
+        }
+        realtime_old = l;
+        ICLogger.i("connect1 " + host + ":" + port);
 //    disconnect();
-    this.executorService.execute(new Runnable() {
-          public void run() {
-            NettyConnection.this.connectImpl(host, port);
-            ICLogger.i("connect2");
-          }
+        this.executorService.execute(new Runnable() {
+            public void run() {
+                NettyConnection.this.connectImpl(host, port);
+                ICLogger.i("connect2");
+            }
         });
-  }
-  
-  public void disconnect() {
-
-    disconnectServer();
-  }
-
+    }
 
-  private boolean  connectServer(String serverip,int serverport){
+    public void disconnect() {
 
-    //进行连接Socket:这里使用的是,在本地上开启了一个服务器。
+        disconnectServer();
+    }
 
-    RxSocket.getInstance().connectRx(serverip==null?"118.178.155.223":serverip,serverport)
-            .subscribe(
-                    aBoolean -> {
-                      log("RxSocket Connect "+aBoolean);
-                    },
-                    throwable -> {
-                      log("RxSocket Connect Error : "+throwable.getMessage());
-                    },
-                    () -> {
-                        log("RxSocket Connect main");
 
-                    }
-            );
-
-
-    return true;
-  }
-
-  public boolean disconnectServer(){
-
-      log("Call disconnectServer");
-    //断开连接
-    RxSocket.getInstance().disConnect()
-            .subscribe(
-                    aBoolean -> {
-                      log("RxSocket DisConnect "+aBoolean);
-                    },
-                    throwable -> {
-                      log("RxSocket DisConnect Error : "+throwable.getMessage());
-                    },
-                    () -> {
-                        log("RxSocket DisConnect main");
-                    }
-            );
+    private boolean connectServer(String serverip, int serverport) {
 
-    return true;
-  }
-  private void log(String msg) {
-    ICLogger.log(TAG,msg);
-  }
+        //进行连接Socket:这里使用的是,在本地上开启了一个服务器。
 
+        RxSocket.getInstance().connectRx(serverip == null ? "118.178.155.223" : serverip, serverport)
+                .subscribe(
+                        aBoolean -> {
+                            log("RxSocket Connect " + aBoolean);
+                        },
+                        throwable -> {
+                            log("RxSocket Connect Error : " + throwable.getMessage());
+                        },
+                        () -> {
+                            log("RxSocket Connect main");
 
-  public boolean isServerConnected(){
-    return (RxSocket.getInstance().getSocketStatus()== CONNECTED)?true:false;
-  }
+                        }
+                );
 
-  public boolean sendMsg(String  cmd) {
 
-    if( cmd==null || cmd.isEmpty())
-    {
-      return false;
+        return true;
     }
 
+    public boolean disconnectServer() {
 
-    if (!isServerConnected()){
-
-        log("skiped"+cmd);
-        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog"," skiped " + cmd);
-        return false;
-    }else{
-        log("send  "+cmd);
-        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog"," sent " + cmd);
-        //向RxSocket写数据
-        //示例数据:IWAP00867155030001063#
-        byte[] test = cmd.getBytes();
-        ByteBuffer byteBuffer = ByteBuffer.wrap(test);
-        RxSocket.getInstance().write(byteBuffer)
+        log("Call disconnectServer");
+        //断开连接
+        RxSocket.getInstance().disConnect()
                 .subscribe(
                         aBoolean -> {
-                            log("RxSocket write " + aBoolean);
+                            log("RxSocket DisConnect " + aBoolean);
                         },
                         throwable -> {
-                            log("RxSocket write Error : " + throwable.getMessage());
+                            log("RxSocket DisConnect Error : " + throwable.getMessage());
                         },
                         () -> {
-                            log("RxSocket write main ");
+                            log("RxSocket DisConnect main");
                         }
                 );
 
+        return true;
+    }
+
+    private void log(String msg) {
+        ICLogger.log(TAG, msg);
+    }
 
+
+    public boolean isServerConnected() {
+        return (RxSocket.getInstance().getSocketStatus() == CONNECTED) ? true : false;
     }
 
-    return true;
-  }
+    public boolean sendMsg(String cmd) {
+
+        if (cmd == null || cmd.isEmpty()) {
+            return false;
+        }
+
 
-    public boolean sendMsg(String cmdtype,byte[]  cmdArray) {
-      log(cmdtype);
-      return sendMsg(cmdArray);
+        if (!isServerConnected()) {
+
+            log("skiped" + cmd);
+            if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " skiped " + cmd);
+            return false;
+        } else {
+            log("send  " + cmd);
+            if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " sent " + cmd);
+            //向RxSocket写数据
+            //示例数据:IWAP00867155030001063#
+            byte[] test = cmd.getBytes();
+            ByteBuffer byteBuffer = ByteBuffer.wrap(test);
+            RxSocket.getInstance().write(byteBuffer)
+                    .subscribe(
+                            aBoolean -> {
+                                log("RxSocket write " + aBoolean);
+                            },
+                            throwable -> {
+                                log("RxSocket write Error : " + throwable.getMessage());
+                            },
+                            () -> {
+                                log("RxSocket write main ");
+                            }
+                    );
+
+
+        }
+
+        return true;
+    }
+
+    public boolean sendMsg(String cmdtype, byte[] cmdArray) {
+        log(cmdtype);
+        return sendMsg(cmdArray);
 
     }
-        public boolean sendMsg(byte[]  cmdArray) {
 
-        if( cmdArray==null || cmdArray.length==0)
-        {
+    public boolean sendMsg(byte[] cmdArray) {
+
+        if (cmdArray == null || cmdArray.length == 0) {
             return false;
         }
 
 
-        if (!isServerConnected()){
+        if (!isServerConnected()) {
 
-            log("skipedBytes "+new String(cmdArray));
-            if (Config.LOG_TOFILE)ICLogger.logToFile("APILog"," skiped " + new String(cmdArray));
+            log("skipedBytes " + new String(cmdArray));
+            if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " skiped " + new String(cmdArray));
             return false;
-        }else{
-            log("sendBytes  "+new String(cmdArray));
-            if (Config.LOG_TOFILE) ICLogger.logToFile("APILog"," sentBytes  " + new String(cmdArray));
+        } else {
+            log("sendBytes  " + new String(cmdArray));
+            if (Config.LOG_TOFILE)
+                ICLogger.logToFile("APILog", " sentBytes  " + new String(cmdArray));
             //向RxSocket写数据
             //示例数据:IWAP00867155030001063#
             ByteBuffer byteBuffer = ByteBuffer.wrap(cmdArray);
@@ -233,20 +228,23 @@ public class NettyConnection implements Connection {
 
         return true;
     }
-  public int getTimeout() { return this.timeout; }
+
+    public int getTimeout() {
+        return this.timeout;
+    }
 
 
-  public void DeliverCMDMessageToSystem(String cmd,String msg){
-      if (this.listener!=null){
-          String[] msgArr=new String[]{cmd,msg};
-          StringMessage stringMessage=new StringMessage(msgArr);
-          stringMessage.refresh(msg);
-          this.listener.onReceive(stringMessage );
-      }
-  }
+    public void DeliverCMDMessageToSystem(String cmd, String msg) {
+        if (this.listener != null) {
+            String[] msgArr = new String[]{cmd, msg};
+            StringMessage stringMessage = new StringMessage(msgArr);
+            stringMessage.refresh(msg);
+            this.listener.onReceive(stringMessage);
+        }
+    }
 
-  private void initReadListener(){
-      //监听Socket的收包
+    private void initReadListener() {
+        //监听Socket的收包
 //      RxSocket.getInstance().read()
 //              .subscribeOn(Schedulers.newThread())
 //              .observeOn(AndroidSchedulers.mainThread())
@@ -268,68 +266,70 @@ public class NettyConnection implements Connection {
 //                          log("get Msg ()");
 //                      }
 //              );
-      RxSocket.getInstance().setSocketReadCallback(new RxSocket.SocketReadCallback() {
-          @Override
-          public void onRecvMsg(byte[] bytes) {
-
-              Message msg=new Message();
-              Bundle bdl=new Bundle();
-              bdl.putByteArray("RecvData",bytes);
-              msg.what=100;
-              msg.setData(bdl);
-              mHandler.sendMessage(msg);
-          }
-      });
-
-
-  }
-
-
-
-  private void init_connection_listener(){
-
-      //监听Socket的连接状态
-      RxSocket.getInstance().socketStatusListener()
-              .subscribeOn(Schedulers.newThread())
-              .observeOn(AndroidSchedulers.mainThread())
-              .subscribe(socketStatus -> {
-                  log("socketStatusListener socketStatus:" + socketStatus.name());
-                  if (socketStatus.name().equals("CONNECTED")){
-                      if (this.listener!=null){
-                          this.listener.onConnectionOpen();
-                      }
-                  }else if (socketStatus.name().equals("DIS_CONNECT") || socketStatus.name().equals("DIS_CONNECT_BY_SERVERSIDE")) {
-                      if (this.listener!=null){
-                          this.listener.onConnectionClose(socketStatus.name());
-                      }
-                      disconnectServer();
-                  }
-              });
-  }
-  public void open() {
-
-
-  }
-  
-  public void send(StringMessage msg) {
-
-      if(msg==null) {
-        ICLogger.i(" StringMessage is null skip send!");
-        return ;
-      }
-      sendMsg(msg.isFromCache());
-      ICLogger.logToFile("APILog","send "+msg.getIndex()+" "+msg.getDate()+msg.getTime()+" "+msg.cmd()+" "+msg.isFromCache());
-    //  ICLogger.i(paramStringMessage.isFromCache());
-
-  }
-  
-  public boolean sendBlocking(StringMessage paramStringMessage) {
-    ICLogger.i(paramStringMessage.isFromCache());
-      sendMsg(paramStringMessage.isFromCache());
-    return true;
+        RxSocket.getInstance().setSocketReadCallback(new RxSocket.SocketReadCallback() {
+            @Override
+            public void onRecvMsg(byte[] bytes) {
+
+                Message msg = new Message();
+                Bundle bdl = new Bundle();
+                bdl.putByteArray("RecvData", bytes);
+                msg.what = 100;
+                msg.setData(bdl);
+                mHandler.sendMessage(msg);
+            }
+        });
+
+
+    }
+
+
+    private void init_connection_listener() {
+
+        //监听Socket的连接状态
+        RxSocket.getInstance().socketStatusListener()
+                .subscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(socketStatus -> {
+                    log("socketStatusListener socketStatus:" + socketStatus.name());
+                    if (socketStatus.name().equals("CONNECTED")) {
+                        if (this.listener != null) {
+                            this.listener.onConnectionOpen();
+                        }
+                    } else if (socketStatus.name().equals("DIS_CONNECT") || socketStatus.name().equals("DIS_CONNECT_BY_SERVERSIDE")) {
+                        if (this.listener != null) {
+                            this.listener.onConnectionClose(socketStatus.name());
+                        }
+                        disconnectServer();
+                    }
+                });
+    }
+
+    public void open() {
+
+
+    }
+
+    public void send(StringMessage msg) {
+
+        if (msg == null) {
+            ICLogger.i(" StringMessage is null skip send!");
+            return;
+        }
+        sendMsg(msg.isFromCache());
+        ICLogger.logToFile("APILog", "send " + msg.getIndex() + " " + msg.getDate() + msg.getTime() + " " + msg.cmd() + " " + msg.isFromCache());
+        //  ICLogger.i(paramStringMessage.isFromCache());
+
+    }
+
+    public boolean sendBlocking(StringMessage paramStringMessage) {
+        ICLogger.i(paramStringMessage.isFromCache());
+        sendMsg(paramStringMessage.isFromCache());
+        return true;
+    }
+
+    public void setTimeout(int paramInt) {
+        this.timeout = paramInt;
     }
-  
-  public void setTimeout(int paramInt) { this.timeout = paramInt; }
 
 }
 
index 2a0767c..660951a 100644 (file)
@@ -1,53 +1,36 @@
 package com.enqualcomm.support.utils;
 
-import android.app.Notification;
 import android.app.NotificationManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.media.RingtoneManager;
-import android.net.Uri;
 import android.os.Handler;
-import android.os.Messenger;
+import android.os.HandlerThread;
 import android.os.PowerManager;
 import android.os.Vibrator;
-import android.support.v4.app.NotificationCompat;
-import android.view.Gravity;
-import android.view.MotionEvent;
-import android.view.View;
 import android.view.WindowManager;
 
-
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.CoreService;
-import com.enqualcomm.support.LocationClient;
 import com.enqualcomm.support.R;
-import com.enqualcomm.support.bean.EventLooperHandlerThread;
-import com.enqualcomm.support.bean.NotificationParam;
+import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.VoiceContent;
-import com.enqualcomm.support.service.Deliver;
-import com.ic.jni.ICJniUtils;
-import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.service.AudioService;
+import com.enqualcomm.support.service.Deliver;
 import com.enqualcomm.support.service.HeartRateManager;
 import com.ic.protocols.protocolAPIHelper;
 
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
-import static android.media.RingtoneManager.TYPE_NOTIFICATION;
 import static android.os.PowerManager.ACQUIRE_CAUSES_WAKEUP;
 import static android.os.PowerManager.SCREEN_DIM_WAKE_LOCK;
-import static com.enqualcomm.support.Constants.ACTION_CLOSE_UNREAD_MSG;
-import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;
 import static com.enqualcomm.support.Constants.ACTION_MESSAGE_SENT;
 import static com.enqualcomm.support.Constants.ACTION_PLAYTIME;
 import static com.enqualcomm.support.Constants.ACTION_REMOTE_CAMERA;
-import static com.enqualcomm.support.Constants.ACTION_SEND_EMEGENCY_LOCATION_START;
-import static com.enqualcomm.support.Constants.ACTION_SEND_SOS_MSG;
 import static com.enqualcomm.support.Constants.ACTION_SET_SIT_RANGE;
 import static com.enqualcomm.support.Constants.ACTION_SHUTDOWN;
 import static com.enqualcomm.support.Constants.ACTION_TEMP_RESULT;
@@ -58,489 +41,499 @@ import static com.enqualcomm.support.Constants.KEY_MESSAGE_URL;
 import static com.enqualcomm.support.Constants.KEY_TEMP_BODY;
 import static com.enqualcomm.support.Constants.KEY_TEMP_WRIST;
 import static com.enqualcomm.support.Constants.RESUME_ACTION;
-
 import static com.enqualcomm.support.bean.Content.CONTACT_CATEGORY_GROUP;
 import static com.enqualcomm.support.utils.TemperatureUtil.KEY_TEMP_BYPROTOCOL;
 import static com.enqualcomm.support.utils.TemperatureUtil.KEY_TEMP_OUT;
 
 
 public class ProcessReceiver extends BroadcastReceiver {
-  private static final int MICRO_CHAT = 2;
-  
-  private static int last_app_id;
-  
-  private static String last_message_name;
-  
-  private static CustomDialog mCustomDialog;
-  
-  private CustomNotification mCustomNotification;
-
-  private CustomDialog.Builder mDialog;
-
-  private CustomNotification.Builder mNotificationDialog;
-  
-  private NotificationManager mNotificationManager;
-  
-  private Vibrator vibrator;
-  
-  private float x1 = 0.0F;
-  
-  private float x2 = 0.0F;
-  
-  private float y1 = 0.0F;
-  
-  private float y2 = 0.0F;
-
-  private static Handler mHandler=new Handler(EventLooperHandlerThread.makeLooper(ProcessReceiver.class.getSimpleName()));
-  private void initMyDialog(final Context context, final Contact contact, int app_id,String msg,boolean needreply) {
-    String var4 = contact==null?"SMS":contact.name;
-
-    if (this.mDialog == null) {
-      this.mDialog = new CustomDialog.Builder(context);
-    }
+    private static final int MICRO_CHAT = 2;
 
-    StringBuilder var5 = new StringBuilder();
-    var5.append("===mCustomDialog ")
-    .append(mCustomDialog)
-    .append(" , appid ").append(app_id);
+    private static int last_app_id;
 
-    ICLogger.i(var5.toString());
-    if (mCustomDialog != null && mCustomDialog.isShowing() && last_message_name != null && var4 != null && last_message_name.equals(var4) && last_app_id == app_id) {
-      mCustomDialog.dismiss();
-    }
+    private static String last_message_name;
 
-    last_message_name = var4;
-    last_app_id = app_id;
-    CustomDialog.Builder tmpDialog;
-    if (app_id == 1) {
-      tmpDialog = this.mDialog.setTitle(context.getString(R.string.setting_title)).setApp(1);
-      StringBuilder var6 = new StringBuilder();
-      var6.append(context.getString(R.string.voiceMessage));
-      var6.append("  ");
-      var6.append(var4);
-      var6.append(context.getString(R.string.voiceMessageEnd));
-      mCustomDialog = tmpDialog.setMessage(var6.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
-        public void onClick(DialogInterface var1x, int var2x) {
-          var1x.dismiss();
-          ComponentName var3 = new ComponentName("com.enqualcomm.imessage", "com.enqualcomm.imessage.ui.chat.ChatActivity_");
-          Intent var5 = new Intent("android.intent.action.MAIN");
-          var5.putExtra("ACTIVITY_TYPE", 2);
-          var5.putExtra("contact", contact);
-          var5.addCategory("android.intent.category.DEFAULT");
-          var5.addFlags(FLAG_ACTIVITY_NEW_TASK);
-          var5.setComponent(var3);
-          VibrateUtil.getInstance(context).VibrateOn(false);
-          try {
-            context.startActivity(var5);
-          } catch (Exception e) {
-            e.printStackTrace();
-            ICLogger.e(e.getMessage(),e);
-          }
+    private static CustomDialog mCustomDialog;
 
+    private CustomNotification mCustomNotification;
+
+    private CustomDialog.Builder mDialog;
+
+    private CustomNotification.Builder mNotificationDialog;
+
+    private NotificationManager mNotificationManager;
+
+    private Vibrator vibrator;
+
+    private float x1 = 0.0F;
+
+    private float x2 = 0.0F;
+
+    private float y1 = 0.0F;
+
+    private float y2 = 0.0F;
+
+    public ProcessReceiver() {
+        if (mHandler == null) {
+            HandlerThread handlerThread = new HandlerThread("ic:process-receiver-handler-thread");
+            handlerThread.start();
+            mHandler = new Handler(handlerThread.getLooper());
         }
-      }).setNegativeButton(context.getString(R.string.cancel), new DialogInterface.OnClickListener() {
-        public void onClick(DialogInterface var1, int var2) {
-          var1.dismiss();
-          VibrateUtil.getInstance(context).VibrateOn(false);
-        }
-      }).create();
-      mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
-      mCustomDialog.show();
-    } else if (app_id == 2) {
-      tmpDialog = this.mDialog.setTitle(context.getString(R.string.hht_misscall_call)).setApp(app_id);
-      StringBuilder var7 = new StringBuilder();
-      var7.append(context.getString(R.string.hht_call_start));
-      var7.append(var4);
-      var7.append(context.getString(R.string.hht_call_end));
-      mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
-        public void onClick(DialogInterface var1, int var2) {
-          var1.dismiss();
-          VibrateUtil.getInstance(context).VibrateOn(false);
-        }
-      }).create();
-      mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
-      mCustomDialog.show();
-    }else if (app_id ==3){
-      tmpDialog = this.mDialog.setTitle(context.getString(R.string.sms_title)).setApp(1);
-      StringBuilder var7 = new StringBuilder();
-      var7.append(context.getString(R.string.sms_notify));
-      mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
-        public void onClick(DialogInterface var1, int var2) {
-          var1.dismiss();
-          ComponentName var3 = new ComponentName("com.zmapp.sms", "com.zmapp.sms.MainActivity");
-          Intent var5 = new Intent("android.intent.action.MAIN");
-          var5.addCategory("android.intent.category.DEFAULT");
-          var5.addFlags(FLAG_ACTIVITY_NEW_TASK);
-          var5.setComponent(var3);
-          VibrateUtil.getInstance(context).VibrateOn(false);
-          try {
-            context.startActivity(var5);
-          } catch (Exception e) {
-            e.printStackTrace();
-            ICLogger.e(e.getMessage(),e);
-          }
+    }
+
+    private static Handler mHandler = null;
+
+    private void initMyDialog(final Context context, final Contact contact, int app_id, String msg, boolean needreply) {
+        String var4 = contact == null ? "SMS" : contact.name;
+
+        if (this.mDialog == null) {
+            this.mDialog = new CustomDialog.Builder(context);
         }
-      }).setNegativeButton(context.getString(R.string.cancel), new DialogInterface.OnClickListener() {
-        public void onClick(DialogInterface var1, int var2) {
-          var1.dismiss();
-          VibrateUtil.getInstance(context).VibrateOn(false);
+
+        StringBuilder var5 = new StringBuilder();
+        var5.append("===mCustomDialog ")
+                .append(mCustomDialog)
+                .append(" , appid ").append(app_id);
+
+        ICLogger.i(var5.toString());
+        if (mCustomDialog != null && mCustomDialog.isShowing() && last_message_name != null && var4 != null && last_message_name.equals(var4) && last_app_id == app_id) {
+            mCustomDialog.dismiss();
         }
-      }).create();
-      mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
-      mCustomDialog.show();
-    }else if (app_id ==4) {
-      tmpDialog = this.mDialog.setTitle("WEB"+context.getString(R.string.sms_title)).setApp(1);
-      StringBuilder var7 = new StringBuilder();
-      var7.append(msg);
-
-      if (needreply) {
-        mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
-          public void onClick(DialogInterface var1, int var2) {
-            var1.dismiss();
-            VibrateUtil.getInstance(context).VibrateOn(false);
-            if (CoreService.getInstance() != null) {
-              Runtime runtime = CoreService.getInstance().getRuntime();
-              if (Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN")) {
-                runtime.setAlarmType(Runtime.AlarmType.ALARM_MSGREAD);
-                Config.setLastUnReadMessage(CoreService.getInstance(), "");
-                Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-              } else {
-                CoreService.getInstance().getConnection().send(protocolAPIHelper.getPushTxtReadFlagToSrvMSG(runtime));
-              }
-            }
-          }
-        }).create();
-      }else{
-        mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
-          public void onClick(DialogInterface var1, int var2) {
-            var1.dismiss();
-            VibrateUtil.getInstance(context).VibrateOn(false);
-          }
-        }).create();
-      }
-      mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
-      mCustomDialog.show();
-    } else if (app_id ==5) {
-    tmpDialog = this.mDialog.setTitle(context.getString(R.string.findDev)).setApp(1);
-    StringBuilder var7 = new StringBuilder();
-    var7.append(msg);
-    mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
-      public void onClick(DialogInterface var1, int var2) {
-        var1.dismiss();
-        VibrateUtil.getInstance(context).VibrateOn(false);
-        stopmediaplayer();
-      }
-    }).create();
-    mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
-    mCustomDialog.show();
-    }else if (app_id ==6) {
-      tmpDialog = this.mDialog.setTitle(context.getString(R.string.notification_title)).setApp(1);
-      StringBuilder var7 = new StringBuilder();
-      var7.append(msg);
-      mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
-        public void onClick(DialogInterface var1, int var2) {
-          var1.dismiss();
-          VibrateUtil.getInstance(context).VibrateOn(false);
-          stopmediaplayer();
-
-          if(msg.contains("Take Photo")) {
-            String packagename = "com.eqc.camera";
-            String activityName = "com.eqc.camera.TakePictureActivity";
-            if (Util.installed(context, "com.ic.camera")) {
-              packagename = "com.ic.camera";
-              activityName = "com.ic.camera.MainActivity";
-            }
-            ComponentName var3 = new ComponentName(packagename, activityName);
-            Intent var5 = new Intent("android.intent.action.MAIN");
-            var5.addCategory("android.intent.category.DEFAULT");
-            var5.addFlags(FLAG_ACTIVITY_NEW_TASK);
-            var5.setComponent(var3);
-            try {
-              context.startActivity(var5);
-            } catch (Exception e) {
-              e.printStackTrace();
-              ICLogger.e(e.getMessage(),e);
+
+        last_message_name = var4;
+        last_app_id = app_id;
+        CustomDialog.Builder tmpDialog;
+        if (app_id == 1) {
+            tmpDialog = this.mDialog.setTitle(context.getString(R.string.setting_title)).setApp(1);
+            StringBuilder var6 = new StringBuilder();
+            var6.append(context.getString(R.string.voiceMessage));
+            var6.append("  ");
+            var6.append(var4);
+            var6.append(context.getString(R.string.voiceMessageEnd));
+            mCustomDialog = tmpDialog.setMessage(var6.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface var1x, int var2x) {
+                    var1x.dismiss();
+                    ComponentName var3 = new ComponentName("com.enqualcomm.imessage", "com.enqualcomm.imessage.ui.chat.ChatActivity_");
+                    Intent var5 = new Intent("android.intent.action.MAIN");
+                    var5.putExtra("ACTIVITY_TYPE", 2);
+                    var5.putExtra("contact", contact);
+                    var5.addCategory("android.intent.category.DEFAULT");
+                    var5.addFlags(FLAG_ACTIVITY_NEW_TASK);
+                    var5.setComponent(var3);
+                    VibrateUtil.getInstance(context).VibrateOn(false);
+                    try {
+                        context.startActivity(var5);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        ICLogger.e(e.getMessage(), e);
+                    }
+
+                }
+            }).setNegativeButton(context.getString(R.string.cancel), new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface var1, int var2) {
+                    var1.dismiss();
+                    VibrateUtil.getInstance(context).VibrateOn(false);
+                }
+            }).create();
+            mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
+            mCustomDialog.show();
+        } else if (app_id == 2) {
+            tmpDialog = this.mDialog.setTitle(context.getString(R.string.hht_misscall_call)).setApp(app_id);
+            StringBuilder var7 = new StringBuilder();
+            var7.append(context.getString(R.string.hht_call_start));
+            var7.append(var4);
+            var7.append(context.getString(R.string.hht_call_end));
+            mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface var1, int var2) {
+                    var1.dismiss();
+                    VibrateUtil.getInstance(context).VibrateOn(false);
+                }
+            }).create();
+            mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
+            mCustomDialog.show();
+        } else if (app_id == 3) {
+            tmpDialog = this.mDialog.setTitle(context.getString(R.string.sms_title)).setApp(1);
+            StringBuilder var7 = new StringBuilder();
+            var7.append(context.getString(R.string.sms_notify));
+            mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface var1, int var2) {
+                    var1.dismiss();
+                    ComponentName var3 = new ComponentName("com.zmapp.sms", "com.zmapp.sms.MainActivity");
+                    Intent var5 = new Intent("android.intent.action.MAIN");
+                    var5.addCategory("android.intent.category.DEFAULT");
+                    var5.addFlags(FLAG_ACTIVITY_NEW_TASK);
+                    var5.setComponent(var3);
+                    VibrateUtil.getInstance(context).VibrateOn(false);
+                    try {
+                        context.startActivity(var5);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        ICLogger.e(e.getMessage(), e);
+                    }
+                }
+            }).setNegativeButton(context.getString(R.string.cancel), new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface var1, int var2) {
+                    var1.dismiss();
+                    VibrateUtil.getInstance(context).VibrateOn(false);
+                }
+            }).create();
+            mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
+            mCustomDialog.show();
+        } else if (app_id == 4) {
+            tmpDialog = this.mDialog.setTitle("WEB" + context.getString(R.string.sms_title)).setApp(1);
+            StringBuilder var7 = new StringBuilder();
+            var7.append(msg);
+
+            if (needreply) {
+                mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface var1, int var2) {
+                        var1.dismiss();
+                        VibrateUtil.getInstance(context).VibrateOn(false);
+                        if (CoreService.getInstance() != null) {
+                            Runtime runtime = CoreService.getInstance().getRuntime();
+                            if (Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN")) {
+                                runtime.setAlarmType(Runtime.AlarmType.ALARM_MSGREAD);
+                                Config.setLastUnReadMessage(CoreService.getInstance(), "");
+                                Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
+                            } else {
+                                CoreService.getInstance().getConnection().send(protocolAPIHelper.getPushTxtReadFlagToSrvMSG(runtime));
+                            }
+                        }
+                    }
+                }).create();
+            } else {
+                mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface var1, int var2) {
+                        var1.dismiss();
+                        VibrateUtil.getInstance(context).VibrateOn(false);
+                    }
+                }).create();
             }
-          }
+            mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
+            mCustomDialog.show();
+        } else if (app_id == 5) {
+            tmpDialog = this.mDialog.setTitle(context.getString(R.string.findDev)).setApp(1);
+            StringBuilder var7 = new StringBuilder();
+            var7.append(msg);
+            mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface var1, int var2) {
+                    var1.dismiss();
+                    VibrateUtil.getInstance(context).VibrateOn(false);
+                    stopmediaplayer();
+                }
+            }).create();
+            mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
+            mCustomDialog.show();
+        } else if (app_id == 6) {
+            tmpDialog = this.mDialog.setTitle(context.getString(R.string.notification_title)).setApp(1);
+            StringBuilder var7 = new StringBuilder();
+            var7.append(msg);
+            mCustomDialog = tmpDialog.setMessage(var7.toString()).setPositiveButton(context.getString(R.string.ok), new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface var1, int var2) {
+                    var1.dismiss();
+                    VibrateUtil.getInstance(context).VibrateOn(false);
+                    stopmediaplayer();
+
+                    if (msg.contains("Take Photo")) {
+                        String packagename = "com.eqc.camera";
+                        String activityName = "com.eqc.camera.TakePictureActivity";
+                        if (Util.installed(context, "com.ic.camera")) {
+                            packagename = "com.ic.camera";
+                            activityName = "com.ic.camera.MainActivity";
+                        }
+                        ComponentName var3 = new ComponentName(packagename, activityName);
+                        Intent var5 = new Intent("android.intent.action.MAIN");
+                        var5.addCategory("android.intent.category.DEFAULT");
+                        var5.addFlags(FLAG_ACTIVITY_NEW_TASK);
+                        var5.setComponent(var3);
+                        try {
+                            context.startActivity(var5);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            ICLogger.e(e.getMessage(), e);
+                        }
+                    }
+                }
+            }).create();
+            mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
+            mCustomDialog.show();
         }
-      }).create();
-      mCustomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
-      mCustomDialog.show();
     }
-  }
-  private void playFindDevVoice(Context context){
-
-    AudioService.getInstance().play(context.getAssets(), "Campus_Life.ogg");
-
-  }
-  private void stopmediaplayer(){
-   AudioService.getInstance().stop();
-  }
-  private void playNotificationVoice(Context paramContext) {
-    AudioService.getInstance().play(paramContext.getAssets(), "ring_msg.mp3");
-  }
-
-  private void playshutdownsound(Context paramContext) {
-    AudioService.getInstance().play(paramContext.getAssets(), "shutdownsound.mp3");
-  }
-
-
-  private void screenOn(Context paramContext) {
-    final PowerManager.WakeLock wakelock = ((PowerManager)paramContext.getSystemService(Context.POWER_SERVICE)).newWakeLock(ACQUIRE_CAUSES_WAKEUP| SCREEN_DIM_WAKE_LOCK, ProcessReceiver.class.getSimpleName());
-    wakelock.acquire();
-    mHandler.postDelayed(new Runnable() {
-      @Override
-      public void run() {
-        wakelock.release();
-      }
-    },5000);
-  }
-
-  @Override
-  public void onReceive(Context paramContext, Intent paramIntent) {
-
-    boolean isSilence;
-    Contact contact;
-    String str = paramIntent.getAction();
-    StringBuilder stringBuilder = new StringBuilder();
-    stringBuilder.append("action==");
-    stringBuilder.append(str);
-    ICLogger.i(stringBuilder.toString());
-
-    if (CoreService.getInstance()==null)
-    {
-      ICLogger.i("CoreService is null skip deal with this message! "+str);
-      paramContext.startService(new Intent(paramContext,CoreService.class));// protocol service
-      return ;
+
+    private void playFindDevVoice(Context context) {
+
+        AudioService.getInstance().play(context.getAssets(), "Campus_Life.ogg");
+
     }
-    if (RESUME_ACTION.equals(str)) {
-      SharPreferenceUtil.setPrefBoolean(paramContext, "key_is_resume", paramIntent.getBooleanExtra("is_resume", false));
-      return;
-    }else if (ACTION_MESSAGE_SENT.equals(str)) {
-
-      String msgType=paramIntent.getStringExtra(KEY_MESSAGE_TYPE);
-      String msgFrom=paramIntent.getStringExtra(KEY_MESSAGE_FROM);
-      String msgUrl=paramIntent.getStringExtra(KEY_MESSAGE_URL);
-    ICLogger.i("receive msg to send type="+msgType+", msg from = "+msgFrom+", msgUrl"+msgUrl);
-    if (msgFrom==null) msgFrom="123";
-      /**
-       *        * 1 语音——       1.监听语音      *   2.SOS语音      *      3.扩展
-       *          * 2 图片——     1.签到图片      *   2.指令图片      *   3.设备图片      *   4.扩展
-       */
-      if (msgType.equals("voice"))
-      {
-        //创建voiceConent并添加到数据
-        final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl,1,3);
-
-        // 把voiceContent拆解成1024的分包
-        Util.parseToVoicePacketSent(voiceContent);
-        //trigger 分包发送
-        if (CoreService.getInstance().getConnection()!=null)
-          CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
-      }else if (msgType.equals("pic")){
-        //创建voiceConent并添加到数据
-        final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl,2,3);
-
-        // 把voiceContent拆解成1024的分包
-        Util.parseToVoicePacketSent(voiceContent);
-        //trigger 分包发送
-        if (CoreService.getInstance().getConnection()!=null) {
-
-          //h88专用功能,拍照时检查体温心率
-          if(Util.getSystemProperties("persist.sys.do_check_condition","false").equals("true")) {
-            //开启测温
-            if(CoreService.getInstance().getRuntime().check_stat_do_temp_test())
-                    TemperatureUtil.DoTempTest();
-
-            Util.mSleep(5000);
-            //开启测量PPG
-            if(CoreService.getInstance().getRuntime().check_stat_do_ppg_test())
-              HeartRateManager.triggerPPGtest();
-          }
-          //开启发送图片
-          CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
-        }
-      }
-    }else if (ACTION_SHUTDOWN.equals(str)) {
 
-      playshutdownsound(paramContext);
+    private void stopmediaplayer() {
+        AudioService.getInstance().stop();
+    }
 
-      Util.shutdown();
-      return;
-    }else if (ACTION_PLAYTIME.equals(str)) {
-        LedUtil.setBlueLedOn(true);
+    private void playNotificationVoice(Context paramContext) {
+        AudioService.getInstance().play(paramContext.getAssets(), "ring_msg.mp3");
+    }
+
+    private void playshutdownsound(Context paramContext) {
+        AudioService.getInstance().play(paramContext.getAssets(), "shutdownsound.mp3");
+    }
+
+
+    private void screenOn(Context paramContext) {
+        final PowerManager.WakeLock wakelock = ((PowerManager) paramContext.getSystemService(Context.POWER_SERVICE)).newWakeLock(ACQUIRE_CAUSES_WAKEUP | SCREEN_DIM_WAKE_LOCK, ProcessReceiver.class.getSimpleName());
+        wakelock.acquire();
         mHandler.postDelayed(new Runnable() {
             @Override
             public void run() {
-                LedUtil.setBlueLedOn(false);
+                wakelock.release();
             }
-        },2000L);
-        return;
-    }else if (ACTION_REMOTE_CAMERA.equals(str)) {
-      if (paramIntent.hasExtra("remote_number")){
-        //接收拍照命令,执行拍照
-        String str1 = paramIntent.getStringExtra("remote_number");
-        mHandler.post(new Runnable() {
-          @Override
-          public void run() {
-            (new CameraUtil(paramContext)).getPictur(str1);
-          }
-        });
-      }else{
-        //接收到拍照完毕命令,发送照片
-        String msgFrom=paramIntent.getStringExtra("number");
-        String msgUrl=paramIntent.getStringExtra("filepath");
-        ICLogger.i("receive taken photo to send "+msgUrl);
-        //创建voiceConent并添加到数据
-        final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl,2,2);
-
-
-        // 把voiceContent拆解成1024的分包
-        Util.parseToVoicePacketSent(voiceContent);
-        //trigger 分包发送
-        if (CoreService.getInstance().getConnection()!=null) {
-
-          //h88专用功能,拍照后检测体温和心率
-          if(Util.getSystemProperties("persist.sys.do_check_condition","false").equals("true")) {
-            //开启测温
-            if(CoreService.getInstance().getRuntime().check_stat_do_temp_test())
-              TemperatureUtil.DoTempTest();
-
-            Util.mSleep(500);
-            //开启测量PPG
-            if(CoreService.getInstance().getRuntime().check_stat_do_ppg_test())
-              HeartRateManager.triggerPPGtest();
-          }
-          //开启发送照片
-          CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
+        }, 5000);
+    }
+
+    @Override
+    public void onReceive(Context paramContext, Intent paramIntent) {
+
+        boolean isSilence;
+        Contact contact;
+        String str = paramIntent.getAction();
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append("action==");
+        stringBuilder.append(str);
+        ICLogger.i(stringBuilder.toString());
+
+        if (CoreService.getInstance() == null) {
+            ICLogger.i("CoreService is null skip deal with this message! " + str);
+            paramContext.startService(new Intent(paramContext, CoreService.class));// protocol service
+            return;
         }
+        if (RESUME_ACTION.equals(str)) {
+            SharPreferenceUtil.setPrefBoolean(paramContext, "key_is_resume", paramIntent.getBooleanExtra("is_resume", false));
+            return;
+        } else if (ACTION_MESSAGE_SENT.equals(str)) {
+
+            String msgType = paramIntent.getStringExtra(KEY_MESSAGE_TYPE);
+            String msgFrom = paramIntent.getStringExtra(KEY_MESSAGE_FROM);
+            String msgUrl = paramIntent.getStringExtra(KEY_MESSAGE_URL);
+            ICLogger.i("receive msg to send type=" + msgType + ", msg from = " + msgFrom + ", msgUrl" + msgUrl);
+            if (msgFrom == null) msgFrom = "123";
+            /**
+             *        * 1 语音—— 1.监听语音      *   2.SOS语音      *      3.扩展
+             *          * 2 图片——       1.签到图片      *   2.指令图片      *   3.设备图片      *   4.扩展
+             */
+            if (msgType.equals("voice")) {
+                //创建voiceConent并添加到数据
+                final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl, 1, 3);
+
+                // 把voiceContent拆解成1024的分包
+                Util.parseToVoicePacketSent(voiceContent);
+                //trigger 分包发送
+                if (CoreService.getInstance().getConnection() != null)
+                    CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
+            } else if (msgType.equals("pic")) {
+                //创建voiceConent并添加到数据
+                final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl, 2, 3);
+
+                // 把voiceContent拆解成1024的分包
+                Util.parseToVoicePacketSent(voiceContent);
+                //trigger 分包发送
+                if (CoreService.getInstance().getConnection() != null) {
+
+                    //h88专用功能,拍照时检查体温心率
+                    if (Util.getSystemProperties("persist.sys.do_check_condition", "false").equals("true")) {
+                        //开启测温
+                        if (CoreService.getInstance().getRuntime().check_stat_do_temp_test())
+                            TemperatureUtil.DoTempTest();
+
+                        Util.mSleep(5000);
+                        //开启测量PPG
+                        if (CoreService.getInstance().getRuntime().check_stat_do_ppg_test())
+                            HeartRateManager.triggerPPGtest();
+                    }
+                    //开启发送图片
+                    CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
+                }
+            }
+        } else if (ACTION_SHUTDOWN.equals(str)) {
+
+            playshutdownsound(paramContext);
+
+            Util.shutdown();
+            return;
+        } else if (ACTION_PLAYTIME.equals(str)) {
+            LedUtil.setBlueLedOn(true);
+            mHandler.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    LedUtil.setBlueLedOn(false);
+                }
+            }, 2000L);
+            return;
+        } else if (ACTION_REMOTE_CAMERA.equals(str)) {
+            if (paramIntent.hasExtra("remote_number")) {
+                //接收拍照命令,执行拍照
+                String str1 = paramIntent.getStringExtra("remote_number");
+                mHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        (new CameraUtil(paramContext)).getPictur(str1);
+                    }
+                });
+            } else {
+                //接收到拍照完毕命令,发送照片
+                String msgFrom = paramIntent.getStringExtra("number");
+                String msgUrl = paramIntent.getStringExtra("filepath");
+                ICLogger.i("receive taken photo to send " + msgUrl);
+                //创建voiceConent并添加到数据
+                final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl, 2, 2);
+
+
+                // 把voiceContent拆解成1024的分包
+                Util.parseToVoicePacketSent(voiceContent);
+                //trigger 分包发送
+                if (CoreService.getInstance().getConnection() != null) {
+
+                    //h88专用功能,拍照后检测体温和心率
+                    if (Util.getSystemProperties("persist.sys.do_check_condition", "false").equals("true")) {
+                        //开启测温
+                        if (CoreService.getInstance().getRuntime().check_stat_do_temp_test())
+                            TemperatureUtil.DoTempTest();
+
+                        Util.mSleep(500);
+                        //开启测量PPG
+                        if (CoreService.getInstance().getRuntime().check_stat_do_ppg_test())
+                            HeartRateManager.triggerPPGtest();
+                    }
+                    //开启发送照片
+                    CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
+                }
 
-      }
+            }
 
 
-      return;
+            return;
 
-    }else  if (DIALOG_ACTION.equals(str)) {
-        if (paramIntent.hasExtra("contact")) {
-          contact = (Contact) paramIntent.getParcelableExtra("contact");
-          SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
-          isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
-          if (contact != null && !isSilence) {
-            if (!DeviceInfoUtil.isTopActivity(paramContext)) {
-              this.initMyDialog(paramContext, contact, 1,"",false);
-              this.playNotificationVoice(paramContext);
-              VibrateUtil.getInstance(paramContext).VibrateOn(true);
-            }
+        } else if (DIALOG_ACTION.equals(str)) {
+            if (paramIntent.hasExtra("contact")) {
+                contact = (Contact) paramIntent.getParcelableExtra("contact");
+                SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
+                isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
+                if (contact != null && !isSilence) {
+                    if (!DeviceInfoUtil.isTopActivity(paramContext)) {
+                        this.initMyDialog(paramContext, contact, 1, "", false);
+                        this.playNotificationVoice(paramContext);
+                        VibrateUtil.getInstance(paramContext).VibrateOn(true);
+                    }
 
-            this.screenOn(paramContext);
-          }
-        }else if (paramIntent.hasExtra("sms")) {
-          String sms = paramIntent.getStringExtra("sms");
-          SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
-          isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
-          if (sms != null && !isSilence) {
-            //if (!DeviceInfoUtil.isTopActivity(paramContext)) {
-              this.initMyDialog(paramContext, null, 3,sms,false);
-              this.playNotificationVoice(paramContext);
-              VibrateUtil.getInstance(paramContext).VibrateOn(true);
-            //}
-
-            this.screenOn(paramContext);
-          }
-        }else if (paramIntent.hasExtra("pushtxt")) {
-            String sms = paramIntent.getStringExtra("pushtxt");
-            boolean needreply=false;
-            if (paramIntent.hasExtra("needreply")){
-              needreply= paramIntent.getBooleanExtra("needreply",false);
-            }
-            SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
-            isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
-            if (sms != null && !isSilence) {
-                if (!DeviceInfoUtil.isTopActivity(paramContext)) {
-                    this.initMyDialog(paramContext, null, 4, sms,needreply);
+                    this.screenOn(paramContext);
+                }
+            } else if (paramIntent.hasExtra("sms")) {
+                String sms = paramIntent.getStringExtra("sms");
+                SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
+                isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
+                if (sms != null && !isSilence) {
+                    //if (!DeviceInfoUtil.isTopActivity(paramContext)) {
+                    this.initMyDialog(paramContext, null, 3, sms, false);
                     this.playNotificationVoice(paramContext);
                     VibrateUtil.getInstance(paramContext).VibrateOn(true);
+                    //}
+
+                    this.screenOn(paramContext);
+                }
+            } else if (paramIntent.hasExtra("pushtxt")) {
+                String sms = paramIntent.getStringExtra("pushtxt");
+                boolean needreply = false;
+                if (paramIntent.hasExtra("needreply")) {
+                    needreply = paramIntent.getBooleanExtra("needreply", false);
+                }
+                SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
+                isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
+                if (sms != null && !isSilence) {
+                    if (!DeviceInfoUtil.isTopActivity(paramContext)) {
+                        this.initMyDialog(paramContext, null, 4, sms, needreply);
+                        this.playNotificationVoice(paramContext);
+                        VibrateUtil.getInstance(paramContext).VibrateOn(true);
+                    }
+
+                    this.screenOn(paramContext);
+                }
+            } else if (paramIntent.hasExtra("findDev")) {
+                String finddevtxt = paramIntent.getStringExtra("findDev");
+                SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
+                isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
+                if (finddevtxt != null && !isSilence) {
+                    this.initMyDialog(paramContext, null, 5, finddevtxt, false);
+                    this.playFindDevVoice(paramContext);
+                    VibrateUtil.getInstance(paramContext).VibrateOn(true);
+
+                    this.screenOn(paramContext);
                 }
+            } else if (paramIntent.hasExtra("takephoto")) {
+                String takephoto = paramIntent.getStringExtra("takephoto");
+                SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
+                isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
+                if (takephoto != null && !isSilence) {
 
-                this.screenOn(paramContext);
+                    this.initMyDialog(paramContext, null, 6, takephoto, false);
+                    this.playNotificationVoice(paramContext);
+                    VibrateUtil.getInstance(paramContext).VibrateOn(true);
+
+                    this.screenOn(paramContext);
+                }
             }
-        }else if (paramIntent.hasExtra("findDev")) {
-          String finddevtxt = paramIntent.getStringExtra("findDev");
-          SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
-          isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
-          if (finddevtxt != null && !isSilence) {
-              this.initMyDialog(paramContext, null, 5,finddevtxt,false);
-              this.playFindDevVoice(paramContext);
-              VibrateUtil.getInstance(paramContext).VibrateOn(true);
-
-            this.screenOn(paramContext);
-          }
-        }else if (paramIntent.hasExtra("takephoto")) {
-          String takephoto = paramIntent.getStringExtra("takephoto");
-          SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);
-          isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);
-          if (takephoto != null && !isSilence) {
-
-              this.initMyDialog(paramContext, null, 6,takephoto,false);
-              this.playNotificationVoice(paramContext);
-              VibrateUtil.getInstance(paramContext).VibrateOn(true);
-
-            this.screenOn(paramContext);
-          }
-        }
 
-      }else if (ACTION_TEMP_RESULT.equals(str)) {
-        double wrist_temp = paramIntent.getDoubleExtra(KEY_TEMP_WRIST, 0.0f);
-      double body_temp = paramIntent.getDoubleExtra(KEY_TEMP_BODY, 0.0f);
-      double tempOut = paramIntent.getDoubleExtra(KEY_TEMP_OUT, 0.0f);
-      boolean byprotocol=paramIntent.getBooleanExtra(KEY_TEMP_BYPROTOCOL,false);
-      if(byprotocol==false) {
-        if (Config.disableWristTemp) {
-          //ic68
-          body_temp=wrist_temp;
-        }
-        ICLogger.i("Received Temperature wrist "+wrist_temp+" body "+body_temp);
-        StringMessage temperatureMsg = protocolAPIHelper.getTemperatureMSG(wrist_temp, body_temp, tempOut, null);
-        if (temperatureMsg != null) {
-          ICLogger.i("temp 发送体温测量值 " + temperatureMsg.isFromCache());
-        }
-        Deliver.sendLocationMSG(temperatureMsg);
-      }else{
-        ICLogger.i("Skip protocol Temperature wrist "+wrist_temp+" body "+body_temp);
-
-      }
-    }else if (ACTION_SET_SIT_RANGE.equals(str)) {
-        if (paramIntent.hasExtra( Constants.KEY_SIT_RANGE)){
-            int sitrange=paramIntent.getIntExtra(Constants.KEY_SIT_RANGE,0);
-            Config.setKeepSitRangeInMinutes(paramContext,sitrange);
-            ICLogger.i("set KeepSitRange int "+sitrange+" minutes!");
-            ICLogger.i("则重置 lastCheckSitTime 以及 lastSitCheckStepCount");
-            Runtime.lastSitCheckStepCount=CoreService.getInstance().getRuntime().getTotalStepCount();
-            Runtime.lastSitCheckTiimeyyyyMMddHHmmss=TimeUtil.getSystemTime3();
-        }
-    } else {
-      //如果来电了,还有未读的消息,干脆关掉,防止影响接电话。
-        if (mCustomDialog != null && mCustomDialog.isShowing()) {
-          mCustomDialog.dismiss();
-        }
+        } else if (ACTION_TEMP_RESULT.equals(str)) {
+            double wrist_temp = paramIntent.getDoubleExtra(KEY_TEMP_WRIST, 0.0f);
+            double body_temp = paramIntent.getDoubleExtra(KEY_TEMP_BODY, 0.0f);
+            double tempOut = paramIntent.getDoubleExtra(KEY_TEMP_OUT, 0.0f);
+            boolean byprotocol = paramIntent.getBooleanExtra(KEY_TEMP_BYPROTOCOL, false);
+            if (byprotocol == false) {
+                if (Config.disableWristTemp) {
+                    //ic68
+                    body_temp = wrist_temp;
+                }
+                ICLogger.i("Received Temperature wrist " + wrist_temp + " body " + body_temp);
+                StringMessage temperatureMsg = protocolAPIHelper.getTemperatureMSG(wrist_temp, body_temp, tempOut, null);
+                if (temperatureMsg != null) {
+                    ICLogger.i("temp 发送体温测量值 " + temperatureMsg.isFromCache());
+                }
+                Deliver.sendLocationMSG(temperatureMsg);
+            } else {
+                ICLogger.i("Skip protocol Temperature wrist " + wrist_temp + " body " + body_temp);
 
-        if (this.mCustomNotification != null && this.mCustomNotification.isShowing()) {
-          this.mCustomNotification.dismiss();
+            }
+        } else if (ACTION_SET_SIT_RANGE.equals(str)) {
+            if (paramIntent.hasExtra(Constants.KEY_SIT_RANGE)) {
+                int sitrange = paramIntent.getIntExtra(Constants.KEY_SIT_RANGE, 0);
+                Config.setKeepSitRangeInMinutes(paramContext, sitrange);
+                ICLogger.i("set KeepSitRange int " + sitrange + " minutes!");
+                ICLogger.i("则重置 lastCheckSitTime 以及 lastSitCheckStepCount");
+                Runtime.lastSitCheckStepCount = CoreService.getInstance().getRuntime().getTotalStepCount();
+                Runtime.lastSitCheckTiimeyyyyMMddHHmmss = TimeUtil.getSystemTime3();
+            }
+        } else {
+            //如果来电了,还有未读的消息,干脆关掉,防止影响接电话。
+            if (mCustomDialog != null && mCustomDialog.isShowing()) {
+                mCustomDialog.dismiss();
+            }
+
+            if (this.mCustomNotification != null && this.mCustomNotification.isShowing()) {
+                this.mCustomNotification.dismiss();
+            }
         }
-      }
-  }
-  
-  public void sendStheartRateBroadcast(Context paramContext, String actionStr, int paramInt) {
-    Intent intent = new Intent();
-    intent.setAction(actionStr);
-    intent.putExtra("stheartRateType", paramInt);
-    paramContext.sendBroadcast(intent);
-  }
-  public void sendSOSBroadcast(Context paramContext, String actionStr) {
-    Intent intent = new Intent();
-    intent.setAction(actionStr);
-    paramContext.sendBroadcast(intent);
-  }
+    }
+
+    public void sendStheartRateBroadcast(Context paramContext, String actionStr, int paramInt) {
+        Intent intent = new Intent();
+        intent.setAction(actionStr);
+        intent.putExtra("stheartRateType", paramInt);
+        paramContext.sendBroadcast(intent);
+    }
+
+    public void sendSOSBroadcast(Context paramContext, String actionStr) {
+        Intent intent = new Intent();
+        intent.setAction(actionStr);
+        paramContext.sendBroadcast(intent);
+    }
 
 
 }
index 9de1055..01494c3 100644 (file)
@@ -6,6 +6,7 @@ import android.content.Intent;
 import android.net.Uri;
 import android.os.Environment;
 import android.os.Handler;
+import android.os.HandlerThread;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.Constants;
@@ -14,7 +15,6 @@ import com.enqualcomm.support.R;
 import com.enqualcomm.support.bean.Alarm;
 import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.Content;
-import com.enqualcomm.support.bean.EventLooperHandlerThread;
 import com.enqualcomm.support.bean.ICLocation;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
@@ -41,7 +41,6 @@ import java.util.Locale;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
 import static android.content.Intent.FLAG_INCLUDE_STOPPED_PACKAGES;
 import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;
-import static com.enqualcomm.support.Constants.ACTION_REMOTE_CAMERA;
 import static com.enqualcomm.support.Constants.DIALOG_ACTION;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
@@ -53,8 +52,9 @@ public class protocol_ic {
     private static final String CMDHEADER = "IW";
     private static final String CMDEND = "#";
     private static final String CMDSPLIT = ",";
-    public static final String defaultServerIP="watch.jiai.pro";
-    public static final int defaultServerPort=8090;
+    public static final String defaultServerIP = "watch.jiai.pro";
+    public static final int defaultServerPort = 8090;
+
     public enum CMD_TYPE {
         /*终端发起*/
         AP00,//登录包
@@ -289,14 +289,18 @@ public class protocol_ic {
     }
 
 
-    private Connection mConnection=null;
-    private Runtime mRuntime=null;
+    private Connection mConnection = null;
+    private Runtime mRuntime = null;
 
     public protocol_ic(Connection connect, Runtime runtime) {
-            mConnection=connect;
-            mRuntime=runtime;
-
+        if (mHandler == null) {
+            HandlerThread handlerThread = new HandlerThread("ic:protocol-handler-thread");
+            handlerThread.start();
+            mHandler = new Handler(handlerThread.getLooper());
         }
+        mConnection = connect;
+        mRuntime = runtime;
+    }
 
     private StringBuffer cmdbuf = new StringBuffer();
 
@@ -313,7 +317,7 @@ public class protocol_ic {
 
                 return "";
             }
-        }else{
+        } else {
             return "";
         }
 
@@ -336,15 +340,16 @@ public class protocol_ic {
     }
 
 
-    private Handler mHandler=new Handler(EventLooperHandlerThread.makeLooper(protocol_ic.class.getSimpleName()));
+    private Handler mHandler = null;
 
     /**/
-    public static StringMessage genStringMessage(String cmdName, String msg){
-        StringMessage sm=new StringMessage(new String[]{cmdName,msg});
+    public static StringMessage genStringMessage(String cmdName, String msg) {
+        StringMessage sm = new StringMessage(new String[]{cmdName, msg});
         sm.refresh(msg);
-        sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());
+        sm.setDate(TimeUtil.getSystemDateYYMMDD(), TimeUtil.getSystemTimeHHmmss());
         return sm;
     }
+
     /*
     返回true 表示 cmd 全部解析成功
     返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用
@@ -355,11 +360,11 @@ public class protocol_ic {
         boolean iscmdComplete = false;
         boolean ret = true;
         String last_inCompletecmd = "";
-        String cmd_msgbuf=new String(bytes);
-        log("bytes.size "+bytes.length);
+        String cmd_msgbuf = new String(bytes);
+        log("bytes.size " + bytes.length);
 //        cmdbuf.append(cmd_msgbuf);
         cmdbuf.append(cmd_msgbuf);
-        log("cmdbuf.size "+cmdbuf.length() +" "+cmdbuf.toString());
+        log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString());
     /*
         如果不是 #结尾,就认为 接收数据不全,置位。
          */
@@ -368,7 +373,7 @@ public class protocol_ic {
         }
         String[] cmdlist = cmd_msgbuf.split(CMDEND);
         int listlen = cmdlist.length;
-        log("listlen "+listlen);
+        log("listlen " + listlen);
          /*
         如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd
          */
@@ -384,12 +389,12 @@ public class protocol_ic {
                     if (key == CMD_TYPE.BP28) {
                         //如果是BP28则 后面的数据是音频,需要保留
                         byte[] amrBuf;
-                        int amrLen = getBP28Amrlen(cmdlist[i] );
+                        int amrLen = getBP28Amrlen(cmdlist[i]);
                         if (bytes.length > amrLen) {
                             handleCmd(key, cmdlist[i], bytes);
                         }
                     } else {
-                       handleCmd(key, cmdlist[i]);
+                        handleCmd(key, cmdlist[i]);
                     }
                 }
             }
@@ -398,6 +403,7 @@ public class protocol_ic {
         cmdbuf = new StringBuffer().append(last_inCompletecmd);
         return ret;
     }
+
     public int getBP28Amrlen(String cmd) {
 
         String Name;
@@ -407,8 +413,8 @@ public class protocol_ic {
         int packetLen;
 
 
-        String[] msg=cmd.split(CMDSPLIT);
-        if (msg.length>=6){
+        String[] msg = cmd.split(CMDSPLIT);
+        if (msg.length >= 6) {
             try {
                 Name = msg[1];
                 appendIndex = msg[2];
@@ -426,29 +432,30 @@ public class protocol_ic {
 
                 log(stringBuffer.toString());
                 return packetLen;
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
 
-        }else{
-            log("getBP28AmrLen","format Error");
+        } else {
+            log("getBP28AmrLen", "format Error");
 
         }
         return -1;
     }
+
     /*登录*/
     public static StringMessage AP00(Runtime ds) {
         //示例数据:IWAP00867155030001063#
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP00),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP00)).append(ds.IMEI()).append(CMDEND).toString());
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP00), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP00)).append(ds.IMEI()).append(CMDEND).toString());
     }
 
     //处理 登录 BP00
-    public void handleBP00(Runtime runtime,String cmd){
-        String[] msg=cmd.split(CMDSPLIT);
+    public void handleBP00(Runtime runtime, String cmd) {
+        String[] msg = cmd.split(CMDSPLIT);
 //        get Msg :IWBP00,20191229171933,8# (size)24
 //        12-30 01:19:33.861 6492-6492/com.enqualcomm.support I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 ,  IWBP00,20191229171933,8
 
-        if (msg.length>=3) {
+        if (msg.length >= 3) {
             log("handleBP00", "Set Datetime " + msg[1]);
             log("handleBP00", "Set TimeZone " + msg[2]);
             try {
@@ -464,14 +471,14 @@ public class protocol_ic {
                     ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
 
                 }
-            }catch (Exception e) {
+            } catch (Exception e) {
                 ICLogger.e(e.getMessage(), e);
             }
 //            Set Datetime 20200505112734
 //            Set TimeZone 8
 
-        }else{
-            log("handleBP00","format Error");
+        } else {
+            log("handleBP00", "format Error");
         }
     }
 
@@ -492,19 +499,20 @@ public class protocol_ic {
         //02为工作模式 ,(设防,工作模式如果为00,则代表无或未设置)
         //5555: 计步步数,每次到达 9999 后重 0 开始计 (此处 9999 为示例,可以为2字节int 然后溢出归零)
         //30: 翻滚次数
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP03),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP03)).append(CMDSPLIT).append(String.format("%03d",abs(ds.getSignalStrength())))
-                .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append(ds.isPowerConnected()?"1":"0")
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP03), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP03)).append(CMDSPLIT).append(String.format("%03d", abs(ds.getSignalStrength())))
+                .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append(ds.isPowerConnected() ? "1" : "0")
                 .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)
                 .append(ds.getTotalStepCount()).append(CMDSPLIT).append(ds.getRolltimes()).append(CMDEND).toString());
     }
+
     //处理 心跳 BP03
-    public void handleBP03(String cmd){
+    public void handleBP03(String cmd) {
 
         log("BP03心跳接收成功");
     }
 
 
-    public static StringMessage AP10(Runtime ds){
+    public static StringMessage AP10(Runtime ds) {
 
         /**
          * IWAP10080524A2232.9806N11404.9355E000.1061830323.8706000908000502,
@@ -515,9 +523,9 @@ public class protocol_ic {
          * 00:第一个0:是否需要回复地址信息,0:不回复,1回复.
          * HOME|74-DE-2B-44-88-8C|97&HOME1|74-DE-2B-44-88-8C|97&HOME2|74-DE-2B-44-88-8C|97&HOME3|74-DE-2B-44-88-8C|97#
          */
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP10),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate())
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP10), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate())
                 .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading())
-                .append(String.format("%03d",abs(ds.getSignalStrength())))
+                .append(String.format("%03d", abs(ds.getSignalStrength())))
                 .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")
                 .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)
                 .append(ds.getLBSData()).append(CMDSPLIT)
@@ -534,20 +542,19 @@ public class protocol_ic {
         // 460,0,9520,3671,
         // Home|74-DE-2B-44-88-8C|97& Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97& Home3|74-DE-2B-44-88-8C|97#
 //        IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,#
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP01),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01)).append(TimeUtil.getShortDate())
-                .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength())))
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP01), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01)).append(TimeUtil.getShortDate())
+                .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d", abs(ds.getSignalStrength())))
                 .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")
                 .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)
                 .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString());
     }
 
     //处理 定位 BP01
-    public void handleBP01(String cmd){
+    public void handleBP01(String cmd) {
         log("BP01定位接收成功");
     }
 
 
-
     /*LBS+WiFi混合定位*/
     public static StringMessage AP02(Runtime ds) {
         //示例数据:IWAP02,
@@ -569,15 +576,15 @@ public class protocol_ic {
 //        4: 表示WIFI组数,
 //                1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)
 
-        int apsum=0;
-        String wifiinfo=ds.getWifiInfo();
+        int apsum = 0;
+        String wifiinfo = ds.getWifiInfo();
         if (!wifiinfo.isEmpty()) {
             String[] list = wifiinfo.split("&");
             apsum = list.length;
         }
 
-        ICLogger.i("Wifi ap sum "+apsum);
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP02),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP02)).append(CMDSPLIT)
+        ICLogger.i("Wifi ap sum " + apsum);
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP02), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP02)).append(CMDSPLIT)
                 .append(ds.getLanguage()).append(CMDSPLIT)
                 .append(0).append(CMDSPLIT) //为0时不回复地址
                 .append(ds.getLBSMultiStationData()).append(CMDSPLIT)  //基站信息数据
@@ -585,26 +592,26 @@ public class protocol_ic {
     }
 
     //处理 定位 BP01
-    public void handleBP02(String cmd){
+    public void handleBP02(String cmd) {
         log("BP02定位接收成功");
     }
 
 
-
-    public static StringMessage APXL(String id){
+    public static StringMessage APXL(String id) {
 //设备响应:      IWAPXL,080835#
         //080835:指令流水号
-        return genStringMessage(cmdMap.get(CMD_TYPE.APXL),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))
+        return genStringMessage(cmdMap.get(CMD_TYPE.APXL), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))
                 .append(CMDSPLIT).append(id)
                 .append(CMDEND).toString());
     }
 
     /**
      * 测量心率
+     *
      * @param cmd
      * @param connection
      */
-    public void handleBPXL(String cmd, Connection connection){
+    public void handleBPXL(String cmd, Connection connection) {
         //IWBPXL,353456789012345,080835#
         //说明:
         //IW:标识符
@@ -613,32 +620,33 @@ public class protocol_ic {
         //080835 :指令流水号
         //设备响应:      IWAPXL,080835#
         //080835:指令流水号
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length==3){
-            String index=list[2];
-            String imei=list[1];
-            ICLogger.i("Handle BPXL IMEI "+imei+",index "+index);
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 3) {
+            String index = list[2];
+            String imei = list[1];
+            ICLogger.i("Handle BPXL IMEI " + imei + ",index " + index);
             connection.send(APXL(index));
-        }else{
+        } else {
             ICLogger.i("BPXL format error!");
         }
 
     }
 
-    public static StringMessage APXY(String id){
+    public static StringMessage APXY(String id) {
 //设备响应:      IWAPXY,080835#
         //080835:指令流水号
-        return genStringMessage(cmdMap.get(CMD_TYPE.APXY),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))
+        return genStringMessage(cmdMap.get(CMD_TYPE.APXY), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))
                 .append(CMDSPLIT).append(id)
                 .append(CMDEND).toString());
     }
 
     /**
      * 测量血压
+     *
      * @param cmd
      * @param connection
      */
-    public void handleBPXY(String cmd,Connection connection){
+    public void handleBPXY(String cmd, Connection connection) {
         //IWBPXY,353456789012345,080835#
         //说明:
         //IW:标识符
@@ -647,25 +655,24 @@ public class protocol_ic {
         //080835 :指令流水号
         //设备响应:      IWAPXY,080835#
         //080835:指令流水号
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length==3){
-            String index=list[2];
-            String imei=list[1];
-            ICLogger.i("Handle BPXY IMEI "+imei+",index "+index);
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 3) {
+            String index = list[2];
+            String imei = list[1];
+            ICLogger.i("Handle BPXY IMEI " + imei + ",index " + index);
             connection.send(APXY(index));
-        }else{
+        } else {
             ICLogger.i("BPXY format error!");
         }
 
     }
 
 
-
-    public static StringMessage APJZ(String id,String BPH,String BPL,String Age,String Sex){
+    public static StringMessage APJZ(String id, String BPH, String BPL, String Age, String Sex) {
         //设备响应:      IWAPJZ,792997,120,85,42,1#
         //792997:指令流水号
         // 高压120,低压85,年龄42,1 男性
-        return genStringMessage(cmdMap.get(CMD_TYPE.APJZ),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ))
+        return genStringMessage(cmdMap.get(CMD_TYPE.APJZ), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ))
                 .append(CMDSPLIT).append(id)
                 .append(CMDSPLIT).append(BPH)
                 .append(CMDSPLIT).append(BPL)
@@ -675,12 +682,11 @@ public class protocol_ic {
     }
 
     /**
-     *
      * @param cmd
      * @param connection
      * @param runtime
      */
-    public void handleBPJZ(String cmd,Connection connection,Runtime runtime){
+    public void handleBPJZ(String cmd, Connection connection, Runtime runtime) {
         //cmdbuf.size 42 IWBPJZ,867155030001063,199600,120,85,45,1#   高压120,低压85,年龄45,男性
 //        cmdbuf.size 42 IWBPJZ,867155030001063,909957,120,85,42,0#  高压120,低压85,年龄42,女性
         //IWBPJZ,353456789012345,080835,110,75#
@@ -693,8 +699,8 @@ public class protocol_ic {
         //080835 :指令流水号
         //设备响应:      IWAPJZ,792997,120,85,42,1#
         //792997:指令流水号
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length==7){
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 7) {
             try {
                 String index = list[2];
                 String imei = list[1];
@@ -706,30 +712,29 @@ public class protocol_ic {
                 connection.send(APJZ(index, strBPH, strBPL, strAge, strSex));
                 runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH), Integer.parseInt(strBPL), Integer.parseInt(strAge), Integer.parseInt(strSex));
                 ICLogger.i("Handle BPJZ IMEI " + imei + ",index " + index + ", BPH " + strBPH + ", BPL " + strBPL + ", Age " + strAge + ", Sex " + (strSex.equals("1") ? "男" : "女"));
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
+        } else {
             ICLogger.i("BPXY format error!");
         }
     }
 
 
-
     //重启
 
 
-    public static StringMessage AP18(String index){
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP18),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18))
+    public static StringMessage AP18(String index) {
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP18), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18))
                 .append(CMDSPLIT).append(index)
                 .append(CMDEND).toString());
     }
 
-    public void handleBP18(Connection connection,String cmd) {
+    public void handleBP18(Connection connection, String cmd) {
 
         //    IWBP18,867155030001063,161723
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==3) {
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 3) {
 
             connection.send(AP18(cmdlist[2]));
 
@@ -737,16 +742,17 @@ public class protocol_ic {
     }
     //恢复出厂设置
 
-    public static StringMessage AP17(String index){
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP17),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17))
+    public static StringMessage AP17(String index) {
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP17), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17))
                 .append(CMDSPLIT).append(index)
                 .append(CMDEND).toString());
     }
-    public void handleBP17(Connection connection,String cmd) {
+
+    public void handleBP17(Connection connection, String cmd) {
 
         //    IWBP17,867155030001063,161723
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==3) {
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 3) {
 
             connection.send(AP17(cmdlist[2]));
 
@@ -756,16 +762,17 @@ public class protocol_ic {
     //关机
 
 
-    public static StringMessage AP31(String index){
-        return genStringMessage("AP31",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP31))
+    public static StringMessage AP31(String index) {
+        return genStringMessage("AP31", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP31))
                 .append(CMDSPLIT).append(index)
                 .append(CMDEND).toString());
     }
-    public void handleBP31(Connection connection,String cmd) {
+
+    public void handleBP31(Connection connection, String cmd) {
 
         //    IWBP31,867155030001063,161723
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==3) {
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 3) {
 
             connection.send(AP31(cmdlist[2]));
 
@@ -773,8 +780,8 @@ public class protocol_ic {
     }
 
     //设置SOS号码
-    public static StringMessage AP12(String index,String phNum1,String phNum2,String phNum3){
-        return genStringMessage("AP12",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12))
+    public static StringMessage AP12(String index, String phNum1, String phNum2, String phNum3) {
+        return genStringMessage("AP12", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12))
                 .append(CMDSPLIT).append(index)
                 .append(CMDSPLIT).append(phNum1)
                 .append(CMDSPLIT).append(phNum2)
@@ -783,18 +790,18 @@ public class protocol_ic {
     }
 
     //设置SOS号码
-    public void handleBP12(Connection connection,String cmd,Runtime runtime){
+    public void handleBP12(Connection connection, String cmd, Runtime runtime) {
         //    IWBP12,353456789012345,080835,135XXXXXXXX,135XXXXXXXX,135XXXXXXXX#
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length>=3){
-            String index=cmdlist[2];
-            String phNum1=cmdlist.length==3?"":cmdlist[3];
-            String phNum2=cmdlist.length>3?(cmdlist.length==4?"":cmdlist[4]):"";
-            String phNum3=(cmdlist.length>4)?(cmdlist.length==5? "":cmdlist[5]):"";
-            ICLogger.i(new StringBuffer().append("get Emegency Numbs "+phNum1+","+phNum2+","+phNum3).toString());
-            connection.send(AP12(index,phNum1,phNum2,phNum3));
-
-            ArrayList<Contact> contactArray=new ArrayList<Contact>();
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length >= 3) {
+            String index = cmdlist[2];
+            String phNum1 = cmdlist.length == 3 ? "" : cmdlist[3];
+            String phNum2 = cmdlist.length > 3 ? (cmdlist.length == 4 ? "" : cmdlist[4]) : "";
+            String phNum3 = (cmdlist.length > 4) ? (cmdlist.length == 5 ? "" : cmdlist[5]) : "";
+            ICLogger.i(new StringBuffer().append("get Emegency Numbs " + phNum1 + "," + phNum2 + "," + phNum3).toString());
+            connection.send(AP12(index, phNum1, phNum2, phNum3));
+
+            ArrayList<Contact> contactArray = new ArrayList<Contact>();
 //            if(Config.custom_branch_name.equals("AK")){
 //
 //                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", "07522312120"));
@@ -803,22 +810,22 @@ public class protocol_ic {
 //                if (!phNum2.isEmpty())
 //                    contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum2));
 //            }else {
-                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));
+            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);
-        }else{
+            runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
+        } else {
             ICLogger.i(" BP12 format error!");
         }
     }
 
 
-    public static StringMessage  AP14(String index,String[] phnumbs){
-        return genStringMessage("AP14",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
+    public static StringMessage AP14(String index, String[] phnumbs) {
+        return genStringMessage("AP14", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
                 .append(CMDSPLIT).append(index)
                 .append(CMDSPLIT).append(phnumbs[0])
                 .append(CMDSPLIT).append(phnumbs[1])
@@ -832,8 +839,9 @@ public class protocol_ic {
                 .append(CMDSPLIT).append(phnumbs[9])
                 .append(CMDEND).toString());
     }
+
     //设置通讯录,白名单(10个)
-    public void handleBP14(Connection connection,String cmd , Runtime runtime){
+    public void handleBP14(Connection connection, String cmd, Runtime runtime) {
 //        IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,,
 /**
  * IWBP14,353456789012345,080835,
@@ -848,62 +856,62 @@ public class protocol_ic {
  * D3590D54|135xxxxxxxxxx,
  * D3590D54|135xxxxxxxxxx#
  */
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        String[] phnums=new String[]{"","","","","","","","","",""};
-        StringBuffer sb=new StringBuffer().append("recv phone Numbs ");
-        if (cmdlist.length>=3){
-            switch (cmdlist.length){
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        String[] phnums = new String[]{"", "", "", "", "", "", "", "", "", ""};
+        StringBuffer sb = new StringBuffer().append("recv phone Numbs ");
+        if (cmdlist.length >= 3) {
+            switch (cmdlist.length) {
                 case 13:
-                    phnums[9]=cmdlist[12];
+                    phnums[9] = cmdlist[12];
                     sb.append(phnums[9]).append(",");
                 case 12:
-                    phnums[8]=cmdlist[11];
+                    phnums[8] = cmdlist[11];
                     sb.append(phnums[8]).append(",");
                 case 11:
-                    phnums[7]=cmdlist[10];
+                    phnums[7] = cmdlist[10];
                     sb.append(phnums[7]).append(",");
                 case 10:
-                    phnums[6]=cmdlist[9];
+                    phnums[6] = cmdlist[9];
                     sb.append(phnums[6]).append(",");
                 case 9:
-                    phnums[5]=cmdlist[8];
+                    phnums[5] = cmdlist[8];
                     sb.append(phnums[5]).append(",");
                 case 8:
-                    phnums[4]=cmdlist[7];
+                    phnums[4] = cmdlist[7];
                     sb.append(phnums[4]).append(",");
                 case 7:
-                    phnums[3]=cmdlist[6];
+                    phnums[3] = cmdlist[6];
                     sb.append(phnums[3]).append(",");
                 case 6:
-                    phnums[2]=cmdlist[5];
+                    phnums[2] = cmdlist[5];
                     sb.append(phnums[2]).append(",");
                 case 5:
-                    phnums[1]=cmdlist[4];
+                    phnums[1] = cmdlist[4];
                     sb.append(phnums[1]).append(",");
                 case 4:
-                    phnums[0]=cmdlist[3];
+                    phnums[0] = cmdlist[3];
                     sb.append(phnums[0]).append(",");
 
             }
 
-            String index=cmdlist[2];
+            String index = cmdlist[2];
             ICLogger.i(sb.toString());
-            connection.send(AP14(index,phnums));
-            ArrayList<Contact> contactArray=new ArrayList<Contact>();
+            connection.send(AP14(index, phnums));
+            ArrayList<Contact> contactArray = new ArrayList<Contact>();
 
-            if(Config.custom_name.equals("YT")) {
+            if (Config.custom_name.equals("YT")) {
                 ICLogger.i("=====add hotline 96885 ");
                 contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));
             }
-            for (int i=0; i< phnums.length;i++){
-                String[] tmp= phnums[i].split("\\|");
-                if (tmp.length==2){
-                    String name= Util.decodeUnicode2Utf8(tmp[0]);
-                    String phonem=tmp[1];
-                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem);
-                    contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));
-                }else{
-                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length);
+            for (int i = 0; i < phnums.length; i++) {
+                String[] tmp = phnums[i].split("\\|");
+                if (tmp.length == 2) {
+                    String name = Util.decodeUnicode2Utf8(tmp[0]);
+                    String phonem = tmp[1];
+                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length + " , name=" + name + ",-" + phonem);
+                    contactArray.add(new Contact(Contact.CATEGORY_CALL, name, phonem));
+                } else {
+                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length);
 
                 }
             }
@@ -912,25 +920,25 @@ public class protocol_ic {
 //            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));
 //            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));
 
-            runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false);
+            runtime.getDbHelper().saveContacts(contactArray, false, false, true, false, false, false);
 
-        }else{
+        } else {
             ICLogger.i(" BP14 format error!");
         }
 
     }
 
 
-
-    public static StringMessage AP85(Runtime ds,String cmddata){
+    public static StringMessage AP85(Runtime ds, String cmddata) {
 //示例数据:IWAP49,68##
-        return genStringMessage("AP85",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85))
+        return genStringMessage("AP85", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85))
                 .append(CMDSPLIT).append(cmddata)
                 .append(CMDEND).toString());
 
     }
+
     //设置闹钟
-    public void handleBP85(String cmd , Connection connection,Runtime runtime){
+    public void handleBP85(String cmd, Connection connection, Runtime runtime) {
 //        IWBP85,867155030001063,155312,1,1,0235,12,1,1
 //        IWBP85,867155030002145,945166,1,0,
 //        IWBP85,867155030001064,265960,1,1,1130,,1,1
@@ -946,21 +954,21 @@ public class protocol_ic {
 //3 表示久坐提醒
 //多组闹钟之间用”@”符号分隔
 
-        String imei="",cmdindex="0"/*指令流水号*/;
-        int     all_alarmswitch=0 /*总开关 1为开,0 为关*/,
-                alarmswitch=0 /*1为开,0 为关*/,
-                alarmcount=0 /*表示闹钟个数*/;
-        String alarmtime="";//0900表示早上09:00
-        int alarmtype=1; //1表示吃药提醒 , 2 表示喝水提醒 ,3 表示久坐提醒
-        String repeat="";// 135表示周一周三周五,使用24小时制
-        String[] datalist= cmd.split("@");
-        ArrayList<Alarm> alarmlist=new ArrayList<>();
-        if (datalist.length >0){
-            for (int i =0 ; i< datalist.length;i++){
-                String [] cmdarglist=datalist[i].split(",");
-
-                if (i == 0){
-                    if (cmdarglist.length == 9){
+        String imei = "", cmdindex = "0"/*指令流水号*/;
+        int all_alarmswitch = 0 /*总开关 1为开,0 为关*/,
+                alarmswitch = 0 /*1为开,0 为关*/,
+                alarmcount = 0 /*表示闹钟个数*/;
+        String alarmtime = "";//0900表示早上09:00
+        int alarmtype = 1; //1表示吃药提醒 , 2 表示喝水提醒 ,3 表示久坐提醒
+        String repeat = "";// 135表示周一周三周五,使用24小时制
+        String[] datalist = cmd.split("@");
+        ArrayList<Alarm> alarmlist = new ArrayList<>();
+        if (datalist.length > 0) {
+            for (int i = 0; i < datalist.length; i++) {
+                String[] cmdarglist = datalist[i].split(",");
+
+                if (i == 0) {
+                    if (cmdarglist.length == 9) {
                         try {
                             imei = cmdarglist[1];
                             cmdindex = cmdarglist[2];
@@ -984,23 +992,23 @@ public class protocol_ic {
                                     .toString()
                             );
                             alarmlist.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat, "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
-                        }catch (Exception e) {
+                        } catch (Exception e) {
                             ICLogger.e(e.getMessage(), e);
                         }
-                    }else if (cmdarglist.length == 5) {
-                     try {
-                         imei = cmdarglist[1];
-                         cmdindex = cmdarglist[2];
-                         all_alarmswitch = Integer.parseInt(cmdarglist[3]);
-                         alarmcount = Integer.parseInt(cmdarglist[4]);
-                     }catch (Exception e) {
-                         ICLogger.e(e.getMessage(), e);
-                     }
-                    }else{
+                    } else if (cmdarglist.length == 5) {
+                        try {
+                            imei = cmdarglist[1];
+                            cmdindex = cmdarglist[2];
+                            all_alarmswitch = Integer.parseInt(cmdarglist[3]);
+                            alarmcount = Integer.parseInt(cmdarglist[4]);
+                        } catch (Exception e) {
+                            ICLogger.e(e.getMessage(), e);
+                        }
+                    } else {
                         log("data len is too small!");
                     }
-                }else{
-                    if (cmdarglist.length == 4){
+                } else {
+                    if (cmdarglist.length == 4) {
                         try {
                             alarmtime = cmdarglist[0];
                             repeat = cmdarglist[1];
@@ -1015,10 +1023,10 @@ public class protocol_ic {
                             );
 
                             alarmlist.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat, "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
-                        }catch (Exception e){
-                            ICLogger.e(e.getMessage(),e);
+                        } catch (Exception e) {
+                            ICLogger.e(e.getMessage(), e);
                         }
-                    }else{
+                    } else {
                         log("data len is too small!");
                     }
 
@@ -1031,10 +1039,10 @@ public class protocol_ic {
         }
 //IWBP85,867155030002145,410385,1,0,#
 
-        String replacement=new StringBuilder("IWBP85,").append(imei).append(",").toString();
-        String replycmd = cmd.replace(replacement,"");
-        ICLogger.i("gen reply "+replacement+" "+replycmd);
-        connection.send(AP85(runtime,replycmd));
+        String replacement = new StringBuilder("IWBP85,").append(imei).append(",").toString();
+        String replycmd = cmd.replace(replacement, "");
+        ICLogger.i("gen reply " + replacement + " " + replycmd);
+        connection.send(AP85(runtime, replycmd));
     }
 
 
@@ -1058,9 +1066,7 @@ public class protocol_ic {
 //    }
 
 
-
-
-    public static byte[] AP07(String  packetTime,int count,int index,int datalen,byte[] amrdata){
+    public static byte[] AP07(String packetTime, int count, int index, int datalen, byte[] amrdata) {
 //IWAP07,20140818064408,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
 //说明:
 //IW:标识符
@@ -1076,31 +1082,31 @@ public class protocol_ic {
 //如果设备回复确认数据包接收失败状态,则重复发送上一个数据包
 
 
-        String sb=new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP07))
+        String sb = new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP07))
                 .append(CMDSPLIT).append(packetTime)
                 .append(CMDSPLIT).append(count)
                 .append(CMDSPLIT).append(index)
                 .append(CMDSPLIT).append(datalen)
                 .append(CMDSPLIT).toString();
 
-        byte[] sentbuf=new byte[sb.length()+datalen+1];
-        System.arraycopy(sb.getBytes(),0,sentbuf,0,sb.length());
-        System.arraycopy(amrdata,0,sentbuf,sb.length(),datalen);
-        sentbuf[sb.length()+datalen]='#';
+        byte[] sentbuf = new byte[sb.length() + datalen + 1];
+        System.arraycopy(sb.getBytes(), 0, sentbuf, 0, sb.length());
+        System.arraycopy(amrdata, 0, sentbuf, sb.length(), datalen);
+        sentbuf[sb.length() + datalen] = '#';
 
         return sentbuf;
 
     }
 
 
-    public void handleBP07(String cmd , Connection connection ){
+    public void handleBP07(String cmd, Connection connection) {
 //平台响应:      IWBP07,20140818064408,6,1,1#
 //20140818064408:设备语音时间,yyyyMMddHHmmss 格式的年月日时分秒
 //6:语音包分包总数
 //1:当前设备收到的是第几个包
 //1:表示服务器接受数据成功,0表示服务器接受数据失败
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==5){
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 5) {
             try {
                 String time = cmdlist[1];
                 int packetCount = Integer.parseInt(cmdlist[2]);
@@ -1113,28 +1119,27 @@ public class protocol_ic {
                 }
                 //发送消息,再次检查要发送的语音包,确认其发送完毕
                 connection.DeliverCMDMessageToSystem("SentVoicePacket", "SentVoicePacket");
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
+        } else {
             ICLogger.i(" BP07 Format error!");
         }
     }
 
 
-
-    public static StringMessage AP33(String cmdindex,int workMode){
+    public static StringMessage AP33(String cmdindex, int workMode) {
 //IWAP33,080835,1#
 //080835:指令流水号
 //1:设置信息,供服务器同步
-        return genStringMessage("AP33",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP33))
+        return genStringMessage("AP33", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP33))
                 .append(CMDSPLIT).append(cmdindex)
                 .append(CMDSPLIT).append(workMode)
                 .append(CMDEND).toString());
     }
 
     //设置工作模式
-    public void handleBP33(Connection connection,Runtime runtime,String cmd){
+    public void handleBP33(Connection connection, Runtime runtime, String cmd) {
 
 //    IWBP33,867155030001063,560555,1
 //        IW:标识符
@@ -1143,11 +1148,11 @@ public class protocol_ic {
 //        080835:指令流水号
 //        1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式
 
-        String[] cmdlist=cmd.split(",");
-        if (cmdlist.length == 4){
+        String[] cmdlist = cmd.split(",");
+        if (cmdlist.length == 4) {
 
 
-            log("work mode "+cmdlist[3]);
+            log("work mode " + cmdlist[3]);
             try {
                 int mod = Integer.parseInt(cmdlist[3]);
                 int Cycle = 900;
@@ -1174,8 +1179,8 @@ public class protocol_ic {
                 Config.setLocationCycle(runtime.getContextProxy().context, Cycle);
                 runtime.getLocationInstance().setLocation_cycle(Cycle);
                 runtime.getLocationInstance().setWorkingMod(mod);
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
 //            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
             //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。
@@ -1184,18 +1189,18 @@ public class protocol_ic {
     }
 
 
-    public static StringMessage AP34(String cmdindex,int workMode){
+    public static StringMessage AP34(String cmdindex, int workMode) {
 //IWAP34,588854,1#
 //080835:指令流水号
 //8:模式
-        return genStringMessage("AP34",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP34))
+        return genStringMessage("AP34", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP34))
                 .append(CMDSPLIT).append(cmdindex)
                 .append(CMDSPLIT).append(workMode)
                 .append(CMDEND).toString());
     }
 
     //设置自定义工作模式
-    public void handleBP34(Connection connection,Runtime runtime,String cmd){
+    public void handleBP34(Connection connection, Runtime runtime, String cmd) {
 
 //    IWBP34,867155030001063,588854,8,900,1#
 //        IW:标识符
@@ -1204,11 +1209,11 @@ public class protocol_ic {
 //        080835:指令流水号
 //        1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式
 
-        String[] cmdlist=cmd.split(",");
-        if (cmdlist.length == 6){
+        String[] cmdlist = cmd.split(",");
+        if (cmdlist.length == 6) {
 
 
-            log("work mode "+cmdlist[3]);
+            log("work mode " + cmdlist[3]);
             try {
                 int mod = Integer.parseInt(cmdlist[3]);
                 int Cycle = Integer.parseInt(cmdlist[4]);
@@ -1231,13 +1236,14 @@ public class protocol_ic {
                 runtime.getLocationInstance().setWorkingMod(mod);
 //            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
                 //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
         }
 
     }
-    public void handleBP40(Connection connection,Runtime runtime,String cmd){
+
+    public void handleBP40(Connection connection, Runtime runtime, String cmd) {
 
 //        IWBP40,353456789012345,080835,XXXXXXXXXXXXXX#
 //        IW:标识符
@@ -1247,40 +1253,41 @@ public class protocol_ic {
 //        XXXXXXXXXXXX : 表示文字内容GB2312编码
 
 
-        String[] cmdlist=cmd.split(",");
-        if (cmdlist.length == 4){
-            String cmdindex=cmdlist[2];
-            String txtmsg=cmdlist[3];
-            StringBuilder sb=new StringBuilder();
-            runtime.PushtxtMsg_srv_index=cmdindex;//给回复AP94用
+        String[] cmdlist = cmd.split(",");
+        if (cmdlist.length == 4) {
+            String cmdindex = cmdlist[2];
+            String txtmsg = cmdlist[3];
+            StringBuilder sb = new StringBuilder();
+            runtime.PushtxtMsg_srv_index = cmdindex;//给回复AP94用
             sb.append(cmdindex).append(CMDSPLIT).append(TimeUtil.getSystemTimeyyyyMMddHHmmss()).append(CMDSPLIT).append(txtmsg);
-            if (Config.custom_name.equals("VitracK")){
+            if (Config.custom_name.equals("VitracK")) {
 
-            }else{
+            } else {
 //                txtmsg = Util.decodeUnicode2Utf8(txtmsg);
                 txtmsg = Util.UrlGB2312ToUTF8(txtmsg);
             }
-            StringMessage msg=AP40(cmdindex,1);
+            StringMessage msg = AP40(cmdindex, 1);
             //设定当前工作模式及循环频率
             connection.send(msg);
-            ICLogger.i("received Txt Msg "+txtmsg);
-            if(!Config.noPushTxtReadReply) {
+            ICLogger.i("received Txt Msg " + txtmsg);
+            if (!Config.noPushTxtReadReply) {
                 Config.setLastUnReadMessage(runtime.getContextProxy().context, sb.toString());
-                runtime.getContextProxy().sendMsgBroadcast(txtmsg,3);//msgType 3需要回复,0不需要回复
-            }else{
-                runtime.getContextProxy().sendMsgBroadcast(txtmsg,0);//msgType 3需要回复,0不需要回复
+                runtime.getContextProxy().sendMsgBroadcast(txtmsg, 3);//msgType 3需要回复,0不需要回复
+            } else {
+                runtime.getContextProxy().sendMsgBroadcast(txtmsg, 0);//msgType 3需要回复,0不需要回复
             }
             runtime.getContextProxy().saveMstToSMSDB(txtmsg);
-        }else{
+        } else {
             ICLogger.i("BP40 format error!");
         }
     }
-    public static StringMessage AP40(String cmdindex,int success){
+
+    public static StringMessage AP40(String cmdindex, int success) {
 
 //        IWAP40,080835,1#
 //        080835:指令流水号
 //        1:表示设备接受数据成功,0表示设备接受数据失败
-        return genStringMessage("AP40",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP40))
+        return genStringMessage("AP40", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP40))
                 .append(CMDSPLIT).append(cmdindex)
                 .append(CMDSPLIT).append(success)
                 .append(CMDEND).toString());
@@ -1289,26 +1296,26 @@ public class protocol_ic {
 
     /**
      * 心率上传,返回协议字串
+     *
      * @param ds
      * @return
      */
-    public static StringMessage AP49(Runtime ds){
+    public static StringMessage AP49(Runtime ds) {
         //示例数据:IWAP49,68##
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP49),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49))
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP49), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49))
                 .append(CMDSPLIT).append(ds.getHRS().getPPG())
                 .append(CMDEND).toString());
 
     }
 
 
-
-
     /**
      * 返回上传心率血压的协议字串
+     *
      * @param ds
      * @return
      */
-    public static StringMessage APHT(Runtime ds){
+    public static StringMessage APHT(Runtime ds) {
         //IWAPHT,60,130,85#
         //说明:
         //IW:标识符
@@ -1318,13 +1325,14 @@ public class protocol_ic {
         //85 : 血压低压 [舒张压]
         //平台响应:      IWBPHT#
         //表示平台已接收,可不作响应
-        return genStringMessage(cmdMap.get(CMD_TYPE.APHT),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))
+        return genStringMessage(cmdMap.get(CMD_TYPE.APHT), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))
                 .append(CMDSPLIT).append(ds.getHRS().getPPG())
                 .append(CMDSPLIT).append(ds.getHRS().getBPH())
                 .append(CMDSPLIT).append(ds.getHRS().getBPL())
                 .append(CMDEND).toString());
     }
-    public static StringMessage APHT(int  ppg,int bph,int bpl){
+
+    public static StringMessage APHT(int ppg, int bph, int bpl) {
         //IWAPHT,60,130,85#
         //说明:
         //IW:标识符
@@ -1334,7 +1342,7 @@ public class protocol_ic {
         //85 : 血压低压 [舒张压]
         //平台响应:      IWBPHT#
         //表示平台已接收,可不作响应
-        return genStringMessage(cmdMap.get(CMD_TYPE.APHT),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))
+        return genStringMessage(cmdMap.get(CMD_TYPE.APHT), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))
                 .append(CMDSPLIT).append(ppg)
                 .append(CMDSPLIT).append(bph)
                 .append(CMDSPLIT).append(bpl)
@@ -1343,15 +1351,16 @@ public class protocol_ic {
 
 
     //立即定位反馈
-    public static StringMessage AP16(String  cmdindex){
+    public static StringMessage AP16(String cmdindex) {
 //IWAP16,080835#
 //080835:指令流水号
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP16),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16))
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP16), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16))
                 .append(CMDSPLIT).append(cmdindex)
                 .append(CMDEND).toString());
     }
+
     //    立即定位指令(长链接有效)
-    public void handleBP16(Connection connection,Runtime runtime,String cmd){
+    public void handleBP16(Connection connection, Runtime runtime, String cmd) {
         //示例数据:IWBP16,867155030001063,335386
 //        IWBP16,353456789012345,080835#
 //        说明:
@@ -1360,18 +1369,18 @@ public class protocol_ic {
 //        353456789012345:IMEI号,设备唯一ID
 //        080835 :指令流水号
         String[] cmdlist = cmd.split(",");
-        if(cmdlist.length==3){
-            log("imei "+cmdlist[1]+", cmdindex "+cmdlist[2]);
+        if (cmdlist.length == 3) {
+            log("imei " + cmdlist[1] + ", cmdindex " + cmdlist[2]);
 
             connection.send(AP16(cmdlist[2]));
-        }else{
+        } else {
             log("error BP16 format");
         }
     }
 
 
     /*通过基站获取时间和坐标*/
-    public static StringMessage APTM(Runtime ds){
+    public static StringMessage APTM(Runtime ds) {
         //示例数据:IWAPTM,460,0,9750,3613#
         //说明:
         //IW:标识符
@@ -1381,7 +1390,7 @@ public class protocol_ic {
         //9750: LAC
         //3613: CID
 
-        return genStringMessage(cmdMap.get(CMD_TYPE.APTM),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTM))
+        return genStringMessage(cmdMap.get(CMD_TYPE.APTM), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTM))
                 .append(CMDSPLIT).append(ds.getLocationInstance().getMCC())
                 .append(CMDSPLIT).append(ds.getLocationInstance().getMNC())
                 .append(CMDSPLIT).append(ds.getLocationInstance().getLAC())
@@ -1390,73 +1399,69 @@ public class protocol_ic {
 
     }
 
-    public void handleBPTM(String cmd){
+    public void handleBPTM(String cmd) {
         //平台响应:      IWBPTM,20160225090909,22.123456,113.654321#
         //返回时间,格式为:yyyyMMddHHmmss ,为UTC0 时间
         //经纬度保留六位小数,若没取到则返回 0
-        String[] list=cmd.split(CMDSPLIT);
+        String[] list = cmd.split(CMDSPLIT);
 
-        if(list.length==4){
+        if (list.length == 4) {
 
-            String time=list[1];
-            String lat=list[2];
-            String lon=list[3];
-            ICLogger.i("BPTM , time="+time+", lat="+lat+", lon="+lon);
-        }else{
+            String time = list[1];
+            String lat = list[2];
+            String lon = list[3];
+            ICLogger.i("BPTM , time=" + time + ", lat=" + lat + ", lon=" + lon);
+        } else {
             ICLogger.i("BPTM format error");
         }
 
 
     }
 
-    public static StringMessage AP15(String index){
+    public static StringMessage AP15(String index) {
 //IWAP15, 080835#
 //080835:指令流水号
-        return genStringMessage("AP15",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))
+        return genStringMessage("AP15", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))
                 .append(CMDSPLIT).append(index)
                 .append(CMDEND).toString());
     }
 
     //设置定位周期
-    public void handleBP15(String cmd ,Connection connection,Runtime runtime){
+    public void handleBP15(String cmd, Connection connection, Runtime runtime) {
 //        IWBP15, 353456789012345, 080835, 30#
 //        353456789012345:IMEI号,设备唯一ID
 //        080835 :指令流水号
 //        30: 表示频率为30分钟
 
-        String[] list=cmd.split(CMDSPLIT);
+        String[] list = cmd.split(CMDSPLIT);
 
-        if(list.length==4){
-            String index=list[2];
-            String time=list[3];
+        if (list.length == 4) {
+            String index = list[2];
+            String time = list[3];
             connection.send(AP15(index));
-            ICLogger.i("BP15 , 定位周期="+time+"秒");
+            ICLogger.i("BP15 , 定位周期=" + time + "秒");
 
             try {
                 Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS);
-                Config.setLocationCycle(runtime.getContextProxy().context, Integer.parseInt(time) );
+                Config.setLocationCycle(runtime.getContextProxy().context, Integer.parseInt(time));
                 runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));
                 runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));
                 //set AlarmCycle  and trigger Location
                 CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
+        } else {
             ICLogger.i("BP15 format error");
         }
 
     }
 
 
-
-
-
-
     /*语音下行反馈*/
     public static StringMessage AP28(String name, String msg, int packagecount, int currentpackageindex, int received_success) {
         //示例数据:IWAP28,D3590D54,xxxx,6,1,1#
-        return genStringMessage("AP28",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28))
+        return genStringMessage("AP28", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28))
                 .append(CMDSPLIT).append(name)
                 .append(CMDSPLIT).append(msg)
                 .append(CMDSPLIT).append(packagecount)
@@ -1466,7 +1471,7 @@ public class protocol_ic {
     }
 
     //处理 BP28 语音消息
-    public void handleBP28(Connection connection,String cmd,Runtime runtime,byte[] bytes) {
+    public void handleBP28(Connection connection, String cmd, Runtime runtime, byte[] bytes) {
         //log("handleBP28 msg"+cmd);
 /**
  * IWBP28, D3590D54,XXXX,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
@@ -1497,8 +1502,8 @@ public class protocol_ic {
         int packetLen;
         byte[] packetData;
 
-        String[] msg= cmd.split(CMDSPLIT);
-        if (msg.length>=6){
+        String[] msg = cmd.split(CMDSPLIT);
+        if (msg.length >= 6) {
 
             try {
                 Name = msg[1];
@@ -1541,12 +1546,12 @@ public class protocol_ic {
 
                     connection.DeliverCMDMessageToSystem("NewVoice", amrFilepath);//通知下面线程状态变化
                 }
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
 
-        }else{
-            log("handleBP28","format Error");
+        } else {
+            log("handleBP28", "format Error");
 //            connection.send(genStringMessage("AP28",AP28(Name,appendIndex,packetCount,currentId,0)));
 
         }
@@ -1565,18 +1570,18 @@ public class protocol_ic {
     }
 
     //白名单开关(下行协议号:BP84,响应:AP84)
-    public static StringMessage AP84(String index,int success){
+    public static StringMessage AP84(String index, int success) {
 
         //设备响应:      IWAP80,080835,1#
         //080835:指令流水号
         //1:表示设备执行成功,0 表示设备执行失败
-        return genStringMessage("AP84",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84))
+        return genStringMessage("AP84", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84))
                 .append(CMDSPLIT).append(index)
                 .append(CMDSPLIT).append(success)
                 .append(CMDEND).toString());
     }
 
-    public void handleBP84(String cmd,Connection connection){
+    public void handleBP84(String cmd, Connection connection) {
 //示例:
         //IWBP84,353456789012345,080835,1#
         //说明:
@@ -1585,21 +1590,21 @@ public class protocol_ic {
         //353456789012345:IMEI号,设备唯一ID
         //080835 :指令流水号
         //1: 表示白名单开,0 表示白名单关
-        String[] list=cmd.split(CMDSPLIT);
+        String[] list = cmd.split(CMDSPLIT);
 
-        if (list.length==4){
-            String index=list[2];
-            String whitelist_switch=list[3];
-            connection.send(AP84(index,1));
+        if (list.length == 4) {
+            String index = list[2];
+            String whitelist_switch = list[3];
+            connection.send(AP84(index, 1));
 
-            if (whitelist_switch.equals("1")){
-                Util.setSystemProperties("persist.sys.whitelist.enable","true");
-            }else{
-                Util.setSystemProperties("persist.sys.whitelist.enable","false");
+            if (whitelist_switch.equals("1")) {
+                Util.setSystemProperties("persist.sys.whitelist.enable", "true");
+            } else {
+                Util.setSystemProperties("persist.sys.whitelist.enable", "false");
             }
-            ICLogger.i("收到服务器指令:白名单"+(whitelist_switch.equals("1")?"开":"关"));
+            ICLogger.i("收到服务器指令:白名单" + (whitelist_switch.equals("1") ? "开" : "关"));
 
-        }else{
+        } else {
 
             ICLogger.i("BP84 format error!");
         }
@@ -1607,17 +1612,17 @@ public class protocol_ic {
     }
 
     //17.绑定解绑(下行协议号:BP68,响应:AP68)
-    public static StringMessage AP68(String index,String cmd){
+    public static StringMessage AP68(String index, String cmd) {
 
         //设备响应:      IWAP86, 080835,1#
         //080835:指令流水号
-        return genStringMessage("AP86",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP68))
+        return genStringMessage("AP86", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP68))
                 .append(CMDSPLIT).append(index)
                 .append(CMDSPLIT).append(cmd)
                 .append(CMDEND).toString());
     }
 
-    public void handleBP68(String cmd,Connection connection,Runtime runtime){
+    public void handleBP68(String cmd, Connection connection, Runtime runtime) {
 
         //示例:
         //IWBP68,353456789012345,080835,1#
@@ -1628,27 +1633,27 @@ public class protocol_ic {
         //080835 :指令流水号
         //1 : 表示设备为激活状态(绑定成功) 0:表示设备为未激活状态(解绑成功)
 
-        String[] list=cmd.split(CMDSPLIT);
+        String[] list = cmd.split(CMDSPLIT);
 
-        if (list.length==4){
-            String index=list[2];
-            String type=list[3];
-            connection.send(AP68(index,type));
-            ICLogger.i("收到服务器消息:"+(type.equals("1")?"绑定成功 ":"未激活或者解绑"));
-            if (Config.custom_name.equals("YQ")||Config.custom_name.equals("YQ_EN")) {//AK-YQ
+        if (list.length == 4) {
+            String index = list[2];
+            String type = list[3];
+            connection.send(AP68(index, type));
+            ICLogger.i("收到服务器消息:" + (type.equals("1") ? "绑定成功 " : "未激活或者解绑"));
+            if (Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN")) {//AK-YQ
                 if (type.equals("1")) {
                     WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
 //                    runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success), 2);
-                    Util.ShowToast(runtime,runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success));
-                    Config.setNeedAntiOff(runtime.getContextProxy().context,true);
-                    Config.setNeedCutOff(runtime.getContextProxy().context,true);
+                    Util.ShowToast(runtime, runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success));
+                    Config.setNeedAntiOff(runtime.getContextProxy().context, true);
+                    Config.setNeedCutOff(runtime.getContextProxy().context, true);
                     runtime.setNeedAntioff(true);
                     runtime.setNeddReportCutoff(true);
                 } else {
                     WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
                     runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_unbind_success), 2);
-                    Config.setNeedAntiOff(runtime.getContextProxy().context,false);
-                    Config.setNeedCutOff(runtime.getContextProxy().context,false);
+                    Config.setNeedAntiOff(runtime.getContextProxy().context, false);
+                    Config.setNeedCutOff(runtime.getContextProxy().context, false);
                     runtime.setNeedAntioff(false);
                     runtime.setNeddReportCutoff(false);
                     //1 分钟后重置
@@ -1657,29 +1662,28 @@ public class protocol_ic {
                         public void run() {
                             Util.doMasterClear(runtime.getContextProxy().context);
                         }
-                    },5000);
+                    }, 5000);
                 }
             }
 
-        }else{
+        } else {
             ICLogger.i("BP86 format error!");
         }
 
     }
 
 
-
     //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86)
-    public static StringMessage AP86(String index){
+    public static StringMessage AP86(String index) {
 
         //设备响应:      IWAP86, 080835#
         //080835:指令流水号
-        return genStringMessage("AP86",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP86))
+        return genStringMessage("AP86", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP86))
                 .append(CMDSPLIT).append(index)
                 .append(CMDEND).toString());
     }
 
-    public void handleBP86(String cmd,Connection connection,Runtime runtime){
+    public void handleBP86(String cmd, Connection connection, Runtime runtime) {
 
         //示例:
         //IWBP86, 353456789012345, 080835,1,720#
@@ -1691,14 +1695,14 @@ public class protocol_ic {
         //1: 表示心率周期;2 :表示血压周期
         //720: 表示720分钟
 
-        String[] list=cmd.split(CMDSPLIT);
+        String[] list = cmd.split(CMDSPLIT);
 
-        if (list.length==5){
-            String index=list[2];
-            String type=list[3];
-            String cycle=list[4];
+        if (list.length == 5) {
+            String index = list[2];
+            String type = list[3];
+            String cycle = list[4];
             connection.send(AP86(index));
-            ICLogger.i("收到服务器指令:设置"+(type.equals("1")?"心率周期 ":"血压周期 ")+cycle+"分钟");
+            ICLogger.i("收到服务器指令:设置" + (type.equals("1") ? "心率周期 " : "血压周期 ") + cycle + "分钟");
 
             try {
                 //发送重置PPGCycle的广播,会在CoreServer里面执行
@@ -1707,81 +1711,82 @@ public class protocol_ic {
                 intent.setFlags(FLAG_INCLUDE_STOPPED_PACKAGES);
                 intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
                 runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START, intent);
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
+        } else {
             ICLogger.i("BP86 format error!");
         }
 
     }
 
     //IWBP87,http://cn.map20000.com/physicalReport.html?lang=zh-CN&imeis=866671044898063#
-    public static StringMessage AP87(){
+    public static StringMessage AP87() {
 
         //设备响应:      IWAP86, 080835#
         //080835:指令流水号
-        return genStringMessage("AP87",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP87))
+        return genStringMessage("AP87", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP87))
                 .append(CMDEND).toString());
     }
 
-    public void handleBP87(String cmd,Connection connection,Runtime runtime){
+    public void handleBP87(String cmd, Connection connection, Runtime runtime) {
 
         //IWBP87,http://cn.map20000.com/physicalReport.html?lang=zh-CN&imeis=866671044898063#
 
-        String[] list=cmd.split(CMDSPLIT);
+        String[] list = cmd.split(CMDSPLIT);
 
-        if (list.length==2){
-            String furl=list[1];//.replace("#","");
-            ICLogger.i("收到服务器指令 BP87:Qrcode url "+furl);
+        if (list.length == 2) {
+            String furl = list[1];//.replace("#","");
+            ICLogger.i("收到服务器指令 BP87:Qrcode url " + furl);
 //            connection.send(AP87());
             try {
-                String qrfilepath=Util.getLogfilePath(runtime,TimeUtil.getSystemDateYYMMDD());
-                Util.setSystemProperties(Config.KeyQRURIFILE,qrfilepath);
-                FileOutputStream fos=new FileOutputStream(new File(qrfilepath));
+                String qrfilepath = Util.getLogfilePath(runtime, TimeUtil.getSystemDateYYMMDD());
+                Util.setSystemProperties(Config.KeyQRURIFILE, qrfilepath);
+                FileOutputStream fos = new FileOutputStream(new File(qrfilepath));
                 fos.write(furl.getBytes());
                 fos.close();
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
+        } else {
             ICLogger.i("BP87 format error!");
         }
 
     }
-    public static StringMessage AP88(String index){
+
+    public static StringMessage AP88(String index) {
         //设备响应:      IWAP88, 080835#
         //080835:指令流水号
-        return genStringMessage("AP88",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88))
+        return genStringMessage("AP88", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88))
                 .append(CMDSPLIT).append(index)
                 .append(CMDEND).toString());
     }
 
-    public static void handleBP88(String cmd,Connection connection){
+    public static void handleBP88(String cmd, Connection connection) {
 //        IWBP88,080835#
-        String[] list=cmd.split(CMDSPLIT);
+        String[] list = cmd.split(CMDSPLIT);
 
-        if (list.length==2){
-            String index=list[1];
+        if (list.length == 2) {
+            String index = list[1];
             connection.send(AP88(index));
             ICLogger.i("收到服务器消息:查询设备");
 
-        }else{
+        } else {
             ICLogger.i("BP88 format error!");
         }
     }
 
     //18.18.设置心率/血压阀值(下行协议号:BP89,响应:AP89)
-    public static StringMessage AP89(String index){
+    public static StringMessage AP89(String index) {
 
         //设备响应:      IWAP89, 080835#
         //080835:指令流水号
-        return genStringMessage("AP89",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP89))
+        return genStringMessage("AP89", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP89))
                 .append(CMDSPLIT).append(index)
                 .append(CMDEND).toString());
     }
 
-    public void handleBP89(String cmd,Connection connection){
+    public void handleBP89(String cmd, Connection connection) {
 
         //示例:
         //IWBP89, 353456789012345, 080835,50,90,80,90,110,140#
@@ -1796,39 +1801,38 @@ public class protocol_ic {
         //90: 低压阀值,低压高于该阀值上传血压,如果未设置,则留空
         //110: 高压阀值,高压低于该阀值上传血压,如果未设置,则留空
         //140: 高压阀值,高压高于该阀值上传血压,如果未设置,则留空
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length==9){
-            String index=list[2];
-            String PPGH=list[3];
-            String PPGL=list[4];
-            String BPH_H=list[5];
-            String BPH_L=list[6];
-            String BPL_H=list[7];
-            String BPL_L=list[8];
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 9) {
+            String index = list[2];
+            String PPGH = list[3];
+            String PPGL = list[4];
+            String BPH_H = list[5];
+            String BPH_L = list[6];
+            String BPL_H = list[7];
+            String BPL_L = list[8];
             connection.send(AP89(index));
 
 
-            
-            ICLogger.i("收到服务器指令:心率/血压阀值 "+PPGH+","+PPGL+","+BPH_H+","+BPH_L+","+BPL_H+","+BPL_L);
-        }else{
+            ICLogger.i("收到服务器指令:心率/血压阀值 " + PPGH + "," + PPGL + "," + BPH_H + "," + BPH_L + "," + BPL_H + "," + BPL_L);
+        } else {
             ICLogger.i("BP89 format error!");
         }
 
     }
 
     //体温间隔测量 (后台测试体温)(下行协议号:BPTE,响应:APTE)
-    public static StringMessage APTE(String index,int freq){
+    public static StringMessage APTE(String index, int freq) {
 
         //设备响应:      IWAPTE,080835,60#
         //080835:指令流水号
         //1:表示设备接受数据成功,0表示设备接受数据失败
-        return genStringMessage("APTE",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTE))
+        return genStringMessage("APTE", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTE))
                 .append(CMDSPLIT).append(index)
                 .append(CMDSPLIT).append(freq)
                 .append(CMDEND).toString());
     }
 
-    public void handleBPTE(String cmd,Connection connection,Runtime runtime){
+    public void handleBPTE(String cmd, Connection connection, Runtime runtime) {
 
         //示例:
         //IWBPTE,353456789012345,080835,60#
@@ -1838,8 +1842,8 @@ public class protocol_ic {
         //353456789012345:IMEI号,设备唯一ID
         //080835 :指令流水号
         //60 : 上传间隔,单位分钟(60分钟上传一次体温,终端收到后立即开始测量一次并重置定时器)
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length==4){
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 4) {
             try {
                 String index = list[2];
                 String freqstr = list[3];
@@ -1850,53 +1854,52 @@ public class protocol_ic {
                 CoreService.getInstance().setTempAlarm();
 
 
-                if(runtime.check_stat_do_temp_test()) TemperatureUtil.doTempTestInThread();
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+                if (runtime.check_stat_do_temp_test()) TemperatureUtil.doTempTestInThread();
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
+        } else {
             ICLogger.i("BPTE format error!");
         }
 
     }
 
     //体温上行(上行协议号:APTP,响应:BPTP)
-    public static StringMessage APTP(double wrist_temp,double body_temp,double tempout){
+    public static StringMessage APTP(double wrist_temp, double body_temp, double tempout) {
 
         //设备:    IWAPTP,36.3,33,132#
         //IW:标识符
         //APTP : 命令字符
         //35.3:测量体温 (摄氏度)
         //33,132:温补用的参数,此处不用,可以用0 来代替。 目前是代表的腕温,室外温度
-        return genStringMessage(cmdMap.get(CMD_TYPE.APTP),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTP))
-                .append(CMDSPLIT).append(String.format("%1$.1f",body_temp))
-                .append(CMDSPLIT).append(String.format("%1$.1f",wrist_temp))
-                .append(CMDSPLIT).append(String.format("%1$.1f",tempout))
+        return genStringMessage(cmdMap.get(CMD_TYPE.APTP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTP))
+                .append(CMDSPLIT).append(String.format("%1$.1f", body_temp))
+                .append(CMDSPLIT).append(String.format("%1$.1f", wrist_temp))
+                .append(CMDSPLIT).append(String.format("%1$.1f", tempout))
                 .append(CMDEND).toString());
     }
 
-    public void handleBPTP(){
+    public void handleBPTP() {
 
         ICLogger.d("BPTP 服务器收到体温数据!");
 
     }
 
 
-    public static StringMessage APX1(String id){
+    public static StringMessage APX1(String id) {
         //设备响应:      IWAPX1, 080835#
         //080835:指令流水号
-        return genStringMessage("APX1",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APX1))
+        return genStringMessage("APX1", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APX1))
                 .append(CMDSPLIT).append(id)
                 .append(CMDEND).toString());
     }
 
     /**
-     *
      * @param cmd
      * @param connection
      * @param runtime
      */
-    public void handleBPX1(String cmd,Connection connection,Runtime runtime){
+    public void handleBPX1(String cmd, Connection connection, Runtime runtime) {
         //IWBPX1,353456789012345,080835,2,1,-3,0#
         //说明:
 //        IW:标识符
@@ -1907,14 +1910,14 @@ public class protocol_ic {
 //        1:高压修正值
 //                -3:低压修正值
 //        0:血氧修正值
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length==7){
-            String index=list[2];
-            String imei=list[1];
-            String strXL=list[3];
-            String strBPH=list[4];
-            String strBPL=list[5];
-            String strSpO2=list[6];
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 7) {
+            String index = list[2];
+            String imei = list[1];
+            String strXL = list[3];
+            String strBPH = list[4];
+            String strBPL = list[5];
+            String strSpO2 = list[6];
 
             connection.send(APX1(index));
 
@@ -1936,31 +1939,31 @@ public class protocol_ic {
                         .append(spo2_adjust).append(CMDSPLIT).toString();
                 Config.setPPG_ECG_adjustValue(ShareAdjValue);
                 ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", BPH " + strBPH + ", BPL " + strBPL + ", PPG " + strXL + ", Sp02 " + strSpO2 + " , Shared Adjust Value " + ShareAdjValue);
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
+        } else {
             ICLogger.i("BPX1 format error!");
         }
     }
 
 
-
-    public static StringMessage APS4(String id){
+    public static StringMessage APS4(String id) {
         //设备响应:      IWAPS4,080835#
         //080835:指令流水号
-        return genStringMessage("APS4",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4))
+        return genStringMessage("APS4", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4))
                 .append(CMDSPLIT).append(id)
                 .append(CMDEND).toString());
     }
 
     /**
      * 主要为久坐设置提醒时长。
+     *
      * @param cmd
      * @param connection
      * @param runtime
      */
-    public void handleBPS4(String cmd,Connection connection,Runtime runtime){
+    public void handleBPS4(String cmd, Connection connection, Runtime runtime) {
         //IWBPS4,353456789012345,080835,1|1234567|0900|1100|180, 2|1234567|0900|1100|180, 1|1234567|0900|1100|180#
         //说明:
 //        IW:标识符
@@ -1970,46 +1973,46 @@ public class protocol_ic {
 //        1|1234567|0900|1100|180:类型(1久坐,2喝水)|重复周期|开始时间|结束时间|时间间隔(单位秒)
 //        重复周期、开始结束时间格式 参考BP85闹钟设置,
 //#:结尾标识符
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length>=4){
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length >= 4) {
 
-            String index=list[2];
-            String imei=list[1];
+            String index = list[2];
+            String imei = list[1];
             connection.send(APS4(index));
 
             String setting1;
-            switch(list.length){
+            switch (list.length) {
                 case 10:
-                    setting1=list[9];
-                    ICLogger.i("set 7th alarm "+setting1);
+                    setting1 = list[9];
+                    ICLogger.i("set 7th alarm " + setting1);
                 case 9:
-                    setting1=list[8];
-                    ICLogger.i("set 6th alarm "+setting1);
+                    setting1 = list[8];
+                    ICLogger.i("set 6th alarm " + setting1);
                 case 8:
-                    setting1=list[7];
-                    ICLogger.i("set 5th alarm "+setting1);
+                    setting1 = list[7];
+                    ICLogger.i("set 5th alarm " + setting1);
                 case 7:
-                    setting1=list[6];
-                    ICLogger.i("set 4th alarm "+setting1);
+                    setting1 = list[6];
+                    ICLogger.i("set 4th alarm " + setting1);
                 case 6:
-                    setting1=list[5];
-                    ICLogger.i("set 3rd alarm "+setting1);
+                    setting1 = list[5];
+                    ICLogger.i("set 3rd alarm " + setting1);
                 case 5:
-                    setting1=list[4];
-                    ICLogger.i("set 2nt alarm "+setting1);
+                    setting1 = list[4];
+                    ICLogger.i("set 2nt alarm " + setting1);
                 case 4:
-                    setting1=list[3];
-                    ICLogger.i("set 1st alarm "+setting1);
+                    setting1 = list[3];
+                    ICLogger.i("set 1st alarm " + setting1);
                     break;
             }
 
-            ICLogger.i("Handle BPX1 IMEI "+imei+",index "+index+", get "+(list.length-3) +" settings");
-        }else{
+            ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", get " + (list.length - 3) + " settings");
+        } else {
             ICLogger.i("BPX1 format error!");
         }
     }
 
-    public static StringMessage APHP(Runtime ds){
+    public static StringMessage APHP(Runtime ds) {
         //IWAPHP,60,130,85,95,90, , , , , , , , #
         //IW:标识符
         //APHT : 命令字符
@@ -2019,7 +2022,7 @@ public class protocol_ic {
         //95:血氧
         //90:血糖
 //        本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
-        return genStringMessage(cmdMap.get(CMD_TYPE.APHP),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))
+        return genStringMessage(cmdMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))
                 .append(CMDSPLIT).append(ds.getHRS().getPPG())
                 .append(CMDSPLIT).append(ds.getHRS().getBPH())
                 .append(CMDSPLIT).append(ds.getHRS().getBPL())
@@ -2035,7 +2038,8 @@ public class protocol_ic {
                 .append(CMDSPLIT)
                 .append(CMDEND).toString());
     }
-    public static StringMessage APHP(int ppg,int bph, int bpl, int spo2){
+
+    public static StringMessage APHP(int ppg, int bph, int bpl, int spo2) {
         //IWAPHP,60,130,85,95,90, , , , , , , , #
         //IW:标识符
         //APHT : 命令字符
@@ -2045,7 +2049,7 @@ public class protocol_ic {
         //95:血氧
         //90:血糖
 //        本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
-        return genStringMessage(cmdMap.get(CMD_TYPE.APHP),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))
+        return genStringMessage(cmdMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))
                 .append(CMDSPLIT).append(ppg)
                 .append(CMDSPLIT).append(bph)
                 .append(CMDSPLIT).append(bpl)
@@ -2063,25 +2067,25 @@ public class protocol_ic {
     }
 
 
-    public void handleBPHP(){
+    public void handleBPHP() {
 
         ICLogger.i("服务器收到APHP 心率血压血氧 !");
 
     }
 
-    public static StringMessage APDE(String id){
+    public static StringMessage APDE(String id) {
         /***
          * 示例:
-        * 设备响应:      IWAPDE,080835#
+         * 设备响应:     IWAPDE,080835#
          * 080835:指令流水号
          * 说明:   本消息适用所有终端
          */
-        return genStringMessage("APDE",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APDE))
+        return genStringMessage("APDE", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APDE))
                 .append(CMDSPLIT).append(id)
                 .append(CMDEND).toString());
     }
 
-    public void handleBPDE(Connection connection,String cmd,Runtime runtime){
+    public void handleBPDE(Connection connection, String cmd, Runtime runtime) {
 /***
  * 示例:
  * IWBPDE,867400020316612,853676,0
@@ -2096,11 +2100,11 @@ public class protocol_ic {
  * 080835:指令流水号
  * 说明:   本消息适用所有终端
  */
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length==4){
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 4) {
 
-            String index=list[2];
-            String msg=list[3];
+            String index = list[2];
+            String msg = list[3];
             connection.send(APDE(index));
             try {
                 if (Integer.parseInt(msg) == 0) {
@@ -2114,22 +2118,23 @@ public class protocol_ic {
 //                Util.ShowToast(runtime,"");
                     runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_cross_boundary), 0);
                 }
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
+        } else {
             ICLogger.i("BPDE format error!");
         }
 
 
     }
-    public static StringMessage APDG(String id){
-        return genStringMessage("APDG",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APDG))
+
+    public static StringMessage APDG(String id) {
+        return genStringMessage("APDG", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APDG))
                 .append(CMDSPLIT).append(id)
                 .append(CMDEND).toString());
     }
 
-    public void handleBPDG(Connection connection,String cmd,Runtime runtime){
+    public void handleBPDG(Connection connection, String cmd, Runtime runtime) {
 /**
  * 示例:
  * IWBPDG,353456789012345,1,30.0,37.3 #
@@ -2143,8 +2148,8 @@ public class protocol_ic {
  * 37.3: 高温阀值
  * #:结尾标识符
  * */
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length==6){
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 6) {
 
             try {
                 String index = list[2];
@@ -2160,11 +2165,11 @@ public class protocol_ic {
                     ICLogger.i("Handle BPDG index " + index + ", 体温报警阈值关 ");
                     Config.needTemperature_abnormal_alarm = false;
                 }
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
 
-        }else{
+        } else {
             ICLogger.i("BPDG format error!");
         }
     }
@@ -2180,7 +2185,7 @@ public class protocol_ic {
      * @param amrdata  文件分包内容数据
      * @return
      */
-    public static byte[] APTU(String  packetTime,int filetype, int datatype ,int count,int index,int datalen,byte[] amrdata){
+    public static byte[] APTU(String packetTime, int filetype, int datatype, int count, int index, int datalen, byte[] amrdata) {
         /**
          * 10.设备录音图片(设备上行)(上行协议:APTU,响应:BPTU)
          * 示例:
@@ -2204,26 +2209,26 @@ public class protocol_ic {
          * 收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。
          * 如果设备回复确认数据包接收失败状态,则重复发送上一个数据包
          */
-        String sb=new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTU))
+        String sb = new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTU))
                 .append(CMDSPLIT)
                 .append(CMDSPLIT).append(packetTime)
                 .append(CMDSPLIT).append(filetype)
                 .append(CMDSPLIT).append(datatype)
                 .append(CMDSPLIT).append(count)
                 .append(CMDSPLIT).append(index)
-                .append(CMDSPLIT).append(datalen*2)
+                .append(CMDSPLIT).append(datalen * 2)
                 .append(CMDSPLIT).toString();
 
-        byte[] sentbuf=new byte[sb.length()+datalen*2+1];
-        byte[] amrdata2=Util.bytesToHexString(amrdata).getBytes();
-        System.arraycopy(sb.getBytes(),0,sentbuf,0,sb.length());
-        System.arraycopy(amrdata2,0,sentbuf,sb.length(),datalen*2);
-        sentbuf[sb.length()+datalen*2]='#';
+        byte[] sentbuf = new byte[sb.length() + datalen * 2 + 1];
+        byte[] amrdata2 = Util.bytesToHexString(amrdata).getBytes();
+        System.arraycopy(sb.getBytes(), 0, sentbuf, 0, sb.length());
+        System.arraycopy(amrdata2, 0, sentbuf, sb.length(), datalen * 2);
+        sentbuf[sb.length() + datalen * 2] = '#';
         return sentbuf;
     }
 
 
-    public void handleBPTU(String cmd , Connection connection ){
+    public void handleBPTU(String cmd, Connection connection) {
 /***
  * 平台响应
  * IWBPTU,6654111,080835,1,1,6,1,1#
@@ -2237,8 +2242,8 @@ public class protocol_ic {
  * 1:当前包序号
  * 1:成功 (0:失败)
  */
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==8){
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 8) {
             try {
                 String time = cmdlist[2];
                 String filetype = cmdlist[3];
@@ -2259,15 +2264,15 @@ public class protocol_ic {
                 }
                 //发送消息,再次检查要发送的语音包,确认其发送完毕
                 connection.DeliverCMDMessageToSystem("SentVoicePacket", "SentBPFilePacket");
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
+        } else {
             ICLogger.i(" BPTU Format error!");
         }
     }
 
-    public static StringMessage APSL(String date,int deepsleep,int lightsleep,int score){
+    public static StringMessage APSL(String date, int deepsleep, int lightsleep, int score) {
 /***
  * 示例:
  * IWAPSL,20200803,240,120,90#
@@ -2286,24 +2291,23 @@ public class protocol_ic {
  * 换算分数后发送到服务器
  * #:结束符
  */
-        String sb=new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APSL))
+        String sb = new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APSL))
                 .append(CMDSPLIT).append(date)
                 .append(CMDSPLIT).append(deepsleep)
                 .append(CMDSPLIT).append(lightsleep)
                 .append(CMDSPLIT).append(score)
                 .append(CMDEND).toString();
-        return genStringMessage(cmdMap.get(CMD_TYPE.APSL),sb);
+        return genStringMessage(cmdMap.get(CMD_TYPE.APSL), sb);
     }
 
-    public static StringMessage AP46(String id,String cmd)
-    {
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP46),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP46))
+    public static StringMessage AP46(String id, String cmd) {
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP46), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP46))
                 .append(CMDSPLIT).append(id)
                 .append(CMDSPLIT).append(cmd)
                 .append(CMDEND).toString());
     }
 
-    public void handleBP46(String cmd , Connection connection,Runtime runtime) {
+    public void handleBP46(String cmd, Connection connection, Runtime runtime) {
 /***
  * IWBP46,353456789012345,080835,1,[参数]#
  * 说明:
@@ -2319,16 +2323,16 @@ public class protocol_ic {
  * 1 成功 0失败
  * # 结尾标识符
  */
-        String[] cmdlist=cmd.split(CMDSPLIT);
+        String[] cmdlist = cmd.split(CMDSPLIT);
 
-        if (cmdlist.length>=4 ){
-            String imei=cmdlist[1];
-            String id=cmdlist[2];
-            String cdd=cmdlist[3];
-            if (cmdlist.length==5) {
+        if (cmdlist.length >= 4) {
+            String imei = cmdlist[1];
+            String id = cmdlist[2];
+            String cdd = cmdlist[3];
+            if (cmdlist.length == 5) {
                 String tmp = cmdlist[4];
             }
-            connection.send(AP46(id,cdd));
+            connection.send(AP46(id, cdd));
             Context context = mRuntime.getContextProxy().context.getApplicationContext();
             if (cdd.equals("1")) {
                 //delay 启动
@@ -2345,29 +2349,28 @@ public class protocol_ic {
                     }
                 });
 
-            }else if(cdd.equals("2")){
+            } else if (cdd.equals("2")) {
                 Intent intent = new Intent();
                 intent.setAction(DIALOG_ACTION);
                 intent.putExtra("takephoto", "Take Photo !");
                 context.sendBroadcast(intent);
             }
-        }else{
+        } else {
             ICLogger.i(" BP46 Format error!");
         }
 
     }
 
 
-    public static StringMessage APDH(String id,String cmd)
-    {
-        return genStringMessage("APDH",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APDH))
+    public static StringMessage APDH(String id, String cmd) {
+        return genStringMessage("APDH", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APDH))
                 .append(CMDSPLIT).append(id)
                 .append(CMDSPLIT).append(cmd)
                 .append(CMDEND).toString());
     }
 
 
-    public void handleBPDH( Connection connection,Runtime runtime,String cmd) {
+    public void handleBPDH(Connection connection, Runtime runtime, String cmd) {
         /***
          * IWBPDH,353456789012345,080835,1,[参数]#
          * 说明:
@@ -2384,30 +2387,29 @@ public class protocol_ic {
          * # 结尾标识符
          */
 
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==5){
-            String imei=cmdlist[1];
-            String id=cmdlist[2];
-            String cdd=cmdlist[3];
-            String tmp=cmdlist[4];
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 5) {
+            String imei = cmdlist[1];
+            String id = cmdlist[2];
+            String cdd = cmdlist[3];
+            String tmp = cmdlist[4];
 
-            tmp=tmp.replace(CMDEND,"").trim();
+            tmp = tmp.replace(CMDEND, "").trim();
 
-            if (tmp.isEmpty()) tmp="15";
-            connection.send(APDH(id,cdd));
+            if (tmp.isEmpty()) tmp = "15";
+            connection.send(APDH(id, cdd));
 
             if (cdd.equals("1")) {
                 //delay 启动
 //                Context context = mRuntime.getContextProxy().context.getApplicationContext();
-                CoreService.getInstance().DevliverStringMessage("StartMonitor",tmp);
+                CoreService.getInstance().DevliverStringMessage("StartMonitor", tmp);
             }
-        }else{
+        } else {
             ICLogger.i(" BPDH Format error!");
         }
     }
 
-    public static StringMessage APTQ(Runtime runtime)
-    {
+    public static StringMessage APTQ(Runtime runtime) {
         /**
          * IWAPTQ,460,0,9520,3671,0#
          * APTQ : 命令字符
@@ -2417,12 +2419,11 @@ public class protocol_ic {
         //或者仅仅使用 locale = Locale.getDefault(); 不需要考虑接口 deprecated(弃用)问题
         Locale locale = Locale.getDefault();
         String lang = locale.getLanguage() + "-" + locale.getCountry();
-        int language=0;
-        if(!lang.contains("zh"))
-        {
-            language=1;
+        int language = 0;
+        if (!lang.contains("zh")) {
+            language = 1;
         }
-        return genStringMessage("APTQ",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTQ))
+        return genStringMessage("APTQ", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTQ))
                 .append(CMDSPLIT).append(runtime.getLocationInstance().getMCC())
                 .append(CMDSPLIT).append(runtime.getLocationInstance().getMNC())
                 .append(CMDSPLIT).append(runtime.getLocationInstance().getLAC())
@@ -2432,7 +2433,7 @@ public class protocol_ic {
     }
 
 
-    public void handleBPTQ( Connection connection,Runtime runtime,String cmd) {
+    public void handleBPTQ(Connection connection, Runtime runtime, String cmd) {
         /***
          *
          * IWBPTQ,20-10-11,19:32:02,6674,32,27,22,30,20-10-12,19:32:02,6674,32,27,22,30,20-10-13,19:32:02,6674,32,27,22,30,53575C71533A
@@ -2490,60 +2491,58 @@ public class protocol_ic {
          * 47:局部雷阵雨
          */
 
-        log("BPTQ "+cmd);
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==23){
-
-            StringBuilder sb=new StringBuilder();
-            StringBuilder msg=new StringBuilder();
-            for(int i=0;i<3;i++) {
-                String DayTime = cmdlist[1+i*7] + " " + cmdlist[2+i*7];
-                String date= "20"+cmdlist[1+i*7].trim();
-                String weather_name = Util.decodeUnicode2Utf8(cmdlist[3+i*7].trim());
-                String weather_id = cmdlist[4+i*7];
-                String temp_current = cmdlist[5+i*7];
-                String temp_high = cmdlist[6+i*7];
-                String temp_low = cmdlist[7+i*7];
-
-                sb.append(" "+DayTime);
-                sb.append(",天气:"+weather_name);
-                sb.append(",ID "+weather_id);
-                sb.append(",当前温度 "+temp_current);
-                sb.append(",最高温度 "+temp_high);
-                sb.append(",最低温度 "+temp_low);
+        log("BPTQ " + cmd);
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 23) {
+
+            StringBuilder sb = new StringBuilder();
+            StringBuilder msg = new StringBuilder();
+            for (int i = 0; i < 3; i++) {
+                String DayTime = cmdlist[1 + i * 7] + " " + cmdlist[2 + i * 7];
+                String date = "20" + cmdlist[1 + i * 7].trim();
+                String weather_name = Util.decodeUnicode2Utf8(cmdlist[3 + i * 7].trim());
+                String weather_id = cmdlist[4 + i * 7];
+                String temp_current = cmdlist[5 + i * 7];
+                String temp_high = cmdlist[6 + i * 7];
+                String temp_low = cmdlist[7 + i * 7];
+
+                sb.append(" " + DayTime);
+                sb.append(",天气:" + weather_name);
+                sb.append(",ID " + weather_id);
+                sb.append(",当前温度 " + temp_current);
+                sb.append(",最高温度 " + temp_high);
+                sb.append(",最低温度 " + temp_low);
                 sb.append("\n");
 
                 msg.append(date);
-                msg.append(","+weather_name);
-                msg.append(","+weather_id);
-                msg.append(","+temp_current);
-                msg.append(","+temp_high);
-                msg.append(","+temp_low);
+                msg.append("," + weather_name);
+                msg.append("," + weather_id);
+                msg.append("," + temp_current);
+                msg.append("," + temp_high);
+                msg.append("," + temp_low);
                 msg.append(";");
             }
-            String City=Util.decodeUnicode2Utf8(cmdlist[22]);
+            String City = Util.decodeUnicode2Utf8(cmdlist[22]);
 
-            ICLogger.i(City+" \n"+sb.toString());
+            ICLogger.i(City + " \n" + sb.toString());
 
-            msg.insert(0,City+";");
-            String weatherstr=msg.toString();
-            if (weatherstr.endsWith(";"))
-            {
-                weatherstr=weatherstr.substring(0,weatherstr.lastIndexOf(";"));
+            msg.insert(0, City + ";");
+            String weatherstr = msg.toString();
+            if (weatherstr.endsWith(";")) {
+                weatherstr = weatherstr.substring(0, weatherstr.lastIndexOf(";"));
             }
-            Intent intent=new Intent(Constants.ACTION_WEATHER_RECEIVED);
-            intent.putExtra(Constants.KEY_Weather,weatherstr);
-            ICLogger.i("send Broadcast "+ Constants.ACTION_WEATHER_RECEIVED +"\n"+weatherstr+"\n");
+            Intent intent = new Intent(Constants.ACTION_WEATHER_RECEIVED);
+            intent.putExtra(Constants.KEY_Weather, weatherstr);
+            ICLogger.i("send Broadcast " + Constants.ACTION_WEATHER_RECEIVED + "\n" + weatherstr + "\n");
             CoreService.getInstance().sendBroadcast(intent);
 
-        }else{
+        } else {
             ICLogger.i(" BPTQ Format error!");
         }
     }
 
 
-
-    public static StringMessage AP94( ){
+    public static StringMessage AP94() {
         /***
          * 15确认已读文字(上行协议号:AP94,响应:BP94)
          * 示例:
@@ -2559,7 +2558,7 @@ public class protocol_ic {
          */
 
         //在UI逻辑中,只要有处理就都是已经阅读。所以不存在取消阅读的说法。
-        return genStringMessage(cmdMap.get(protocol_ic.CMD_TYPE.AP94),new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_ic.CMD_TYPE.AP94))
+        return genStringMessage(cmdMap.get(protocol_ic.CMD_TYPE.AP94), new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_ic.CMD_TYPE.AP94))
                 .append(CMDSPLIT).append(Runtime.PushtxtMsg_srv_index)
                 .append(CMDSPLIT).append("1")
                 .append(CMDEND).toString());
@@ -2567,9 +2566,8 @@ public class protocol_ic {
     }
 
 
-    public static StringMessage APAT(String id,String cmd)
-    {
-        return genStringMessage("APAT",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APAT))
+    public static StringMessage APAT(String id, String cmd) {
+        return genStringMessage("APAT", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APAT))
                 .append(CMDSPLIT).append(id)
                 .append(CMDSPLIT).append(cmd)
                 .append(CMDEND).toString());
@@ -2581,7 +2579,7 @@ public class protocol_ic {
      * @param runtime
      * @param cmd
      */
-    public void handleBPAT( Connection connection,Runtime runtime,String cmd) {
+    public void handleBPAT(Connection connection, Runtime runtime, String cmd) {
 /***
  * IWBPAT,353456789012345,080835,1#
  * 说明:是否提示表带是否连接的开关,即剪断报警开关
@@ -2595,48 +2593,45 @@ public class protocol_ic {
  * 1: 剪断开关状态(实际上与下行的命令一致)
  */
 
-        log("BPAT "+cmd);
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==4){
+        log("BPAT " + cmd);
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 4) {
 
-            String imei=cmdlist[1];
-            String id=cmdlist[2];
-            String cmdid=cmdlist[3];
-            connection.send(APAT(id,cmdid));
-            if(cmdid.trim().equals("1")){
+            String imei = cmdlist[1];
+            String id = cmdlist[2];
+            String cmdid = cmdlist[3];
+            connection.send(APAT(id, cmdid));
+            if (cmdid.trim().equals("1")) {
                 WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
 //                    runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success), 2);
-                Util.ShowToast(runtime,runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success));
-                Config.setNeedAntiOff(runtime.getContextProxy().context,true);
-                Config.setNeedCutOff(runtime.getContextProxy().context,true);
+                Util.ShowToast(runtime, runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success));
+                Config.setNeedAntiOff(runtime.getContextProxy().context, true);
+                Config.setNeedCutOff(runtime.getContextProxy().context, true);
                 runtime.setNeedAntioff(true);
                 runtime.setNeddReportCutoff(true);
             } else {
                 WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
                 runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_unbind_success), 2);
-                Config.setNeedAntiOff(runtime.getContextProxy().context,false);
-                Config.setNeedCutOff(runtime.getContextProxy().context,false);
+                Config.setNeedAntiOff(runtime.getContextProxy().context, false);
+                Config.setNeedCutOff(runtime.getContextProxy().context, false);
                 runtime.setNeedAntioff(false);
                 runtime.setNeddReportCutoff(false);
             }
-        }else{
+        } else {
             ICLogger.i(" BPAT Format error!");
         }
     }
 
 
-    public static StringMessage APCH(int charging)
-    {
-        return genStringMessage("APCH",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APCH))
+    public static StringMessage APCH(int charging) {
+        return genStringMessage("APCH", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APCH))
                 .append(CMDSPLIT).append(charging)
                 .append(CMDEND).toString());
     }
 
 
-
-    public static StringMessage APBT(String id,String cycle)
-    {
-        return genStringMessage("APBT",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APBT))
+    public static StringMessage APBT(String id, String cycle) {
+        return genStringMessage("APBT", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APBT))
                 .append(CMDSPLIT).append(id)
                 .append(CMDSPLIT).append(cycle)
                 .append(CMDEND).toString());
@@ -2648,7 +2643,7 @@ public class protocol_ic {
      * @param runtime
      * @param cmd
      */
-    public void handleBPBT( Connection connection,Runtime runtime,String cmd) {
+    public void handleBPBT(Connection connection, Runtime runtime, String cmd) {
 /***
  * IWBPBT,353456789012345,080835,1#
  * 说明:设置蓝牙扫描周期,单位时间分钟
@@ -2662,24 +2657,24 @@ public class protocol_ic {
  * 1: 剪断开关状态(实际上与下行的命令一致)
  */
 
-        log("BPBT "+cmd);
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==4){
-            String id=cmdlist[2];
-            String cycle=cmdlist[3].replace("#","");
-            connection.send(APBT(id,cycle));
-
-            if(Util.isNumeric(cycle)){
-                int intcycle=Integer.parseInt(cycle);
-                Config.setBleScanCycle(runtime.getContextProxy().context,intcycle);
-                runtime.bleInfo.bleScanCycle=intcycle;
-                ICLogger.i("设置蓝牙扫描周期 "+intcycle+" 秒");
+        log("BPBT " + cmd);
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 4) {
+            String id = cmdlist[2];
+            String cycle = cmdlist[3].replace("#", "");
+            connection.send(APBT(id, cycle));
+
+            if (Util.isNumeric(cycle)) {
+                int intcycle = Integer.parseInt(cycle);
+                Config.setBleScanCycle(runtime.getContextProxy().context, intcycle);
+                runtime.bleInfo.bleScanCycle = intcycle;
+                ICLogger.i("设置蓝牙扫描周期 " + intcycle + " 秒");
                 CoreService.getInstance().setBleScanAlarm(intcycle);
-            }else{
+            } else {
                 ICLogger.i(" BPBT Format error!");
             }
 
-        }else{
+        } else {
             ICLogger.i(" BPBT Format error!");
         }
     }
@@ -2695,9 +2690,9 @@ public class protocol_ic {
          * IWAPBR,IMEI,yyyyMMddHHmmss,beaconCount,major0,minor0,mac0,rssi0,major1,minor1,mac1,rssi1...#
          */
         if (runtime.bleInfo.btScanResult.size() > 0) {
-            StringBuffer sb=new StringBuffer();
+            StringBuffer sb = new StringBuffer();
             sb.append(runtime.bleInfo.btScanResult.size());
-            for(String it:runtime.bleInfo.btScanResult){
+            for (String it : runtime.bleInfo.btScanResult) {
                 sb.append(CMDSPLIT).append(it);
             }
             return genStringMessage("APBR", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APBR))
@@ -2706,18 +2701,19 @@ public class protocol_ic {
                     .append(CMDSPLIT).append(sb.toString())
                     .append(CMDEND).toString());
 
-        }else{
+        } else {
             return null;
         }
     }
-    public static StringMessage APBS(String id,String cycle)
-    {
-        return genStringMessage("APBS",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APBS))
+
+    public static StringMessage APBS(String id, String cycle) {
+        return genStringMessage("APBS", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APBS))
                 .append(CMDSPLIT).append(id)
                 .append(CMDSPLIT).append(cycle)
                 .append(CMDEND).toString());
     }
-    public void handleBPBS( Connection connection,Runtime runtime,String cmd) {
+
+    public void handleBPBS(Connection connection, Runtime runtime, String cmd) {
 /***
  * IWBPBS,353456789012345,080835,150&151#
  * 说明:设置蓝牙扫描绑定的 major id
@@ -2730,23 +2726,24 @@ public class protocol_ic {
  * 080835:指令流水号
  * 1: 成功,0失败
  */
-        log("BPBS "+cmd);
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==4){
-            String id=cmdlist[2];
-            connection.send(APBS(id,"1"));
-
-            ICLogger.i("设置蓝牙扫描绑定MajorID "+cmdlist[3]+" ");
-            String[] majorlist=cmdlist[3].split("&");
+        log("BPBS " + cmd);
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 4) {
+            String id = cmdlist[2];
+            connection.send(APBS(id, "1"));
+
+            ICLogger.i("设置蓝牙扫描绑定MajorID " + cmdlist[3] + " ");
+            String[] majorlist = cmdlist[3].split("&");
             runtime.bleInfo.btMajorList.clear();
-            for(int i=0;i<majorlist.length;i++){
+            for (int i = 0; i < majorlist.length; i++) {
                 runtime.bleInfo.btMajorList.add(majorlist[i]);
             }
 
-        }else{
+        } else {
             ICLogger.i(" BPBS Format error!");
         }
     }
+
     /**
      * 85.设置联系人白名单(10个)(下行协议:BPWL,响应:APWL)
      * 示例:
@@ -2762,8 +2759,8 @@ public class protocol_ic {
      * D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx回复设备当前设置的主控号码供平台同步使用
      * 说明:       本消息适用所有终端
      */
-    public static StringMessage  APWL(String index,String[] phnumbs){
-        return genStringMessage("APWL",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APWL))
+    public static StringMessage APWL(String index, String[] phnumbs) {
+        return genStringMessage("APWL", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APWL))
                 .append(CMDSPLIT).append(index)
                 .append(CMDSPLIT).append(phnumbs[0])
                 .append(CMDSPLIT).append(phnumbs[1])
@@ -2777,8 +2774,9 @@ public class protocol_ic {
                 .append(CMDSPLIT).append(phnumbs[9])
                 .append(CMDEND).toString());
     }
+
     //设置通讯录,白名单(10个)
-    public void handleBPWL(Connection connection,String cmd , Runtime runtime){
+    public void handleBPWL(Connection connection, String cmd, Runtime runtime) {
 //        IWBPWL,867155030001063,357444,9b44529b|13554820016,,,,,,,,,
 /**
  * IWBPWL,353456789012345,080835,
@@ -2793,62 +2791,62 @@ public class protocol_ic {
  * D3590D54|135xxxxxxxxxx,
  * D3590D54|135xxxxxxxxxx#
  */
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        String[] phnums=new String[]{"","","","","","","","","",""};
-        StringBuffer sb=new StringBuffer().append("recv phone Numbs ");
-        if (cmdlist.length>=3){
-            switch (cmdlist.length){
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        String[] phnums = new String[]{"", "", "", "", "", "", "", "", "", ""};
+        StringBuffer sb = new StringBuffer().append("recv phone Numbs ");
+        if (cmdlist.length >= 3) {
+            switch (cmdlist.length) {
                 case 13:
-                    phnums[9]=cmdlist[12];
+                    phnums[9] = cmdlist[12];
                     sb.append(phnums[9]).append(",");
                 case 12:
-                    phnums[8]=cmdlist[11];
+                    phnums[8] = cmdlist[11];
                     sb.append(phnums[8]).append(",");
                 case 11:
-                    phnums[7]=cmdlist[10];
+                    phnums[7] = cmdlist[10];
                     sb.append(phnums[7]).append(",");
                 case 10:
-                    phnums[6]=cmdlist[9];
+                    phnums[6] = cmdlist[9];
                     sb.append(phnums[6]).append(",");
                 case 9:
-                    phnums[5]=cmdlist[8];
+                    phnums[5] = cmdlist[8];
                     sb.append(phnums[5]).append(",");
                 case 8:
-                    phnums[4]=cmdlist[7];
+                    phnums[4] = cmdlist[7];
                     sb.append(phnums[4]).append(",");
                 case 7:
-                    phnums[3]=cmdlist[6];
+                    phnums[3] = cmdlist[6];
                     sb.append(phnums[3]).append(",");
                 case 6:
-                    phnums[2]=cmdlist[5];
+                    phnums[2] = cmdlist[5];
                     sb.append(phnums[2]).append(",");
                 case 5:
-                    phnums[1]=cmdlist[4];
+                    phnums[1] = cmdlist[4];
                     sb.append(phnums[1]).append(",");
                 case 4:
-                    phnums[0]=cmdlist[3];
+                    phnums[0] = cmdlist[3];
                     sb.append(phnums[0]).append(",");
 
             }
 
-            String index=cmdlist[2];
+            String index = cmdlist[2];
             ICLogger.i(sb.toString());
-            connection.send(APWL(index,phnums));
-            ArrayList<Contact> contactArray=new ArrayList<Contact>();
+            connection.send(APWL(index, phnums));
+            ArrayList<Contact> contactArray = new ArrayList<Contact>();
 
-            if(Config.custom_name.equals("YT")) {
+            if (Config.custom_name.equals("YT")) {
                 ICLogger.i("=====add hotline 96885 ");
                 contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));
             }
-            for (int i=0; i< phnums.length;i++){
-                String[] tmp= phnums[i].split("\\|");
-                if (tmp.length==2){
-                    String name= Util.decodeUnicode2Utf8(tmp[0]);
-                    String phonem=tmp[1];
-                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem);
-                    contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));
-                }else{
-                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length);
+            for (int i = 0; i < phnums.length; i++) {
+                String[] tmp = phnums[i].split("\\|");
+                if (tmp.length == 2) {
+                    String name = Util.decodeUnicode2Utf8(tmp[0]);
+                    String phonem = tmp[1];
+                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length + " , name=" + name + ",-" + phonem);
+                    contactArray.add(new Contact(Contact.CATEGORY_CALL, name, phonem));
+                } else {
+                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length);
 
                 }
             }
@@ -2857,26 +2855,23 @@ public class protocol_ic {
 //            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));
 //            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));
 
-            runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false);
+            runtime.getDbHelper().saveContacts(contactArray, false, false, true, false, false, false);
 
-        }else{
+        } else {
             ICLogger.i(" BPWL format error!");
         }
 
     }
 
 
-
-
-    public static StringMessage AP65(String id,String cy)
-    {
-        return genStringMessage("AP65",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP65))
+    public static StringMessage AP65(String id, String cy) {
+        return genStringMessage("AP65", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP65))
                 .append(CMDSPLIT).append(id)
                 .append(CMDSPLIT).append(cy)
                 .append(CMDEND).toString());
     }
 
-    public void handleBP65( Connection connection,Runtime runtime,String cmd) {
+    public void handleBP65(Connection connection, Runtime runtime, String cmd) {
 /***
  * 36.音量设置(下行协议:BP65,响应:AP65)
  * 示例:
@@ -2892,43 +2887,42 @@ public class protocol_ic {
  * 1: 表示指令执行成功,音量等级为1
  */
 
-        log("BP65 "+cmd);
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==4){
-            String id=cmdlist[2];
-            String cycle=cmdlist[3].replace("#","");
-            connection.send(AP65(id,cycle));
+        log("BP65 " + cmd);
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 4) {
+            String id = cmdlist[2];
+            String cycle = cmdlist[3].replace("#", "");
+            connection.send(AP65(id, cycle));
 
-            if(Util.isNumeric(cycle)){
-                int mastervolume=Integer.parseInt(cycle);
+            if (Util.isNumeric(cycle)) {
+                int mastervolume = Integer.parseInt(cycle);
 
-                ICLogger.i("设置音量 "+mastervolume);
+                ICLogger.i("设置音量 " + mastervolume);
                 //实际设备音量 0~15  协议音量0~7需要转换
-                int volume=mastervolume*2;
-                if (volume<0)volume=0;
-                if(volume>=14) volume=15;
-                Config.setMasterVolume(runtime.getContextProxy().context,mastervolume*2);
-                ICAudioManager.setMasterVolumn(runtime.getContextProxy().context,mastervolume*2);
+                int volume = mastervolume * 2;
+                if (volume < 0) volume = 0;
+                if (volume >= 14) volume = 15;
+                Config.setMasterVolume(runtime.getContextProxy().context, mastervolume * 2);
+                ICAudioManager.setMasterVolumn(runtime.getContextProxy().context, mastervolume * 2);
 
-            }else{
+            } else {
                 ICLogger.i(" BP65 Format error!");
             }
 
-        }else{
+        } else {
             ICLogger.i(" BP65 Format error!");
         }
     }
 
-    public static StringMessage AP47(String id,String cycle)
-    {
-        return genStringMessage("AP47",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP47))
+    public static StringMessage AP47(String id, String cycle) {
+        return genStringMessage("AP47", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP47))
                 .append(CMDSPLIT).append(id)
                 .append(CMDSPLIT).append(cycle)
                 .append(CMDEND).toString());
     }
 
 
-    public void handleBP47( Connection connection,Runtime runtime,String cmd) {
+    public void handleBP47(Connection connection, Runtime runtime, String cmd) {
 /***
  * 37.震动设置(下行协议号:BP47,响应:AP47)
  * 示例:
@@ -2944,263 +2938,264 @@ public class protocol_ic {
  * 1:表示设备执行成功,0 表示设备执行失败
  */
 
-        log("BP47 "+cmd);
-        String[] cmdlist=cmd.split(CMDSPLIT);
-        if (cmdlist.length==4){
-            String id=cmdlist[2];
-            String cycle=cmdlist[3].replace("#","");
-            connection.send(AP47(id,cycle));
+        log("BP47 " + cmd);
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 4) {
+            String id = cmdlist[2];
+            String cycle = cmdlist[3].replace("#", "");
+            connection.send(AP47(id, cycle));
 
-            if(Util.isNumeric(cycle)){
-                int vibduration=Integer.parseInt(cycle);
-                ICLogger.i("设置震动时长 "+vibduration+" 秒");
-                Config.setDurationOfVibration(runtime.getContextProxy().context,vibduration);
-                VibrateUtil.setVibPattern(vibduration*1000);
+            if (Util.isNumeric(cycle)) {
+                int vibduration = Integer.parseInt(cycle);
+                ICLogger.i("设置震动时长 " + vibduration + " 秒");
+                Config.setDurationOfVibration(runtime.getContextProxy().context, vibduration);
+                VibrateUtil.setVibPattern(vibduration * 1000);
 
-            }else{
+            } else {
                 ICLogger.i(" BP47 Format error!");
             }
 
-        }else{
+        } else {
             ICLogger.i(" BP47 Format error!");
         }
     }
+
     public boolean handleCmd(CMD_TYPE type, String cmd) {
 
-           //普通非二进制命令用此函数处理
-        boolean ret=true;
-        ICLogger.i("handleCmd "+type.name() + " strLen="+cmd.length());
-        if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd);
-        cmd=cmd.replace(" ","");
-        switch (type){
+        //普通非二进制命令用此函数处理
+        boolean ret = true;
+        ICLogger.i("handleCmd " + type.name() + " strLen=" + cmd.length());
+        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + cmd);
+        cmd = cmd.replace(" ", "");
+        switch (type) {
             case BP00: //登录包
-                handleBP00(mRuntime,cmd);
+                handleBP00(mRuntime, cmd);
                 ICLogger.i("服务器收到登录包AP00");
-                mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化
                 break;
             case BP01: //gps定位包
                 handleBP01(cmd);
                 ICLogger.i("服务器收到定位AP01");
-                mConnection.DeliverCMDMessageToSystem("AP01",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程状态变化
                 break;
             case BP02:// wifi定位包
                 handleBP02(cmd);
                 ICLogger.i("服务器收到定位AP02");
-                mConnection.DeliverCMDMessageToSystem("AP02",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("AP02", cmd);//通知下面线程状态变化
                 break;
             case BP03: //心跳包
                 handleBP03(cmd);
                 ICLogger.i("服务器收到心跳包AP03");
-                mConnection.DeliverCMDMessageToSystem("heartbeat",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("heartbeat", cmd);//通知下面线程状态变化
                 break;
 
             case BP07:
                 //收到发送的语音包
-                handleBP07(cmd,mConnection);
+                handleBP07(cmd, mConnection);
                 break;
             case BP10:
                 //报警包
-                mConnection.DeliverCMDMessageToSystem("AP10",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("AP10", cmd);//通知下面线程状态变化
                 break;
             case BPBR:
-                mConnection.DeliverCMDMessageToSystem("APBR",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APBR", cmd);//通知下面线程状态变化
                 break;
             case BPTM:
                 //校时命令
                 handleBPTM(cmd);
                 ICLogger.i("服务器收到校时命令APTM");
-                mConnection.DeliverCMDMessageToSystem("APTM",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APTM", cmd);//通知下面线程状态变化
                 break;
             case BP85://设置闹钟
-                handleBP85(cmd,mConnection,mRuntime);
+                handleBP85(cmd, mConnection, mRuntime);
                 ICLogger.i("收到服务器设置闹钟命令BP85");
-                mConnection.DeliverCMDMessageToSystem("AP85",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("AP85", cmd);//通知下面线程状态变化
                 break;
 
             case BP87:
-                handleBP87(cmd,mConnection,mRuntime);
+                handleBP87(cmd, mConnection, mRuntime);
                 ICLogger.i("收到服务器 QRCode uri BP87");
                 break;
             case BP33:
                 //设置工作模式
-                handleBP33(mConnection,mRuntime,cmd);
-                mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化
+                handleBP33(mConnection, mRuntime, cmd);
+                mConnection.DeliverCMDMessageToSystem("setWorkMod", cmd);//通知下面线程状态变化
 
                 break;
             case BP34:
                 //设置工作模式
-                handleBP34(mConnection,mRuntime,cmd);
-                mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化
+                handleBP34(mConnection, mRuntime, cmd);
+                mConnection.DeliverCMDMessageToSystem("setWorkMod", cmd);//通知下面线程状态变化
                 break;
             case BP16:
                 //立即定位指令(长链接有效)
-                handleBP16(mConnection,mRuntime,cmd);
-                mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化
+                handleBP16(mConnection, mRuntime, cmd);
+                mConnection.DeliverCMDMessageToSystem("StartLocate", cmd);//通知下面线程状态变化
                 break;
 
             case BP46: //立即拍照
                 ICLogger.i("立即拍照!");
-                handleBP46(cmd,mConnection,mRuntime);
+                handleBP46(cmd, mConnection, mRuntime);
                 break;
 
             case BP12:
                 //收到设置SOS号码
-                handleBP12(mConnection,cmd,mRuntime);
+                handleBP12(mConnection, cmd, mRuntime);
                 ICLogger.i("收到服务器设置SOS号码命令BP12");
                 break;
             case BP14:
                 //收到设置白名单号码
-                handleBP14(mConnection,cmd,mRuntime);
+                handleBP14(mConnection, cmd, mRuntime);
                 ICLogger.i("收到服务器设置白名单号码命令BP14");
                 break;
             case BPWL:
                 //收到设置白名单号码
-                handleBPWL(mConnection,cmd,mRuntime);
+                handleBPWL(mConnection, cmd, mRuntime);
                 ICLogger.i("收到服务器设置白名单号码命令BPWL");
                 break;
             case BP15:
-                handleBP15(cmd,mConnection,mRuntime);
+                handleBP15(cmd, mConnection, mRuntime);
                 ICLogger.i("收到服务器设置定位命令BP15");
                 break;
             case BP17:
                 //收到恢复出厂设置
-                handleBP17(mConnection,cmd);
+                handleBP17(mConnection, cmd);
                 ICLogger.i("收到服务器恢复出厂设置命令BP17");
-                mConnection.DeliverCMDMessageToSystem("FactoryReset",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("FactoryReset", cmd);//通知下面线程状态变化
                 break;
 
             case BP18:
                 //收到重启
-                handleBP18(mConnection,cmd);
+                handleBP18(mConnection, cmd);
                 ICLogger.i("收到服务器重启命令BP18");
-                mConnection.DeliverCMDMessageToSystem("Reboot",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("Reboot", cmd);//通知下面线程状态变化
                 break;
 
             case BP31:
                 //收到关机
-                handleBP31(mConnection,cmd);
+                handleBP31(mConnection, cmd);
                 ICLogger.i("收到服务器关机命令BP31");
-                mConnection.DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("poweroff", cmd);//通知下面线程状态变化
                 break;
             case BP40:
                 //服务器推送文本
-                handleBP40(mConnection,mRuntime,cmd);
+                handleBP40(mConnection, mRuntime, cmd);
                 ICLogger.i("收到服务器推送文本消息");
-                mConnection.DeliverCMDMessageToSystem("showTxt",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("showTxt", cmd);//通知下面线程状态变化
                 break;
 
             case BPXL:
-                handleBPXL(cmd,mConnection);
+                handleBPXL(cmd, mConnection);
                 ICLogger.i("收到服务器心率检测命令");
-                if(mRuntime.check_stat_do_ppg_test()) HeartRateManager.triggerPPGtest();
+                if (mRuntime.check_stat_do_ppg_test()) HeartRateManager.triggerPPGtest();
                 break;
             case BPXY:
-                handleBPXY(cmd,mConnection);
+                handleBPXY(cmd, mConnection);
                 ICLogger.i("收到服务器血压检测命令");
-                if(mRuntime.check_stat_do_ppg_test()) HeartRateManager.triggerPPGtest();
+                if (mRuntime.check_stat_do_ppg_test()) HeartRateManager.triggerPPGtest();
                 break;
             case BPJZ:
-                handleBPJZ(cmd,mConnection,mRuntime);
+                handleBPJZ(cmd, mConnection, mRuntime);
                 ICLogger.i("收到服务器血压校准命令");
                 break;
             case BPHT:
                 ICLogger.i("服务器收到上传的心率血压");
-                mConnection.DeliverCMDMessageToSystem("APHT",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APHT", cmd);//通知下面线程状态变化
                 break;
             case BP84:
-                handleBP84(cmd,mConnection);
+                handleBP84(cmd, mConnection);
                 ICLogger.i("收到服务器白名单命令");
                 break;
 
             case BP86:
                 //心率周期
-                handleBP86(cmd,mConnection,mRuntime);
-                mConnection.DeliverCMDMessageToSystem("AP86",cmd);//通知下面线程状态变化
+                handleBP86(cmd, mConnection, mRuntime);
+                mConnection.DeliverCMDMessageToSystem("AP86", cmd);//通知下面线程状态变化
 
                 break;
             case BP68: //绑定解绑
-                handleBP68(cmd,mConnection,mRuntime);
+                handleBP68(cmd, mConnection, mRuntime);
                 break;
             case BP88:
                 //收到查找设备消息
-                handleBP88(cmd,mConnection);
-                mConnection.DeliverCMDMessageToSystem("findDev",cmd);//通知下面线程状态变化
+                handleBP88(cmd, mConnection);
+                mConnection.DeliverCMDMessageToSystem("findDev", cmd);//通知下面线程状态变化
                 break;
             case BP89:
                 //心率/血压阀值
-                handleBP89(cmd,mConnection);
-                mConnection.DeliverCMDMessageToSystem("AP89",cmd);//通知下面线程状态变化
+                handleBP89(cmd, mConnection);
+                mConnection.DeliverCMDMessageToSystem("AP89", cmd);//通知下面线程状态变化
                 break;
 
             case BPTE: //设置测试体温
-                handleBPTE(cmd,mConnection,mRuntime);
-                mConnection.DeliverCMDMessageToSystem("APTE",cmd);//通知下面线程状态变化
+                handleBPTE(cmd, mConnection, mRuntime);
+                mConnection.DeliverCMDMessageToSystem("APTE", cmd);//通知下面线程状态变化
                 break;
 
             case BPTP:
                 handleBPTP();
-                mConnection.DeliverCMDMessageToSystem("APTP",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APTP", cmd);//通知下面线程状态变化
                 break;
             case BPHP:
                 handleBPHP();
-                mConnection.DeliverCMDMessageToSystem("APHP",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APHP", cmd);//通知下面线程状态变化
                 break;
             case BPX1://设置 心率血压血氧修正值
-                handleBPX1(cmd,mConnection,mRuntime);
+                handleBPX1(cmd, mConnection, mRuntime);
                 ICLogger.i("收到服务器设置 心率血压血氧修正值BPX1");
-                mConnection.DeliverCMDMessageToSystem("APX1",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APX1", cmd);//通知下面线程状态变化
                 break;
 
             case BPS4: //提醒设置(时间段) 主要为久坐设置提醒时长。
-                handleBPS4(cmd,mConnection,mRuntime);
+                handleBPS4(cmd, mConnection, mRuntime);
                 ICLogger.i("收到 提醒设置(时间段)");
-                mConnection.DeliverCMDMessageToSystem("APS4",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APS4", cmd);//通知下面线程状态变化
                 break;
             case BPDE:
-                handleBPDE(mConnection,cmd,mRuntime);
+                handleBPDE(mConnection, cmd, mRuntime);
                 ICLogger.i(" 收到 进出围栏通知!");
-                mConnection.DeliverCMDMessageToSystem("APDE",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APDE", cmd);//通知下面线程状态变化
                 break;
 
             case BPTU:
                 handleBPTU(cmd, mConnection);
                 ICLogger.i("收到服务器 图片语音 消息 BPTU");
-            //    mConnection.DeliverCMDMessageToSystem("APTU", "");//通知下面线程状态变化
+                //    mConnection.DeliverCMDMessageToSystem("APTU", "");//通知下面线程状态变化
                 break;
             case BPDG:
-                handleBPDG(mConnection,cmd,mRuntime);
+                handleBPDG(mConnection, cmd, mRuntime);
                 ICLogger.i(" 收到 体温阈值设置!");
-                mConnection.DeliverCMDMessageToSystem("APDG",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APDG", cmd);//通知下面线程状态变化
                 break;
             case BPSL:
                 ICLogger.i("睡眠数据上传完毕!");
-                mConnection.DeliverCMDMessageToSystem("APSL",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("APSL", cmd);//通知下面线程状态变化
                 break;
 
             case BPDH:
                 ICLogger.i("聆听");
-                handleBPDH(mConnection,mRuntime,cmd);
+                handleBPDH(mConnection, mRuntime, cmd);
                 break;
 
             case BPTQ: //天气下发
-                handleBPTQ(mConnection,mRuntime,cmd);
+                handleBPTQ(mConnection, mRuntime, cmd);
                 break;
             case BPAT://剪断开关设定
-                handleBPAT(mConnection,mRuntime,cmd);
+                handleBPAT(mConnection, mRuntime, cmd);
                 break;
 
             case BPBT://蓝牙扫描设置
-                handleBPBT(mConnection,mRuntime,cmd);
+                handleBPBT(mConnection, mRuntime, cmd);
                 break;
             case BPBS://蓝牙扫描设置Majorlist
-                handleBPBS(mConnection,mRuntime,cmd);
+                handleBPBS(mConnection, mRuntime, cmd);
                 break;
 
             case BP65://声音设置
-                handleBP65(mConnection,mRuntime,cmd);
+                handleBP65(mConnection, mRuntime, cmd);
                 break;
             case BP47://震动设置
-                handleBP47(mConnection,mRuntime,cmd);
+                handleBP47(mConnection, mRuntime, cmd);
                 break;
 
 
@@ -3214,12 +3209,12 @@ public class protocol_ic {
     public boolean handleCmd(CMD_TYPE type, String cmd, byte[] bytes) {
 
         //只有需要传递二进制数据的才需要这个函数,目前只有BP28需要
-        boolean ret=true;
-        ICLogger.i("handleCmd "+type.name() + " "+cmd+" bytelen="+bytes.length );
-        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " +new String(bytes));
+        boolean ret = true;
+        ICLogger.i("handleCmd " + type.name() + " " + cmd + " bytelen=" + bytes.length);
+        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + new String(bytes));
         switch (type) {
             case BP28:
-                handleBP28(mConnection,cmd, mRuntime,bytes);
+                handleBP28(mConnection, cmd, mRuntime, bytes);
                 ICLogger.i("收到服务器语音BP28");
 //                mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化
                 break;
index 14888c4..d61203b 100644 (file)
@@ -5,38 +5,38 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
 import android.os.Handler;
+import android.os.HandlerThread;
 import android.os.IBinder;
 import android.os.Message;
 import android.util.Log;
 
 import com.enqualcomm.support.Config;
-import com.enqualcomm.support.bean.EventLooperHandlerThread;
 import com.enqualcomm.support.utils.ICLogger;
 
 import se.wetcat.qatja.MQTTConstants;
 import se.wetcat.qatja.android.MQTTConnectionConstants;
 import se.wetcat.qatja.android.QatjaService;
-import se.wetcat.qatja.messages.MQTTMessage;
 import se.wetcat.qatja.messages.MQTTPublish;
 
 public class protocol_mqtt_client {
 
     private String TAG = protocol_mqtt_client.class.getSimpleName();
-    private Handler mHandler ;
+    private Handler mHandler;
     QatjaService mClient = null;
     private Context mContext;
     private boolean isBound = false;
     private boolean isBinding = false;
-    public static String topic_header="";
+    public static String topic_header = "";
 
-    public void setSubscriptTopicHeader(String header){
-        topic_header=header;
+    public void setSubscriptTopicHeader(String header) {
+        topic_header = header;
     }
+
     private class MqttCallback implements Handler.Callback {
         @Override
         public boolean handleMessage(Message msg) {
 
-            ICLogger.i("MqttCallback handleMessage "+msg.what);
+            ICLogger.i("MqttCallback handleMessage " + msg.what);
             switch (msg.what) {
                 case MQTTConnectionConstants.STATE_CHANGE:
                     handleStateChange(msg);
@@ -49,12 +49,16 @@ public class protocol_mqtt_client {
         }
 
     }
-    MqttCallbackInterface mqttCallbackInterface=null;
-    public protocol_mqtt_client(Context context,MqttCallbackInterface _mqttCallbackInterface) {
 
-        mqttCallbackInterface=_mqttCallbackInterface;
+    MqttCallbackInterface mqttCallbackInterface = null;
+
+    public protocol_mqtt_client(Context context, MqttCallbackInterface _mqttCallbackInterface) {
+
+        mqttCallbackInterface = _mqttCallbackInterface;
         mContext = context;
-        mHandler = new Handler(EventLooperHandlerThread.makeLooper(MqttCallback.class.getSimpleName()),new MqttCallback());
+        HandlerThread handlerThread = new HandlerThread("ic:mqtt-handler-thread");
+        handlerThread.start();
+        mHandler = new Handler(handlerThread.getLooper(), new MqttCallback());
     }
 
     private void handleStateChange(Message msg) {
@@ -62,17 +66,17 @@ public class protocol_mqtt_client {
 
         switch (msg.arg1) {
             case MQTTConnectionConstants.STATE_NONE:
-                if (mqttCallbackInterface!= null)
+                if (mqttCallbackInterface != null)
                     mqttCallbackInterface.onMqttDisconnected();
                 break;
             case MQTTConnectionConstants.STATE_CONNECTING:
                 break;
             case MQTTConnectionConstants.STATE_CONNECTED:
-                if (mqttCallbackInterface!=null)
+                if (mqttCallbackInterface != null)
                     mqttCallbackInterface.onMqttConnected();
                 break;
             case MQTTConnectionConstants.STATE_CONNECTION_FAILED:
-                if (mqttCallbackInterface!=null)
+                if (mqttCallbackInterface != null)
                     mqttCallbackInterface.onMqttDisconnected();
                 break;
             default:
@@ -88,9 +92,10 @@ public class protocol_mqtt_client {
         Log.d(TAG, "handleReceivedMessage(${publish.topicName})" + publish.getTopicName() + " data " + new String(publish.getPayload()));
 //        }
 
-        String cmdtype= publish.getTopicName().replace(topic_header,"");
-        if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", "mqtt recv " + publish.getTopicName() +" "+ new String(publish.getPayload()));
-        if (mqttCallbackInterface!=null)
+        String cmdtype = publish.getTopicName().replace(topic_header, "");
+        if (Config.LOG_TOFILE)
+            ICLogger.logToFile("APILog", "mqtt recv " + publish.getTopicName() + " " + new String(publish.getPayload()));
+        if (mqttCallbackInterface != null)
             mqttCallbackInterface.handleMqttMessage(cmdtype, publish.getPayload());
     }
 
@@ -121,7 +126,7 @@ public class protocol_mqtt_client {
 
     public void Pause() {
         try {
-            if(mClient!=null) mClient.disconnect();
+            if (mClient != null) mClient.disconnect();
 
             mContext.unbindService(mConnection);
 
@@ -170,23 +175,26 @@ public class protocol_mqtt_client {
         }
 
     }
-    private String mqttHost="";
-    private String devid="";
-    private int mqtt_port=8083;
-    private int mqtt_cycle_seconds=600;
-    public void configMqtt(String host,int port,int cycle_seconds,String idname){
-        mqttHost=host;
-        devid=idname;
-        mqtt_port=port;
-        mqtt_cycle_seconds=cycle_seconds;
+
+    private String mqttHost = "";
+    private String devid = "";
+    private int mqtt_port = 8083;
+    private int mqtt_cycle_seconds = 600;
+
+    public void configMqtt(String host, int port, int cycle_seconds, String idname) {
+        mqttHost = host;
+        devid = idname;
+        mqtt_port = port;
+        mqtt_cycle_seconds = cycle_seconds;
     }
 
 
-    public void attemptConnectMqtt(){
-        attemptConnectMqtt(mqttHost,mqtt_port,devid,mqtt_cycle_seconds);
+    public void attemptConnectMqtt() {
+        attemptConnectMqtt(mqttHost, mqtt_port, devid, mqtt_cycle_seconds);
     }
-    public void attemptConnectMqtt(String host, int port,String identifier, int cycle_inSeconds) {
-        ICLogger.i("attemptConnectMqtt("+host+", "+port+" "+identifier+" "+cycle_inSeconds);
+
+    public void attemptConnectMqtt(String host, int port, String identifier, int cycle_inSeconds) {
+        ICLogger.i("attemptConnectMqtt(" + host + ", " + port + " " + identifier + " " + cycle_inSeconds);
 
         if (!(MQTTConnectionConstants.STATE_CONNECTING == mClient.getState() || MQTTConnectionConstants.STATE_CONNECTED == mClient.getState())) {
             try {
@@ -207,19 +215,19 @@ public class protocol_mqtt_client {
         }
     }
 
-    public void sendMessage(String cmdtype,String data){
+    public void sendMessage(String cmdtype, String data) {
 //        ICLogger.logToFile("APILog",cmdtype+" "+data);
-       mClient.publish(cmdtype,data);
+        mClient.publish(cmdtype, data);
     }
 
-    public interface MqttCallbackInterface
-    {
-        void onMqttConnected() ;
+    public interface MqttCallbackInterface {
+        void onMqttConnected();
 
         void onMqttDisconnected();
 
-        void handleMqttMessage(String cmdtype,byte[] msgdata);
-        void handleMqttMessage(String cmdtype,String msgdata);
+        void handleMqttMessage(String cmdtype, byte[] msgdata);
+
+        void handleMqttMessage(String cmdtype, String msgdata);
 
     }
 }
index e6bf80b..5a44ca6 100644 (file)
@@ -4,5 +4,5 @@
 # Location of the SDK. This is only used by Gradle.
 # For customization when using a Version Control System, please read the
 # header note.
-#Wed Dec 16 16:41:45 CST 2020
-sdk.dir=C\:\\Users\\incar\\AppData\\Local\\Android\\Sdk
+#Tue Dec 29 09:16:53 CST 2020
+sdk.dir=D\:\\Android\\Sdk