get temperature and heart rate data from ic work service.
authorkfl_614 <kfl_614@163.com>
Wed, 30 Dec 2020 08:59:24 +0000 (16:59 +0800)
committerkfl_614 <kfl_614@163.com>
Wed, 30 Dec 2020 08:59:24 +0000 (16:59 +0800)
28 files changed:
app/release/ICSer_V740_2012291044_release.apk [new file with mode: 0644]
app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl [new file with mode: 0644]
app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl [new file with mode: 0644]
app/src/main/aidl/com/ic/work/ITempSensorCallback.aidl [new file with mode: 0644]
app/src/main/aidl/com/ic/work/ITempSensorService.aidl [new file with mode: 0644]
app/src/main/aidl/com/ic/work/domain/HeartRate.aidl [new file with mode: 0644]
app/src/main/aidl/com/ic/work/domain/Temperature.aidl [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/Constants.java
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/ICApplication.java
app/src/main/java/com/enqualcomm/support/bean/ICLocation.java
app/src/main/java/com/enqualcomm/support/bean/heartRateStatus.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/utils/AlarmHelper.java
app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java
app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java
app/src/main/java/com/enqualcomm/support/utils/TemperatureUtil.java
app/src/main/java/com/ic/protocols/protocol_beehome.java
app/src/main/java/com/ic/protocols/protocol_fzd.java
app/src/main/java/com/ic/protocols/protocol_ic.java
app/src/main/java/com/ic/protocols/protocol_jiai.java
app/src/main/java/com/ic/protocols/protocol_mqtt.java
app/src/main/java/com/ic/work/domain/HeartRate.java [new file with mode: 0644]
app/src/main/java/com/ic/work/domain/Temperature.java [new file with mode: 0644]
core/README.md
local.properties
replay_pid451856.log

diff --git a/app/release/ICSer_V740_2012291044_release.apk b/app/release/ICSer_V740_2012291044_release.apk
new file mode 100644 (file)
index 0000000..786da5f
Binary files /dev/null and b/app/release/ICSer_V740_2012291044_release.apk differ
diff --git a/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl b/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl
new file mode 100644 (file)
index 0000000..0a3b01f
--- /dev/null
@@ -0,0 +1,14 @@
+// IHeartRateSensorCallback.aidl
+package com.ic.work;
+
+
+import com.ic.work.domain.HeartRate;
+
+interface IHeartRateSensorCallback {
+   //获取到了数据
+   void onHeartRateGet(in HeartRate heartRate);
+   //正在获取数据
+   void onGetData();
+   //等待中
+   void onWaiting();
+}
\ No newline at end of file
diff --git a/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl b/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl
new file mode 100644 (file)
index 0000000..bc1f7f9
--- /dev/null
@@ -0,0 +1,13 @@
+// IHeartRateSensorService.aidl
+package com.ic.work;
+
+import com.ic.work.IHeartRateSensorCallback;
+
+interface IHeartRateSensorService {
+   //注册接口
+    void registerCallback(in IHeartRateSensorCallback callback);
+    //取消接口注册
+    void unRegisterCallback(in IHeartRateSensorCallback callback);
+    //获取心率相关数据0表示Alarm,1表示客户端用户发出的,3表示服务端发出的单次获取指令
+    void getHeartRateInfo(int from);
+}
\ No newline at end of file
diff --git a/app/src/main/aidl/com/ic/work/ITempSensorCallback.aidl b/app/src/main/aidl/com/ic/work/ITempSensorCallback.aidl
new file mode 100644 (file)
index 0000000..411f521
--- /dev/null
@@ -0,0 +1,13 @@
+// ITempSensorCallback.aidl
+package com.ic.work;
+
+import com.ic.work.domain.Temperature;
+
+interface ITempSensorCallback {
+    //获取到了温度数据
+    void onTemperatureGet(in Temperature temperature);
+   //正在获取数据
+   void onGetData();
+   //等待中
+   void onWaiting();
+}
\ No newline at end of file
diff --git a/app/src/main/aidl/com/ic/work/ITempSensorService.aidl b/app/src/main/aidl/com/ic/work/ITempSensorService.aidl
new file mode 100644 (file)
index 0000000..f71b99c
--- /dev/null
@@ -0,0 +1,12 @@
+// ITempSensorService.aidl
+package com.ic.work;
+import com.ic.work.ITempSensorCallback;
+
+interface ITempSensorService {
+    //注册接口
+    void registerCallback(in ITempSensorCallback callback);
+    //取消接口注册
+    void unRegisterCallback(in ITempSensorCallback callback);
+    //获取体温:0表示Alarm,1表示客户端用户发出的,3表示服务端发出的单次获取指令
+    void getTemperatureInfo(int from);
+}
\ No newline at end of file
diff --git a/app/src/main/aidl/com/ic/work/domain/HeartRate.aidl b/app/src/main/aidl/com/ic/work/domain/HeartRate.aidl
new file mode 100644 (file)
index 0000000..522b480
--- /dev/null
@@ -0,0 +1,4 @@
+// HeartRate.aidl
+package com.ic.work.domain;
+
+parcelable HeartRate;
\ No newline at end of file
diff --git a/app/src/main/aidl/com/ic/work/domain/Temperature.aidl b/app/src/main/aidl/com/ic/work/domain/Temperature.aidl
new file mode 100644 (file)
index 0000000..a820f77
--- /dev/null
@@ -0,0 +1,4 @@
+// Temperature.aidl
+package com.ic.work.domain;
+
+parcelable Temperature;
\ No newline at end of file
index cd2d7ab..e3e8727 100644 (file)
@@ -4,398 +4,401 @@ import android.net.Uri;
 
 public interface Constants {
 
-  public static final String ACTION_LED = "com.enqualcomm.support.ACTION_LED";
-
-  public static final String ACTION_SHUTDOWN = "com.ic.action.shutdown";
-
-  public static final String ACTION_PLAYTIME = "com.ic.action.playtime";
-
-  public static final String ACTION_BROADCAST_PPG = "com.enqualcomm.support.ACTION_BROADCAST_PPG";
-  public static final String ACTION_ADDTEST_CONTACTS = "com.enqualcomm.imessage.ACTION_ADDTEST_CONTACTS";
-  
-  public static final String ACTION_ALARM_ADD_DATAPOINTS = "com.enqualcomm.support.ADD_DATAPOINTS";
-
-
-  public static final String ACTION_ALARM_BLE_SCAN = "com.ic.Action.ALarm.bleScan";
-  public static final String ACTION_ALARM_CHECK_ANTI = "com.ic.Action.ALarm.CheckAnti";
-
-  public static final String ACTION_ALARM_ALARM_CHANGE = "com.enqualcomm.support.ACTION_ALARM_ALARM_CHANGE";
-  
-  public static final String ACTION_ANTIOFF_ALARM_CHANGE = "com.enqualcomm.support.ACTION_ANTIOFF_ALARM_CHANGE";
-  
-  public static final String ACTION_AT_CALLBACK = "com.eqc.intent.action.callback.at";
-  
-  public static final String ACTION_BATTERY_LOW_MSG = "com.enqualcomm.support.lowbatteryMsg";
-  
-  public static final String ACTION_CALL_CMCM_SERVICE_INTERFACE = "com.cmcm.interface";
-  
-  public static final String ACTION_CALL_RING = "com.enqualcomm.support.phone.ring";
-  
-  public static final String ACTION_CARE_ALARM = "com.enqualcomm.support.ACTION_CARE_ALARM";
-  
-  public static final String ACTION_CLOSE_UNREAD_MSG = "com.enqualcomm.support.CloseUnreadMsg";
-  
-  public static final String ACTION_CM_POWERSAVE_MODE = "cmcm.call.eiot.into.powersave";
-  
-  public static final String ACTION_EQC_ALARM = "com.enqualcomm.support.ACTION_EQC_ALARM";
-
-  public static final String ACTION_LOCATION_ALARM = "com.enqualcomm.support.ACTION_LOCATION_ALARM";
-
-  public static final String ACTION_EXIT_MONITOR_MODE = "com.enqualcomm.support.MONITOR_EXIT";
-  
-  public static final String ACTION_HEART_RATE_RESULT = "com.eqc.heartrate.action.RESULT";
-
-  public static final String ACTION_HEATR_RATE_START = "com.eqc.heartrate.action.SILENT_START";
-  public static final String ACTION_CHECK_ANTIOFF_EVENT = "com.ic.action.CHECK_ANTIOFF_EVENT";
-
-  public static final String ACTION_IMESSAGE = "action.message";
-  
-  public static final String ACTION_ISCONNECTED = "com.ic.protocol.ACTION_IS_SERVER_CONNECTED";
-  
-  public static final String ACTION_ISSILENCE = "com.enqualcomm.icare.ACTION_ISSILENCE";
-  
-  public static final String ACTION_ISSILENCE2IMESSAGE = "com.enqualcomm.support.ACTION_ISSILENCE2IMESSAGE";
-  
-  public static final String ACTION_MISSED_CALL_GET = "com.enqualcomm.support.ACTION_MISSED_CALL_GET";
-  
-  public static final String ACTION_NOTICE_ALARM = "com.enqualcomm.support.ACTION_NOTICE_ALARM";
-  
-  public static final String ACTION_NOTICE_ALARM_CHANGE = "com.enqualcomm.support.ACTION_NOTICE_ALARM_CHANGE";
-  
-  public static final String ACTION_PASS_DATA_TO_CM_SERVICES = "com.enqualcomm.support.PASS_DATA";
-  
-  public static final String ACTION_REMOTE_CAMERA = "com.enqualcomm.support.ACTION_REMOTE_CAMERA";
-  
-  public static final String ACTION_REMOTE_CAMERA_OSS = "com.enqualcomm.support.ACTION_REMOTE_CAMERA_OSS";
-  
-  public static final String ACTION_RESTORE_SYSTEM = "android.intent.action.MASTER_CLEAR";
-  
-  public static final String ACTION_SCANPAIRMESSAGE = "com.enqualcomm.imessage.scanPairMessage";
-  
-  public static final String ACTION_SEDN_VIDOE_CALL_REQ = "com.enqualcomm.imessage.sendVideoCall";
-
-  public static final String ACTION_SEND_SOS_MSG = "com.enqualcomm.support.action_send_sos";
-
-  public static final String ACTION_SEND_EMEGENCY_LOCATION_START = "action.emegency.location.start";
-  public static final String ACTION_SEND_EMEGENCY_LOCATION_STOP = "action.emegency.location.stop";
-  public static final String ACTION_LOCAL_SOS_ACTION = "com.enqualcomm.support.local_sos";
-
-  public static final String ACTION_SEND_SOS_VIDEO_FILE = "com.enqualcomm.support.action_send_sos_video_file";
-  
-  public static final String ACTION_SEND_VIDEO_FILES = "com.enqualcomm.support.ACTION_SEND_VIDEO_FILES";
-  
-  public static final String ACTION_SHUTDOWN_MOREINFO = "android.intent.action.ACTION_SHUTDOWN_MOREINFO";
-  
-  public static final String ACTION_SOS_VIDEO_CHAT = "com.enqualcomm.imessage.ACTION_SOS_VIDEO_CHAT";
-  
-  public static final String ACTION_START_DOWNLOAD = "com.enqualcomm.imessage.START_DOWNLOAD_ACTION";
-  
-  public static final String ACTION_STHEART_RATE_ALARM_CHANGE = "com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE";
-  
-  public static final String ACTION_SYNC = "SYNC";
-  
-  public static final String ACTION_UNBOUND_TERMINAL = "com.enqualcomm.support.ACTION_UNBOUND_TERMINAL";
-  
-  public static final String ACTION_UPDATE_ICON = "com.enqualcomm.support.ACTION_UPDATE_ICON";
-  
-  public static final String ACTION_UPDATE_SECRET_KEY = "com.enqualcomm.support.UPDATE_SECRET_KEY";
-  
-  public static final String ACTION_VIDEO_END_CALL = "com.enqualcomm.support.ACTION_VIDEO_END_CALL";
-  
-  public static final String ACTION_VIDEO_LOGIN = "com.enqualcomm.imessage.ACTION_VIDEO_LOGIN";
-  
-  public static final String ACTION_VIDEO_LOGOUT = "com.enqualcomm.imessage.ACTION_VIDEO_LOGOUT";
-  
-  public static final String ACTION_VIDEO_RECEIVE_LOGIN = "com.enqualcomm.imessage.ACTION_VIDEO_RECEIVE_LOGIN";
-  
-  public static final String ACTION_WAKEUP_ALARM = "com.eqc.deliverWakeupAlarm.action";
-  
-  public static final String ACTION_YUN_ALARM_CHANGE = "com.eqc.deskclock.YUN_ALARM_CHANGE";
-
-  public static final String ACTION_PRACTICE_REPORT_ALARM = "com.enqualcomm.support.PRACTICE_ALARM";
-
-  public final static String ACTION_START_PRACTISE = "com.ic.action_start_practice";
-  public final static String KeyPractice = "cmd";
-
-  public static final int ALARM_UPDATE_NOTICE = 206;
-  
-  public static final int CALL_RECORD_CHANGED = 103;
-  
-  public static final String CMD_ID_CM = "cmdId";
-
-  public static final Uri CONTACT_URI =  Uri.parse("content://com.enqualcomm.support/contact");
-
-  public static final Uri CM_SERVICE_SETTING = Uri.parse("content://com.cmcm.service/cmsetting");
-
-  public static final String DIALOG_ACTION = "com.enqualcomm.support.DIALOG";
-  
-  public static final int ENTER_SILENT_MODE = 212;
-  
-  public static final int EXIT_SILENT_MODE = 213;
-  
-  public static final String FLAG = "flag";
-
-  public static final String ANTI_ALARM = "com.enqualcomm.support.ANTI_ALARM";
-  public static final String TEMP_ALARM = "com.enqualcomm.support.TEMP_ALARM";
-  public static final String HEART_ALARM = "com.enqualcomm.support.HEART_ALARM";
-
-  public static final int IDLE_MODE_CHANGED = 102;
-  
-  public static final int INIT_SERVER_OK = 216;
-  
-  public static final int IN_SILENCE = 600;
-  
-  public static final boolean IS_OVERSEAS = false;
-  
-  public static final int JUFENG_SDK_INIT = 215;
-  
-  public static final String KEY_CATEGORY = "category";
-  
-  public static final String KEY_COMPANY = "KEY_COMPANY";
-  
-  public static final String KEY_CONTACT_ID = "contact_id";
-  
-  public static final String KEY_DELETE_FILE_TIME = "KEY_DELETE_FILE_TIME";
-  
-  public static final String KEY_DEVICE_ID = "key_device_id";
-  
-  public static final String KEY_DEVICE_KEY = "key_device_key";
-  
-  public static final String KEY_FILEPATH = "filepath";
-  
-  public static final String KEY_FILETYPE = "filetype";
-  
-  public static final String KEY_ID = "id";
-  
-  public static final String KEY_ISCONNECTED = "isConnected";
-  
-  public static final String KEY_ISSILENCE = "KEY_ISSILENCE";
-  
-  public static final String KEY_IS_RESUME = "key_is_resume";
-  
-  public static final String KEY_JUST_TALK = "KEY_JUST_TALK";
-  
-  public static final String KEY_NAME = "name";
-  
-  public static final String KEY_NET_WORK_TYPE = "NET_WORK_TYPE";
-  
-  public static final String KEY_NUMBER = "number";
-  
-  public static final String KEY_PAIR_CID = "PAIR_CID";
-  
-  public static final String KEY_REMOTE_NUMBER = "key_remote_number";
-  
-  public static final String KEY_SAVE_STEP_COUNT = "key_save_step_count";
-  
-  public static final String KEY_SOS_FILE_BODY = "key_sos_file_body";
-  
-  public static final String KEY_SOS_FILE_FILE_TYPE = "key_sos_file_file_type";
-  
-  public static final String KEY_STATUS = "key_status";
-  
-  public static final String KEY_STEP_COUNT = "KEY_STEP_COUNT";
-  
-  public static final String KEY_UNBOUND_FLAG = "KEY_UNBOUND_FLAG";
-  
-  public static final String KEY_VIDEO_PATH = "KEY_VIDEO_PATH";
-  
-  public static final int LOCATION_DATA = 217;
-  
-  public static final int MONITOR_GOIN = 202;
-  
-  public static final int MONITOR_GOOUT = 203;
-  
-  public static final int MSG_WHAT_RELOAD_VOICE = 1000;
-  
-  public static final int MSG_WHAT_SEND_OSSFILE = 1006;
-  
-  public static final int MSG_WHAT_SEND_PAIR = 1003;
-  
-  public static final int MSG_WHAT_SEND_PICTURE = 1002;
-  
-  public static final int MSG_WHAT_SEND_VOICE = 1001;
-  
-  public static final int MSG_WHAT_SILENCE_STATUS = 1005;
-  
-  public static final int MSG_WHAT_VIDEO_CHAT = 1004;
-
-  public static final int MSG_WHAT_PPG = 1007;
-  public static final String key_ppg="ppg";
-  public static final String key_bph="bph";
-  public static final String key_bpl="bpl";
-  public static final String key_spo2="sp02";
-
-
-  public static final int NEW_MEDIA_PUSH = 100;
-
-  public static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
-  public static final String OTHER_ALARM_END = "com.enqualcomm.support.OTHER_ALARM_END";
-  
-  public static final String OTHER_ALARM_START = "com.enqualcomm.support.OTHER_ALARM_START";
-  
-  public static final String OTHER_HEARTRATE_ALARM_END = "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_END";
-  
-  public static final String OTHER_HEARTRATE_ALARM_START = "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START";
-  
-  public static final int OUT_SILENCE = 700;
-  
-  public static final int PASS_DATA_DIRECTLY = 500;
-  
-  public static final int PLAY_RECORD_UPDATE = 207;
-  
-  public static final int REBOOT_SYSTEM = 208;
-  
-  public static final int RESET_SYSTEM = 210;
-  
-  public static final String RESTORE_EXTRA_WIPE_EXTERNAL_STORAGE = "android.intent.extra.WIPE_EXTERNAL_STORAGE";
-  
-  public static final String RESTORE_REASON = "android.intent.extra.REASON";
-
-
-  public static final  String ACTION_START_FOTA_UPDATE="com.ic.action.startfotaUpdate";
-  public static final String ACTION_SMSCMD="com.enqualcomm.support.SMSCMD";
-  public static final String ACTION_SMSCMD_Reply="com.ic.action.fotaUpdateReply";
-  public static final String ACTION_TINTERNAL_TEST="com.ic.action.internaltest";
-
-  public static final String KeyReplyData="reply";
-
-  public static final String ACTION_SMSCMD_TEST="com.ic.action.internaltest";
-
-  public static final int RESULT_ERROR = 500;
-  
-  public static final int RESULT_OK = 200;
-  
-  public static final String RESUME_ACTION = "com.enqualcomm.imessage.RESUME_ACTION";
-  
-  public static final String SERVICE_CLS_NAME = "com.enqualcomm.support.CoreService";
-  
-  public static final String SERVICE_PKG_NAME = "com.enqualcomm.support";
-  
-  public static final int SHUTDOWN_SYSTM = 209;
-  
-  public static final String SLEEP_ALARM = "com.enqualcomm.support.SLEEP_ALARM";
-  
-  public static final String SOS_ACTION = "com.enqualcomm.imessage.SOS_ACTION";
-  
-  public static final int SOS_GOIN = 204;
-  
-  public static final int SOS_GOOUT = 205;
-  
-  public static final String STEP_COUNT_ALARM_ACTION = "com.enqualcomm.support.ACTION_STEP_COUNT_ALARM";
-  
-  public static final String STRING_CMD_JSON_DATA = "cmdJsonData";
-  
-  public static final String STWORKMODE_ALARM = "com.enqualcomm.support.ACTION_STWORKMODE_ALARM";
-  
-  public static final String VALUE_SETTIING_VERSION = "value_setting_ver";
-  
-  public static final int VIDEO_MESSAGE = 300;
-  
-  public static final String WAKE_ALARM = "com.enqualcomm.support.WAKE_ALARM";
-  
-  public static final String WEATHER_ALARM = "com.ic.alarm.ACTION_WEATHER_ALARM";
-  public static final String WEATHER_ACTION = "com.ic.action.ACTION_GET_WEATHER";
-  public static final String ACTION_QUERY_WEATHER = "com.ic.action_query_weather";
-  public static final String ACTION_WEATHER_RECEIVED = "com.ic.action_weather_recveived";
-  public static final String KEY_Weather = "weather";
-
-
-  public static final int WIFI_SET_RESULT = 217;
-  
-  public static final int WORKMODE_CHANGED = 211;
-  
-  public static final String contact = "contact";
-  
-  public static final String wechat_contact = "content";
-
-
-  public static final String ACTION_CHECK_SERVER_RESPONSE = "com.enqualcomm.support.ACTION_CHECK_SERVER_RESPONSE";
-  public static final String ACTION_RETRY_SERVER_CONNECT = "com.enqualcomm.support.ACTION_RETRY_SERVER_CONNECT";
-  public static final String ACTION_CHECK_LOCATION_RESULT = "com.enqualcomm.support.ACTION_CHECK_LOCATION_RESULT";
-
-
-  public static final String ACTION_MESSAGE_SENT = "com.ic.action.message_sent";
-  public static final String ACTION_MESSAGE_RECEIVED = "com.ic.action.message_received";
-  public static final String KEY_MESSAGE_TYPE = "msgType";  //  分为 voice ,pic ,和 text
-  public static final String KEY_MESSAGE_URL = "msgUrl";  //  消息为 voice和 pic 此纪录为 路径, text消息则直接是消息内容。 utf-8 格式String
-  public static final String KEY_MESSAGE_FROM = "msgFrom"; // 消息来源(发送者名称),预留,暂时不用。
-
-
-
-  public static final String ACTION_TEMP_RESULT = "com.ic.action.temp_result";
-  public static final String KEY_TEMP_BODY = "body";  // double 体温
-  public static final String KEY_TEMP_WRIST= "wrist";  //  double 腕温
-  public static final String KEY_TEMP_OUT= "out";  //  double 腕温
-
-  public static String ACTION_ANTI_OFF0 = "com.ic.ACTION_ANTIOFF";
-  public static String ACTION_ANTI_OFF = "com.ic.ACTION_STRIP";
-  public static String KEY_ANTI_EVENT="eventID"; //integer  eventID =1 脱落, eventID =0 佩戴
-  public static String KEY_ANTI_TXT="eventTxt"; //String AnitMessage
-
-
-
-  public static String ACTION_BATTERYLOW = "com.ic.ACTION_BATTERYLOW";
-  public static String KEY_BATTERY_EVENT="eventID"; //integer  eventID =1 battery low, eventID =0 解除
-
-  public static String PersistFotaServer2Url="persist.sys.ota.host2";
-
-  //把服务器下发的文本消息作为短信消息存储在短信数据库中,mms.apk会接收此消息并保存到数据库
-  //persist.sys.pushtxtAsSMS == false的时候mms.apk会忽略此消息,默认事true,所以要关闭要单独设置
-  public static String ActionReceivePushTxt="action.ic.PushTxtToSMSDB";
-  public static String ActionSrvPushTxt="action.ic.srvPushTxt";
+    public static final String ACTION_LED = "com.enqualcomm.support.ACTION_LED";
 
-/**
- *   PreferenceManager.getDefaultSharedPreferences(context) , package name "com.enqualcomm.support"
- */
+    public static final String ACTION_SHUTDOWN = "com.ic.action.shutdown";
 
-  /***
-   * 心率血压血氧校准值
-   * String 变量,用 "," 分割的 4个数据 格式为【ppg_adj,bph_adj,bpl_adj,spo2_adj】
-   * 例如
-   * 心率偏差ppg_adj=2,
-   * 高压偏差bph_adj=-2,
-   * 低压偏差bpl_adj=-3,
-   * 血氧偏差spo2_adj=5
-   * 则赋值 2,-2,-3,5
-   */
-  public static String SHAREKEY_SETTING_PPG_ECG_ADJUST = "PpgEcgAdjust";
-  /**
-   * 睡眠分数 , int
-   */
-  public static String SHAREKEY_SETTING_SLEEP_SCORE = "SleepScore";
-  /**
-  *当前睡眠分数的日期  String yyMMddHHmm
-  *可能时昨天的,算完就是当天的
-   * */
-  public static String SHAREKEY_SETTING_SLEEP_SCORE_DATE = "SleepScoreDate";
-
-  /**
-   * 久坐检测时长,int 分钟为单位,此处为读取方法,可在显示前读取当前设置。
-   * 设置请采用broadcast方式发给协议层存储
-   */
-  public static String SHAREKEY_SETTING_SIT_ALARM_RANGE_IN_MINUTES = "SIT_RANGE";
-
-/***
- *  ACTion 用于 设置久坐时长分钟为单位
- */
+    public static final String ACTION_PLAYTIME = "com.ic.action.playtime";
+
+    public static final String ACTION_BROADCAST_PPG = "com.enqualcomm.support.ACTION_BROADCAST_PPG";
+    public static final String ACTION_ADDTEST_CONTACTS = "com.enqualcomm.imessage.ACTION_ADDTEST_CONTACTS";
+
+    public static final String ACTION_ALARM_ADD_DATAPOINTS = "com.enqualcomm.support.ADD_DATAPOINTS";
+
+
+    public static final String ACTION_ALARM_BLE_SCAN = "com.ic.Action.ALarm.bleScan";
+    public static final String ACTION_ALARM_CHECK_ANTI = "com.ic.Action.ALarm.CheckAnti";
+
+    public static final String ACTION_ALARM_ALARM_CHANGE = "com.enqualcomm.support.ACTION_ALARM_ALARM_CHANGE";
+
+    public static final String ACTION_ANTIOFF_ALARM_CHANGE = "com.enqualcomm.support.ACTION_ANTIOFF_ALARM_CHANGE";
+
+    public static final String ACTION_AT_CALLBACK = "com.eqc.intent.action.callback.at";
+
+    public static final String ACTION_BATTERY_LOW_MSG = "com.enqualcomm.support.lowbatteryMsg";
+
+    public static final String ACTION_CALL_CMCM_SERVICE_INTERFACE = "com.cmcm.interface";
+
+    public static final String ACTION_CALL_RING = "com.enqualcomm.support.phone.ring";
+
+    public static final String ACTION_CARE_ALARM = "com.enqualcomm.support.ACTION_CARE_ALARM";
+
+    public static final String ACTION_CLOSE_UNREAD_MSG = "com.enqualcomm.support.CloseUnreadMsg";
+
+    public static final String ACTION_CM_POWERSAVE_MODE = "cmcm.call.eiot.into.powersave";
+
+    public static final String ACTION_EQC_ALARM = "com.enqualcomm.support.ACTION_EQC_ALARM";
+
+    public static final String ACTION_LOCATION_ALARM = "com.enqualcomm.support.ACTION_LOCATION_ALARM";
+
+    public static final String ACTION_EXIT_MONITOR_MODE = "com.enqualcomm.support.MONITOR_EXIT";
+
+    public static final String ACTION_HEART_RATE_RESULT = "com.eqc.heartrate.action.RESULT";
+
+    public static final String ACTION_HEATR_RATE_START = "com.eqc.heartrate.action.SILENT_START";
+    public static final String ACTION_CHECK_ANTIOFF_EVENT = "com.ic.action.CHECK_ANTIOFF_EVENT";
+
+    public static final String ACTION_IMESSAGE = "action.message";
+
+    public static final String ACTION_ISCONNECTED = "com.ic.protocol.ACTION_IS_SERVER_CONNECTED";
+
+    public static final String ACTION_ISSILENCE = "com.enqualcomm.icare.ACTION_ISSILENCE";
+
+    public static final String ACTION_ISSILENCE2IMESSAGE = "com.enqualcomm.support.ACTION_ISSILENCE2IMESSAGE";
+
+    public static final String ACTION_MISSED_CALL_GET = "com.enqualcomm.support.ACTION_MISSED_CALL_GET";
+
+    public static final String ACTION_NOTICE_ALARM = "com.enqualcomm.support.ACTION_NOTICE_ALARM";
+
+    public static final String ACTION_NOTICE_ALARM_CHANGE = "com.enqualcomm.support.ACTION_NOTICE_ALARM_CHANGE";
+
+    public static final String ACTION_PASS_DATA_TO_CM_SERVICES = "com.enqualcomm.support.PASS_DATA";
+
+    public static final String ACTION_REMOTE_CAMERA = "com.enqualcomm.support.ACTION_REMOTE_CAMERA";
+
+    public static final String ACTION_REMOTE_CAMERA_OSS = "com.enqualcomm.support.ACTION_REMOTE_CAMERA_OSS";
+
+    public static final String ACTION_RESTORE_SYSTEM = "android.intent.action.MASTER_CLEAR";
+
+    public static final String ACTION_SCANPAIRMESSAGE = "com.enqualcomm.imessage.scanPairMessage";
+
+    public static final String ACTION_SEDN_VIDOE_CALL_REQ = "com.enqualcomm.imessage.sendVideoCall";
+
+    public static final String ACTION_SEND_SOS_MSG = "com.enqualcomm.support.action_send_sos";
+
+    public static final String ACTION_SEND_EMEGENCY_LOCATION_START = "action.emegency.location.start";
+    public static final String ACTION_SEND_EMEGENCY_LOCATION_STOP = "action.emegency.location.stop";
+    public static final String ACTION_LOCAL_SOS_ACTION = "com.enqualcomm.support.local_sos";
+
+    public static final String ACTION_SEND_SOS_VIDEO_FILE = "com.enqualcomm.support.action_send_sos_video_file";
+
+    public static final String ACTION_SEND_VIDEO_FILES = "com.enqualcomm.support.ACTION_SEND_VIDEO_FILES";
+
+    public static final String ACTION_SHUTDOWN_MOREINFO = "android.intent.action.ACTION_SHUTDOWN_MOREINFO";
+
+    public static final String ACTION_SOS_VIDEO_CHAT = "com.enqualcomm.imessage.ACTION_SOS_VIDEO_CHAT";
+
+    public static final String ACTION_START_DOWNLOAD = "com.enqualcomm.imessage.START_DOWNLOAD_ACTION";
+
+    public static final String ACTION_STHEART_RATE_ALARM_CHANGE = "com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE";
+
+    public static final String ACTION_SYNC = "SYNC";
+
+    public static final String ACTION_UNBOUND_TERMINAL = "com.enqualcomm.support.ACTION_UNBOUND_TERMINAL";
+
+    public static final String ACTION_UPDATE_ICON = "com.enqualcomm.support.ACTION_UPDATE_ICON";
+
+    public static final String ACTION_UPDATE_SECRET_KEY = "com.enqualcomm.support.UPDATE_SECRET_KEY";
+
+    public static final String ACTION_VIDEO_END_CALL = "com.enqualcomm.support.ACTION_VIDEO_END_CALL";
+
+    public static final String ACTION_VIDEO_LOGIN = "com.enqualcomm.imessage.ACTION_VIDEO_LOGIN";
+
+    public static final String ACTION_VIDEO_LOGOUT = "com.enqualcomm.imessage.ACTION_VIDEO_LOGOUT";
+
+    public static final String ACTION_VIDEO_RECEIVE_LOGIN = "com.enqualcomm.imessage.ACTION_VIDEO_RECEIVE_LOGIN";
+
+    public static final String ACTION_WAKEUP_ALARM = "com.eqc.deliverWakeupAlarm.action";
+
+    public static final String ACTION_YUN_ALARM_CHANGE = "com.eqc.deskclock.YUN_ALARM_CHANGE";
+
+    public static final String ACTION_PRACTICE_REPORT_ALARM = "com.enqualcomm.support.PRACTICE_ALARM";
+
+    public final static String ACTION_START_PRACTISE = "com.ic.action_start_practice";
+    public final static String KeyPractice = "cmd";
+
+    public static final int ALARM_UPDATE_NOTICE = 206;
+
+    public static final int CALL_RECORD_CHANGED = 103;
+
+    public static final String CMD_ID_CM = "cmdId";
+
+    public static final Uri CONTACT_URI = Uri.parse("content://com.enqualcomm.support/contact");
+
+    public static final Uri CM_SERVICE_SETTING = Uri.parse("content://com.cmcm.service/cmsetting");
+
+    public static final String DIALOG_ACTION = "com.enqualcomm.support.DIALOG";
+
+    public static final int ENTER_SILENT_MODE = 212;
+
+    public static final int EXIT_SILENT_MODE = 213;
+
+    public static final String FLAG = "flag";
+
+    public static final String ANTI_ALARM = "com.enqualcomm.support.ANTI_ALARM";
+    public static final String TEMP_ALARM = "com.enqualcomm.support.TEMP_ALARM";
+    public static final String HEART_ALARM = "com.enqualcomm.support.HEART_ALARM";
+
+    public static final int IDLE_MODE_CHANGED = 102;
+
+    public static final int INIT_SERVER_OK = 216;
+
+    public static final int IN_SILENCE = 600;
+
+    public static final boolean IS_OVERSEAS = false;
+
+    public static final int JUFENG_SDK_INIT = 215;
+
+    public static final String KEY_CATEGORY = "category";
+
+    public static final String KEY_COMPANY = "KEY_COMPANY";
+
+    public static final String KEY_CONTACT_ID = "contact_id";
+
+    public static final String KEY_DELETE_FILE_TIME = "KEY_DELETE_FILE_TIME";
+
+    public static final String KEY_DEVICE_ID = "key_device_id";
+
+    public static final String KEY_DEVICE_KEY = "key_device_key";
+
+    public static final String KEY_FILEPATH = "filepath";
+
+    public static final String KEY_FILETYPE = "filetype";
 
-  public static String ACTION_SET_SIT_RANGE = "com.ic.action.set_sit_range";
-  /**
-   * ACTION_SET_SIT_RANGE 参数 int,分钟数。
-   */
-  public static String KEY_SIT_RANGE = "sit_range";
+    public static final String KEY_ID = "id";
 
+    public static final String KEY_ISCONNECTED = "isConnected";
 
-  /***
-   * 内部定时器用action alarm
-   */
-  public static String ACTION_SIT_ALARM = "com.ic.action.sit_alarm_local";
+    public static final String KEY_ISSILENCE = "KEY_ISSILENCE";
 
-  /**
-   * 发送给app做显示用
-   */
-  public static String ACTION_KEEPSIT_ALARM = "com.ic.action.keep_sit_alarm";
+    public static final String KEY_IS_RESUME = "key_is_resume";
+
+    public static final String KEY_JUST_TALK = "KEY_JUST_TALK";
+
+    public static final String KEY_NAME = "name";
+
+    public static final String KEY_NET_WORK_TYPE = "NET_WORK_TYPE";
+
+    public static final String KEY_NUMBER = "number";
+
+    public static final String KEY_PAIR_CID = "PAIR_CID";
+
+    public static final String KEY_REMOTE_NUMBER = "key_remote_number";
+
+    public static final String KEY_SAVE_STEP_COUNT = "key_save_step_count";
+
+    public static final String KEY_SOS_FILE_BODY = "key_sos_file_body";
+
+    public static final String KEY_SOS_FILE_FILE_TYPE = "key_sos_file_file_type";
+
+    public static final String KEY_STATUS = "key_status";
+
+    public static final String KEY_STEP_COUNT = "KEY_STEP_COUNT";
+
+    public static final String KEY_UNBOUND_FLAG = "KEY_UNBOUND_FLAG";
+
+    public static final String KEY_VIDEO_PATH = "KEY_VIDEO_PATH";
+
+    public static final int LOCATION_DATA = 217;
+
+    public static final int MONITOR_GOIN = 202;
+
+    public static final int MONITOR_GOOUT = 203;
+
+    public static final int MSG_WHAT_RELOAD_VOICE = 1000;
+
+    public static final int MSG_WHAT_SEND_OSSFILE = 1006;
+
+    public static final int MSG_WHAT_SEND_PAIR = 1003;
+
+    public static final int MSG_WHAT_SEND_PICTURE = 1002;
+
+    public static final int MSG_WHAT_SEND_VOICE = 1001;
+
+    public static final int MSG_WHAT_SILENCE_STATUS = 1005;
+
+    public static final int MSG_WHAT_VIDEO_CHAT = 1004;
+
+    public static final int MSG_WHAT_PPG = 1007;
+    public static final String key_ppg = "ppg";
+    public static final String key_bph = "bph";
+    public static final String key_bpl = "bpl";
+    public static final String key_spo2 = "sp02";
+
+
+    public static final int NEW_MEDIA_PUSH = 100;
+
+    public static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
+    public static final String OTHER_ALARM_END = "com.enqualcomm.support.OTHER_ALARM_END";
+
+    public static final String OTHER_ALARM_START = "com.enqualcomm.support.OTHER_ALARM_START";
+
+    public static final String OTHER_HEARTRATE_ALARM_END = "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_END";
+
+    public static final String OTHER_HEARTRATE_ALARM_START = "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START";
+
+    public static final int OUT_SILENCE = 700;
+
+    public static final int PASS_DATA_DIRECTLY = 500;
+
+    public static final int PLAY_RECORD_UPDATE = 207;
+
+    public static final int REBOOT_SYSTEM = 208;
+
+    public static final int RESET_SYSTEM = 210;
+
+    public static final String RESTORE_EXTRA_WIPE_EXTERNAL_STORAGE = "android.intent.extra.WIPE_EXTERNAL_STORAGE";
+
+    public static final String RESTORE_REASON = "android.intent.extra.REASON";
+
+
+    public static final String ACTION_START_FOTA_UPDATE = "com.ic.action.startfotaUpdate";
+    public static final String ACTION_SMSCMD = "com.enqualcomm.support.SMSCMD";
+    public static final String ACTION_SMSCMD_Reply = "com.ic.action.fotaUpdateReply";
+    public static final String ACTION_TINTERNAL_TEST = "com.ic.action.internaltest";
+
+    public static final String KeyReplyData = "reply";
+
+    public static final String ACTION_SMSCMD_TEST = "com.ic.action.internaltest";
+
+    public static final int RESULT_ERROR = 500;
+
+    public static final int RESULT_OK = 200;
+
+    public static final String RESUME_ACTION = "com.enqualcomm.imessage.RESUME_ACTION";
+
+    public static final String SERVICE_CLS_NAME = "com.enqualcomm.support.CoreService";
+
+    public static final String SERVICE_PKG_NAME = "com.enqualcomm.support";
+
+    public static final int SHUTDOWN_SYSTM = 209;
+
+    public static final String SLEEP_ALARM = "com.enqualcomm.support.SLEEP_ALARM";
+
+    public static final String SOS_ACTION = "com.enqualcomm.imessage.SOS_ACTION";
+
+    public static final int SOS_GOIN = 204;
+
+    public static final int SOS_GOOUT = 205;
+
+    public static final String STEP_COUNT_ALARM_ACTION = "com.enqualcomm.support.ACTION_STEP_COUNT_ALARM";
+
+    public static final String STRING_CMD_JSON_DATA = "cmdJsonData";
+
+    public static final String STWORKMODE_ALARM = "com.enqualcomm.support.ACTION_STWORKMODE_ALARM";
+
+    public static final String VALUE_SETTIING_VERSION = "value_setting_ver";
+
+    public static final int VIDEO_MESSAGE = 300;
+
+    public static final String WAKE_ALARM = "com.enqualcomm.support.WAKE_ALARM";
+
+    public static final String WEATHER_ALARM = "com.ic.alarm.ACTION_WEATHER_ALARM";
+    public static final String WEATHER_ACTION = "com.ic.action.ACTION_GET_WEATHER";
+    public static final String ACTION_QUERY_WEATHER = "com.ic.action_query_weather";
+    public static final String ACTION_WEATHER_RECEIVED = "com.ic.action_weather_recveived";
+    public static final String KEY_Weather = "weather";
+
+
+    public static final int WIFI_SET_RESULT = 217;
+
+    public static final int WORKMODE_CHANGED = 211;
+
+    public static final String contact = "contact";
+
+    public static final String wechat_contact = "content";
+
+
+    public static final String ACTION_CHECK_SERVER_RESPONSE = "com.enqualcomm.support.ACTION_CHECK_SERVER_RESPONSE";
+    public static final String ACTION_RETRY_SERVER_CONNECT = "com.enqualcomm.support.ACTION_RETRY_SERVER_CONNECT";
+    public static final String ACTION_CHECK_LOCATION_RESULT = "com.enqualcomm.support.ACTION_CHECK_LOCATION_RESULT";
+
+
+    public static final String ACTION_MESSAGE_SENT = "com.ic.action.message_sent";
+    public static final String ACTION_MESSAGE_RECEIVED = "com.ic.action.message_received";
+    public static final String KEY_MESSAGE_TYPE = "msgType";  //  分为 voice ,pic ,和 text
+    public static final String KEY_MESSAGE_URL = "msgUrl";  //  消息为 voice和 pic 此纪录为 路径, text消息则直接是消息内容。 utf-8 格式String
+    public static final String KEY_MESSAGE_FROM = "msgFrom"; // 消息来源(发送者名称),预留,暂时不用。
+
+
+    public static final String ACTION_TEMP_RESULT = "com.ic.action.temp_result";
+    public static final String KEY_TEMP_BODY = "body";  // double 体温
+    public static final String KEY_TEMP_WRIST = "wrist";  //  double 腕温
+    public static final String KEY_TEMP_OUT = "out";  //  double 腕温
+
+    public static String ACTION_ANTI_OFF0 = "com.ic.ACTION_ANTIOFF";
+    public static String ACTION_ANTI_OFF = "com.ic.ACTION_STRIP";
+    public static String KEY_ANTI_EVENT = "eventID"; //integer  eventID =1 脱落, eventID =0 佩戴
+    public static String KEY_ANTI_TXT = "eventTxt"; //String AnitMessage
+
+
+    public static String ACTION_BATTERYLOW = "com.ic.ACTION_BATTERYLOW";
+    public static String KEY_BATTERY_EVENT = "eventID"; //integer  eventID =1 battery low, eventID =0 解除
+
+    public static String PersistFotaServer2Url = "persist.sys.ota.host2";
+
+    //把服务器下发的文本消息作为短信消息存储在短信数据库中,mms.apk会接收此消息并保存到数据库
+    //persist.sys.pushtxtAsSMS == false的时候mms.apk会忽略此消息,默认事true,所以要关闭要单独设置
+    public static String ActionReceivePushTxt = "action.ic.PushTxtToSMSDB";
+    public static String ActionSrvPushTxt = "action.ic.srvPushTxt";
+
+/**
+ *   PreferenceManager.getDefaultSharedPreferences(context) , package name "com.enqualcomm.support"
+ */
 
+    /***
+     * 心率血压血氧校准值
+     * String 变量,用 "," 分割的 4个数据 格式为【ppg_adj,bph_adj,bpl_adj,spo2_adj】
+     * 例如
+     * 心率偏差ppg_adj=2,
+     * 高压偏差bph_adj=-2,
+     * 低压偏差bpl_adj=-3,
+     * 血氧偏差spo2_adj=5
+     * 则赋值 2,-2,-3,5
+     */
+    public static String SHAREKEY_SETTING_PPG_ECG_ADJUST = "PpgEcgAdjust";
+    /**
+     * 睡眠分数 , int
+     */
+    public static String SHAREKEY_SETTING_SLEEP_SCORE = "SleepScore";
+    /**
+     * 当前睡眠分数的日期  String yyMMddHHmm
+     * 可能时昨天的,算完就是当天的
+     */
+    public static String SHAREKEY_SETTING_SLEEP_SCORE_DATE = "SleepScoreDate";
+
+    /**
+     * 久坐检测时长,int 分钟为单位,此处为读取方法,可在显示前读取当前设置。
+     * 设置请采用broadcast方式发给协议层存储
+     */
+    public static String SHAREKEY_SETTING_SIT_ALARM_RANGE_IN_MINUTES = "SIT_RANGE";
+
+    /***
+     *  ACTion 用于 设置久坐时长分钟为单位
+     */
+
+    public static String ACTION_SET_SIT_RANGE = "com.ic.action.set_sit_range";
+    /**
+     * ACTION_SET_SIT_RANGE 参数 int,分钟数。
+     */
+    public static String KEY_SIT_RANGE = "sit_range";
+
+
+    /***
+     * 内部定时器用action alarm
+     */
+    public static String ACTION_SIT_ALARM = "com.ic.action.sit_alarm_local";
+
+    /**
+     * 发送给app做显示用
+     */
+    public static String ACTION_KEEPSIT_ALARM = "com.ic.action.keep_sit_alarm";
+
+
+    //获取Sensor数据的请求来源
+    public static final int FROM_SERVER = 0;
+    public static final int FROM_ALARM = 1;
+    public static final int FROM_CLIENT = 2;
 
 }
 
index 361084b..885f2fe 100644 (file)
@@ -12,10 +12,9 @@ import android.media.AudioManager;
 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.support.annotation.Nullable;
 import android.widget.Toast;
 
 import com.enqualcomm.support.adapter.LBSHelper;
@@ -32,7 +31,6 @@ import com.enqualcomm.support.service.HeartRateManager;
 import com.enqualcomm.support.service.KeepAlive;
 import com.enqualcomm.support.service.SendChatMessage;
 import com.enqualcomm.support.service.SilentManager;
-import com.enqualcomm.support.service.UpLoadDataPoints;
 import com.enqualcomm.support.service.base.AbstractConnectionService;
 import com.enqualcomm.support.service.base.AbstractInvokeHandlerService;
 import com.enqualcomm.support.utils.AlarmHelper;
@@ -80,6 +78,7 @@ 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;
 import static com.enqualcomm.support.Constants.ANTI_ALARM;
+import static com.enqualcomm.support.Constants.FROM_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;
@@ -267,7 +266,7 @@ public class CoreService extends Service {
         }
     };
 
-    private BroadcastReceiver broadcastPracticeCMDReceiver = new BroadcastReceiver() {
+    private final 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);
@@ -283,7 +282,6 @@ public class CoreService extends Service {
                     //停止自由锻炼,恢复正常
                     Runtime.practising = false;
                     Util.setSystemProperties(Config.KeyPractiseState, "false");
-                    HeartRateManager.stopPPGtest();
 
                     //最后检测是否还有数据需要发送
                     if (Runtime.healthInfo.check_info_item_finished()) {
@@ -353,8 +351,6 @@ public class CoreService extends Service {
 
     private KeepAlive mKeepAlive;
 
-    final Messenger mMessenger = new Messenger(new RequestHandler(this));
-
 
     private SimSignalUtil mSignalUtil;
 
@@ -435,29 +431,22 @@ public class CoreService extends Service {
         }
     };
 
-    private int startAlarmCount = 0;
-
-    UpLoadDataPoints upLoadDataPoints;
-
-
     private AbstractConnectionService getConnectionServiceChain() {
-//        Initialize initialize = new Initialize();
         CheckSIM checkSIM = new CheckSIM();
         this.mKeepAlive = new KeepAlive();
         this.mDeliver = new Deliver(this.connection, this.runtime);
-//        initialize.setNext(checkSIM);
         checkSIM.setNext(this.mKeepAlive);
         this.mKeepAlive.setNext(this.mDeliver);
         return checkSIM;
     }
 
-
     SilentManager silentManager;
 
     private AbstractInvokeHandlerService getInvokeHandlerServiceChain() {
         ICLogger.i("getInvokeHandlerServiceChain");
         SendChatMessage sendChatMessage = new SendChatMessage();
-        HeartRateManager heartRateManager = new HeartRateManager(this.runtime, this.connection);
+        HeartRateManager heartRateManager = HeartRateManager.getInstance();
+        heartRateManager.init(this.runtime);
         antiservice = new AntiMonitorService();
         silentManager = SilentManager.getInstance();// new SilentManager();
         sendChatMessage.setNext(heartRateManager);
@@ -537,15 +526,16 @@ public class CoreService extends Service {
 
 
     private void setPracticeAlarm() {
-
         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);
+            AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context,
+                    Runtime.practice_cycle,
+                    Constants.ACTION_PRACTICE_REPORT_ALARM);
         mHandler.post(mdoPracticeCheck);
     }
 
-    private Runnable mdoPracticeCheck = new Runnable() {
+    private final Runnable mdoPracticeCheck = new Runnable() {
         @Override
         public void run() {
             //获取并设置当前步数
@@ -555,11 +545,11 @@ public class CoreService extends Service {
             //        locationClient.triggerLocationProcess();
             //开启测温
             if (runtime.check_stat_do_temp_test())
-                TemperatureUtil.DoTempTest();
+                TemperatureUtil.getInstance().DoTempTest(FROM_ALARM);
 
             //开启测量PPG
             if (runtime.check_stat_do_ppg_test())
-                HeartRateManager.triggerPPGtest();
+                HeartRateManager.getInstance().triggerPPGTest(FROM_ALARM);
 
         }
     };
@@ -572,7 +562,6 @@ public class CoreService extends Service {
     }
 
     private void wakeUpFromSleep() {
-        this.startAlarmCount = 0;
 //        alarmCycle = 1;
 //        setAlarm(alarmCycle);
 //        runtime.getLocationInstance().setLocation_cycle(1);
@@ -605,10 +594,6 @@ public class CoreService extends Service {
         return wakeLock;
     }
 
-    public IBinder onBind(Intent paramIntent) {
-        return this.mMessenger.getBinder();
-    }
-
 
     public Runtime getRuntime() {
         return runtime;
@@ -1225,7 +1210,7 @@ public class CoreService extends Service {
                 //收到定时定位消息
                 setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
                 StringBuilder stringBuilder1 = new StringBuilder();
-                stringBuilder1.append("LOCATION_ALARM  work mod=");
+                stringBuilder1.append("LOCATION_ALARM  com.ic.work mod=");
                 stringBuilder1.append(runtime.getLocationInstance().getWorkingMod());
                 if (Config.LOG_TOFILE) ICLogger.logToFile("alarmCycle", stringBuilder1.toString());
 //                this.locationClient.triggerLocationProcess();
@@ -1242,7 +1227,7 @@ public class CoreService extends Service {
 
             } else if (Constants.ACTION_PRACTICE_REPORT_ALARM.equals(paramIntent.getAction())) {
                 //alarm是延迟的,所以这个判断主要是给最后一次可能无效的测量
-                if (Runtime.practising == true) {
+                if (Runtime.practising) {
                     //开始下一轮健康测量
                     setPracticeAlarm();
                 }
@@ -1376,13 +1361,13 @@ public class CoreService extends Service {
         }
 
         if (runtime.check_stat_do_ppg_test()) {
-            if (Runtime.practising == true) {
+            if (Runtime.practising) {
                 sb.append("自由锻炼中,跳过原有的循环心率检测!");
                 ICLogger.i("自由锻炼中,跳过原有的循环心率检测!");
             } else {
                 sb.append("setHeartRateDetectAlarm " + heartRateDetectAlarmCycle);
                 if (!server_starting)
-                    HeartRateManager.triggerPPGtest();
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_ALARM);
             }
         }
         if (Config.LOG_TOFILE) ICLogger.logToFile("alarmCycle", sb.toString());
@@ -1438,7 +1423,7 @@ public class CoreService extends Service {
             ICLogger.i("locationCycle == 0 stop Location !");
             Config.noLocationCycle = true;
         }
-        if (Config.noLocationCycle == false)
+        if (!Config.noLocationCycle)
             AlarmHelper.setRealTimeAlarmInSeconds(runtime.getContextProxy().context, cycle, ACTION_LOCATION_ALARM);
         else
             ICLogger.i("skip set LocationAlarm ");
@@ -1485,7 +1470,6 @@ public class CoreService extends Service {
     }
 
     public void setTempAlarm() {
-//        int mod=runtime.getLocationInstance().getWorkingMod();
         StringBuilder sb = new StringBuilder();
         int cycle = runtime.temp_test_Cycle;
 
@@ -1499,16 +1483,16 @@ public class CoreService extends Service {
         } else {
             sb.append(" setTempAlarm  " + TEMP_ALARM + ", cycle " + cycle + "<=1 skip!");
         }
-//        locationClient.triggerLocationProcess();
         ICLogger.i(sb.toString());
         FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", sb.toString());
 
         if (runtime.check_stat_do_temp_test()) {
-            if (Runtime.practising == true) {
+            if (Runtime.practising) {
                 ICLogger.i("自由锻炼中,跳过原有的循环温度检测!");
             } else {
+                ICLogger.d("server_starting == > " + server_starting);
                 if (!server_starting)
-                    TemperatureUtil.doTempTestInThread();
+                    TemperatureUtil.getInstance().doTempTestInThread(FROM_ALARM);
             }
         }
 
@@ -1542,21 +1526,6 @@ public class CoreService extends Service {
         }
     }
 
-    private static class RequestHandler extends Handler {
-        private final WeakReference<CoreService> mReference;
-
-        RequestHandler(CoreService param1CoreService) {
-            this.mReference = new WeakReference(param1CoreService);
-        }
-
-        public void handleMessage(Message param1Message) {
-            CoreService coreService = (CoreService) this.mReference.get();
-            if (coreService == null)
-                return;
-            coreService.invokeHandlerServiceChain.processUserRequest(param1Message, coreService.connection, coreService.runtime);
-        }
-    }
-
     private static final String TAG = "ICSrv." + CoreService.class.getSimpleName();
 
     private ScheduledThreadPoolExecutor mTimer_retry_connect = null;
@@ -1679,16 +1648,9 @@ public class CoreService extends Service {
         }
     }
 
-    private boolean needLogin() {
-        return true;
-    }
-
-
     @Override
     public void onDestroy() {
         super.onDestroy();
-
-
         saveStepCount();
         this.connectionServiceChain.processDetach(this.connection, this.runtime);
         this.invokeHandlerServiceChain.processDetach(this.connection, this.runtime);
@@ -1701,6 +1663,12 @@ public class CoreService extends Service {
 
     }
 
+    @Nullable
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
     public void disconnect_server() {
         this.connection.close();
     }
index 7847a9a..a535479 100644 (file)
@@ -6,55 +6,35 @@ import android.content.res.Configuration;
 import android.os.Handler;\r
 import android.support.multidex.MultiDex;\r
 import android.util.SparseArray;\r
-import com.enqualcomm.support.utils.ICLogger;\r
-import java.util.HashMap;\r
-\r
 \r
+import com.enqualcomm.support.utils.ICLogger;\r
 \r
-import de.mindpipe.android.logging.log4j.LogConfigurator;\r
+import java.util.HashMap;\r
 \r
 \r
 public class ICApplication extends Application {\r
     private static final String TAG = "protocol." + ICApplication.class.getSimpleName();\r
 //    private static final boolean DEBUG = BuildConfig.DEBUG;\r
 \r
-    private static ICApplication instance=null;\r
+    private static ICApplication instance = null;\r
+\r
+    public static Context sContext = null;\r
 \r
-    private static HashMap<String, SparseArray<Handler>> mConfigurationChangedHandlerHashMap = new HashMap<>();\r
 \r
+    private final static HashMap<String, SparseArray<Handler>> mConfigurationChangedHandlerHashMap = new HashMap<>();\r
 \r
-//    private static void log(String msg) {\r
-//        if (DEBUG) {\r
-//            Log.i(TAG, msg);\r
-////            FileLoger.log(TAG, "", msg);\r
-//        }\r
-//    }\r
-//\r
-//    private static void log(String funcName, String msg) {\r
-//        if (DEBUG) {\r
-//            Log.i(TAG, "[" + funcName + "]" + msg);\r
-////            FileLoger.log(TAG, funcName, msg);\r
-//        }\r
-//    }\r
 \r
     @Override\r
     public void onCreate() {\r
         super.onCreate();\r
-\r
         ICLogger.setContext(this.getApplicationContext());\r
-\r
         String info = String.format("VERSION_CODE:%s, VERSION_NAME:%s",\r
                 BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME);\r
-//        log("onCreate", info);\r
-        ICLogger.i(TAG+"[onCreate]" + info);\r
-\r
+        ICLogger.i(TAG + "[onCreate]" + info);\r
         CrashHandler crashHandler = CrashHandler.getInstance();\r
         crashHandler.init(getApplicationContext());\r
         instance = this;\r
-\r
-  //      String softwareVersion = SystemProperties.get("ro.eqc.software_version");\r
-  //      log("softwareVersion:" + softwareVersion);\r
-\r
+        sContext = getApplicationContext();\r
     }\r
 \r
 \r
@@ -80,7 +60,7 @@ public class ICApplication extends Application {
 \r
         for (Object keyObj : mConfigurationChangedHandlerHashMap.keySet()) {\r
             String key = (String) keyObj;\r
-            ICLogger.i("WatchApplication"+ " onConfigurationChanged, " + key);\r
+            ICLogger.i("WatchApplication" + " onConfigurationChanged, " + key);\r
             SparseArray<Handler> sparseArray = mConfigurationChangedHandlerHashMap.get(key);\r
             if (sparseArray != null) {\r
                 Handler handler = sparseArray.valueAt(0);\r
index 70b2873..10d2f47 100644 (file)
@@ -80,7 +80,7 @@ public class ICLocation {
     public static final int NORMAL_MOD=1;     //location rate 1 time per 15 minutes\r
     public static final int LOWPOWER_MOD=2;   // location rate 1 time per hour\r
     public static final int REALTIME_MOD=3; //location rate 1 time per minutes\r
-    public static final int EMERGNECY_MOD=4; //location rate 1 time per minutes work 5 minutes\r
+    public static final int EMERGNECY_MOD=4; //location rate 1 time per minutes com.ic.work 5 minutes\r
     public static final int CUSTOM_MOD=5; //location rate 1 time per minutes\r
     public static final int CUSTOM_MOD8_GPS=8; //location rate 1 time per minutes\r
     public static final int CUSTOM_MOD8_WIFI=9; //location rate 1 time per minutes\r
index 6881146..cb3550f 100644 (file)
@@ -8,40 +8,41 @@ public class heartRateStatus {
     private String lastTestTime;\r
     private int lastBPH;\r
     private int lastBPL;\r
-    private int lastSpo2=0;\r
-\r
-    private int BPH_ref=0;\r
-    private int BPL_ref=0;\r
-    private int Age=0;\r
-    private int Sex=0;\r
-    private int sp02_adjust=0;\r
-    private int ppg_adjust=0;\r
-    private int bph_adjust=0;\r
-    private int bpl_adjust=0;\r
-\r
-    public int ppg_threshold_max=0;\r
-    public int ppg_threshold_min=0;\r
-    public int bph_threshold_max=0;\r
-    public int bph_threshold_min=0;\r
-    public int bpl_threshold_max=0;\r
-    public int bpl_threshold_min=0;\r
-\r
-    public void setXY_Ref(int refBPH,int refBPL,int refSex,int refAge){\r
-        BPH_ref=refBPH;\r
-        BPL_ref=refBPL;\r
-        Age=refAge;\r
-        Sex=refSex;\r
+    private int lastSpo2 = 0;\r
+\r
+    private int BPH_ref = 0;\r
+    private int BPL_ref = 0;\r
+    private int Age = 0;\r
+    private int Sex = 0;\r
+    private int sp02_adjust = 0;\r
+    private int ppg_adjust = 0;\r
+    private int bph_adjust = 0;\r
+    private int bpl_adjust = 0;\r
+\r
+    public int ppg_threshold_max = 0;\r
+    public int ppg_threshold_min = 0;\r
+    public int bph_threshold_max = 0;\r
+    public int bph_threshold_min = 0;\r
+    public int bpl_threshold_max = 0;\r
+    public int bpl_threshold_min = 0;\r
+\r
+    public void setXY_Ref(int refBPH, int refBPL, int refSex, int refAge) {\r
+        BPH_ref = refBPH;\r
+        BPL_ref = refBPL;\r
+        Age = refAge;\r
+        Sex = refSex;\r
     }\r
 \r
-    public void setAdjust(int _ppg_adjust,int _bph_adjust,int _bpl_adjust ,int _sp02_adjust){\r
-        ppg_adjust=_ppg_adjust;\r
-        bph_adjust=_bph_adjust;\r
-        bpl_adjust=_bpl_adjust;\r
-        sp02_adjust=_sp02_adjust;\r
+    public void setAdjust(int _ppg_adjust, int _bph_adjust, int _bpl_adjust, int _sp02_adjust) {\r
+        ppg_adjust = _ppg_adjust;\r
+        bph_adjust = _bph_adjust;\r
+        bpl_adjust = _bpl_adjust;\r
+        sp02_adjust = _sp02_adjust;\r
     }\r
 \r
 \r
     private HEARTRATE_WORKINGSTAT currentStat;\r
+\r
     public enum HEARTRATE_WORKINGSTAT {\r
         HEARTRATE_CLOSED,\r
         HEARTRATE_OPEN,\r
@@ -49,99 +50,103 @@ public class heartRateStatus {
         HEARTRATE_WARED_AND_TESTING,\r
         HEARTRATE_TEST_SUCCESS,\r
         HEARTRATE_TEST_FAILED,\r
-    } ;\r
-\r
-    public boolean isHeartrRateExists(){\r
-        return ICJniUtils.isPPGavailable()==1;\r
     }\r
 \r
-    public HEARTRATE_WORKINGSTAT getHeartrateWorkingStat(){\r
+    ;\r
+\r
+    public boolean isHeartrRateExists() {\r
+        return ICJniUtils.isPPGavailable() == 1;\r
+    }\r
 \r
+    public HEARTRATE_WORKINGSTAT getHeartrateWorkingStat() {\r
         return currentStat;\r
     }\r
 \r
-    public void setHeartrateStat(HEARTRATE_WORKINGSTAT stat){\r
+    public void setHeartrateStat(HEARTRATE_WORKINGSTAT stat) {\r
 \r
         currentStat = stat;\r
     }\r
-    public int getPPG(){\r
-        int ppg=lastHeartrate;\r
-        if(ppg_adjust!=0)\r
-            ppg+=ppg_adjust;\r
+\r
+    public int getPPG() {\r
+        int ppg = lastHeartrate;\r
+        if (ppg_adjust != 0)\r
+            ppg += ppg_adjust;\r
         return ppg;\r
     }\r
 \r
     public int getBPH() {\r
-        int BPH=lastBPH;\r
-        if (BPH_ref>=35 && BPH_ref<200) {\r
+        int BPH = lastBPH;\r
+        if (BPH_ref >= 35 && BPH_ref < 200) {\r
             if (lastBPH > BPH_ref + 20)\r
                 BPH = BPH_ref + 20;\r
             if (lastBPH < BPH_ref - 20)\r
                 BPH = BPH_ref - 20;\r
         }\r
 \r
-        if (bph_adjust!=0){\r
-            BPH+=bph_adjust;\r
+        if (bph_adjust != 0) {\r
+            BPH += bph_adjust;\r
         }\r
         return BPH;\r
     }\r
+\r
     public int getBPL() {\r
-        int BPL=lastBPL;\r
-        if(BPL_ref>=35 && BPL_ref<200) {\r
+        int BPL = lastBPL;\r
+        if (BPL_ref >= 35 && BPL_ref < 200) {\r
             if (lastBPL > BPL_ref + 20)\r
                 BPL = BPL_ref + 20;\r
             if (lastBPL < BPL_ref - 20)\r
                 BPL = BPL_ref - 20;\r
         }\r
 \r
-        if (bpl_adjust!=0){\r
-            BPL+=bpl_adjust;\r
+        if (bpl_adjust != 0) {\r
+            BPL += bpl_adjust;\r
         }\r
         return BPL;\r
     }\r
 \r
 \r
-    public int getSpo2(){\r
-        int sp02=lastSpo2;\r
-        if (sp02_adjust!=0)\r
-            sp02+=sp02_adjust;\r
+    public int getSpo2() {\r
+        int sp02 = lastSpo2;\r
+        if (sp02_adjust != 0)\r
+            sp02 += sp02_adjust;\r
         return sp02;\r
     }\r
 \r
 \r
-    public String getTestTime(){\r
+    public String getTestTime() {\r
         return lastTestTime;\r
     }\r
-    public void setLastTestTime(String testtime){\r
-        lastTestTime=testtime;\r
+\r
+    public void setLastTestTime(String testtime) {\r
+        lastTestTime = testtime;\r
     }\r
 \r
 \r
-    public void setLastHeartrate(int value,int bph,int bpl){\r
-        lastHeartrate=value;\r
-        lastBPH=bph;\r
-        lastBPL=bpl;\r
+    public void setLastHeartrate(int value, int bph, int bpl) {\r
+        lastHeartrate = value;\r
+        lastBPH = bph;\r
+        lastBPL = bpl;\r
     }\r
 \r
-    public void setLastHeartrate(int value,int bph,int bpl,int sp02){\r
-        lastHeartrate=value;\r
-        lastBPH=bph;\r
-        lastBPL=bpl;\r
-        lastSpo2=sp02;\r
+    public void setLastHeartrate(int value, int bph, int bpl, int sp02) {\r
+        lastHeartrate = value;\r
+        lastBPH = bph;\r
+        lastBPL = bpl;\r
+        lastSpo2 = sp02;\r
     }\r
 \r
-//心率低阀值,低于该阀值上传心率,如果未设置,则留空\r
+    //心率低阀值,低于该阀值上传心率,如果未设置,则留空\r
 //心率高阀值,高于该阀值上传心率,如果未设置,则留空\r
 //低压阀值,低压低于该阀值上传血压,如果未设置,则留空\r
 //低压阀值,低压高于该阀值上传血压,如果未设置,则留空\r
 //高压阀值,高压低于该阀值上传血压,如果未设置,则留空\r
 //高压阀值,高压高于该阀值上传血压,如果未设置,则留空\r
-    public void setWarningThreshold(int _ppg_threshold_max,int _ppg_threshold_min,int _bph_threshold_max,int _bph_threshold_min,int _bpl_threshold_max,int _bpl_threshold_min){\r
-        ppg_threshold_max=_ppg_threshold_max;\r
-        ppg_threshold_min=_ppg_threshold_min;\r
-        bph_threshold_max=_bph_threshold_max;\r
-        bph_threshold_min=_bph_threshold_min;\r
-        bpl_threshold_max=_bpl_threshold_max;\r
-        bpl_threshold_min=_bpl_threshold_min;\r
+    public void setWarningThreshold(int _ppg_threshold_max, int _ppg_threshold_min, int _bph_threshold_max, int _bph_threshold_min, int _bpl_threshold_max, int _bpl_threshold_min) {\r
+        ppg_threshold_max = _ppg_threshold_max;\r
+        ppg_threshold_min = _ppg_threshold_min;\r
+        bph_threshold_max = _bph_threshold_max;\r
+        bph_threshold_min = _bph_threshold_min;\r
+        bpl_threshold_max = _bpl_threshold_max;\r
+        bpl_threshold_min = _bpl_threshold_min;\r
     }\r
 }\r
index 316e998..bf109ce 100644 (file)
@@ -43,6 +43,7 @@ import java.util.concurrent.locks.ReentrantLock;
 import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
 import static com.enqualcomm.support.Constants.ACTION_WAKEUP_ALARM;
 import static com.enqualcomm.support.Constants.DIALOG_ACTION;
+import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.bean.Contact.CATEGORY_GROUP;
 import static com.enqualcomm.support.bean.Content.CONTACT_CATEGORY_GROUP;
 
@@ -454,13 +455,13 @@ public class Deliver extends AbstractConnectionService {
                 if (Util.getSystemProperties("persist.sys.do_check_condition", "false").equals("true")) {
                     //开启测温
                     if (mRuntime.check_stat_do_temp_test()) {
-                        TemperatureUtil.DoTempTest();
+                        TemperatureUtil.getInstance().DoTempTest(FROM_SERVER);
                     }
 
                     Util.mSleep(5000);
                     //开启测量PPG
                     if (mRuntime.check_stat_do_ppg_test()) {
-                        HeartRateManager.triggerPPGtest();
+                        HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
                     }
                 }
 
index fa75ad6..10f70b8 100644 (file)
@@ -1,23 +1,18 @@
 package com.enqualcomm.support.service;
 
 import android.content.BroadcastReceiver;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
-import android.hardware.SensorManager;
-import android.os.Bundle;
+import android.content.ServiceConnection;
 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 com.enqualcomm.support.Config;
-import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.CoreService;
+import com.enqualcomm.support.ICApplication;
 import com.enqualcomm.support.LocationClient;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
@@ -25,35 +20,21 @@ 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.SimSignalUtil;
 import com.enqualcomm.support.utils.TimeUtil;
-import com.enqualcomm.support.utils.Util;
-import com.ic.jni.ICJniUtils;
 import com.ic.protocols.protocolAPIHelper;
+import com.ic.work.IHeartRateSensorCallback;
+import com.ic.work.IHeartRateSensorService;
+import com.ic.work.domain.HeartRate;
 
-import java.util.Random;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import static android.content.Context.SENSOR_SERVICE;
 import static com.enqualcomm.support.Constants.ACTION_BROADCAST_PPG;
 import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;
-import static com.enqualcomm.support.Constants.MSG_WHAT_PPG;
-import static com.enqualcomm.support.Constants.key_bph;
-import static com.enqualcomm.support.Constants.key_bpl;
-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 SimSignalUtil mSignalUtil;
+public class HeartRateManager extends AbstractInvokeHandlerService {
 
     private Runtime runtime;
-    private Connection connection;
+    private static final Handler mHandler = null;
 
-    private ScheduledThreadPoolExecutor timerPPG = null;
-    private static Handler mHandler = null;
+    public final static String ACTION_HEART_RATE = "com.ic.sensor.data.action.HEART_RATE";
 
     private void checkWarning() {
         //ppg
@@ -61,7 +42,6 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
 
             if (runtime.setAlarmType(Runtime.AlarmType.ALARM_HEART_RATE_HIGH)) {
                 //trigger AP10 报警定位
-//        Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
                 ICLogger.i("triggerSOSLocationProcess ");
                 LocationClient.getInstance().triggerSOSLocationProcess();
             }
@@ -69,7 +49,6 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
         } 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();
             }
@@ -82,7 +61,6 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
                 //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) {
@@ -90,7 +68,6 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
                 //trigger AP10 报警定位
                 ICLogger.i("triggerSOSLocationProcess ");
                 LocationClient.getInstance().triggerSOSLocationProcess();
-//        Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
             }
         }
 
@@ -101,7 +78,6 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
                 //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) {
@@ -109,7 +85,6 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
                 //trigger AP10 报警定位
                 ICLogger.i("triggerSOSLocationProcess ");
                 LocationClient.getInstance().triggerSOSLocationProcess();
-//        Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
             }
 
         }
@@ -126,273 +101,144 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
         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();
-                                    }
-                                });
-                            }
-                        } 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();
-                }
-                break;
-                case 200: {
-                    startPPG();
-                }
-                break;
-                case 300: {
-                    stopPPG();
+    private static HeartRateManager sInstance = null;
+
+    public static HeartRateManager getInstance() {
+        if (sInstance == null) {
+            synchronized (HeartRateManager.class) {
+                if (sInstance == null) {
+                    sInstance = new HeartRateManager();
                 }
-                break;
             }
-            return false;
-        });
-
+        }
+        return sInstance;
     }
 
 
-    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 HeartRateManager() {
+        //绑定远程服务
+        Intent intent = new Intent();
+        intent.setAction(ACTION_HEART_RATE);
+        ICApplication.sContext.bindService(intent, mRemoteConnection, Context.BIND_AUTO_CREATE);
     }
 
-    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 init(Runtime runtime) {
+        this.runtime = runtime;
     }
 
-    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 {
-                    currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_WARED_AND_TESTING;
-                }
-            } else {
-                currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_NOTWARED;
-            }
-        } else {
-            currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_CLOSED;
-        }
+    private IHeartRateSensorService heartRateSensorService;
+    private final ServiceConnection mRemoteConnection = new ServiceConnection() {
 
 
-        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();
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            ICLogger.d("onServiceConnected...");
+            heartRateSensorService = IHeartRateSensorService.Stub.asInterface(service);
+            try {
+                heartRateSensorService.registerCallback(mRemoteCallback);
+            } catch (Exception e) {
+                e.printStackTrace();
             }
         }
 
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            ICLogger.d("onServiceDisconnected...");
 
-        if (currentStat == heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS) {
-            runtime.getHRS().setLastHeartrate(PPG, BPH, BPL, SPo2);
-            delayCount--;
-            if (delayCount < 0) //达到延迟时间后,停止检测并发送数据
-                sendAndStopPPG();
-
-        } else {
-            runtime.getHRS().setLastHeartrate(0, 0, 0, 0);
         }
-        runtime.getHRS().setHeartrateStat(currentStat);
-
+    };
 
-        testCount--;
-        if (testCount < 0) {
-            ICLogger.i("PPG 超过 " + MAX_TESTTIMES + "秒 未能得出结果,取消检测报告!");
-            stopPPG();
+    private final IHeartRateSensorCallback.Stub mRemoteCallback = new IHeartRateSensorCallback.Stub() {
+        @Override
+        public void onHeartRateGet(HeartRate heartRate) {
+            //处理心率结果
+            ICLogger.d("心率测试结果来了..." + heartRate);
+            runtime.getHRS().setHeartrateStat(heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS);
+            runtime.getHRS().setLastHeartrate(heartRate.getHeartRate(), heartRate.getBloodHeight(), heartRate.getBloodLow(), heartRate.getOxygen());
+            uploadResult();
         }
 
-    }
-
-    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();
+        @Override
+        public void onGetData() {
+            ICLogger.d("正在获取心率数据...");
         }
-        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 秒更新一次数据
-
-            }
+        @Override
+        public void onWaiting() {
+            ICLogger.d("正在等待心率测试任务执行...");
         }
-    }
+    };
 
-    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");
+    private void uploadResult() {
+        //只有检测PPG成功,且网络连接中才发送数据
+        if (this.runtime.getHRS().getHeartrateWorkingStat() == heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS) {
+            this.runtime.getHRS().setLastTestTime(TimeUtil.getSystemTime3());
+            //发送PPG给Launcher,显示在主界面用
+            sendHeartBroadcast(this.runtime.getHRS().getPPG(), this.runtime.getHRS().getSpo2());
+            if (Runtime.practising) {
+                ICLogger.i("自由锻炼中,设置测量心率! " + this.runtime.getHRS().getPPG() + "," + this.runtime.getHRS().getBPH() + "," + this.runtime.getHRS().getBPL() + "," + this.runtime.getHRS().getSpo2());
+                Runtime.healthInfo.setPPGECGData(this.runtime.getHRS().getPPG(), this.runtime.getHRS().getBPH(), this.runtime.getHRS().getBPL(), this.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();
+                        }
+                    });
+                }
             } else {
-                timerPPG.shutdownNow();
-                timerPPG.purge();
-                ICJniUtils.disablePPG();
+                StringMessage PPGDATA = protocolAPIHelper.getPPG_ECG_MSG(this.runtime);
+                //发送给EQC服务器的
+                sendBroadcastPPGResult();
+                //因为协议中没有时间变量,所以只能实时传输,如果恰巧没有网络也只能丢弃,有时间变量的话,可以考虑通过deliver的buffer来进行缓存发送
+                if (PPGDATA == null) {
+                    StringMessage ppgd = protocolAPIHelper.getPPG_MSG(this.runtime.getHRS().getPPG(), this.runtime);
+                    StringMessage bloodd = protocolAPIHelper.getBlood_MSG(this.runtime.getHRS().getBPH(), this.runtime.getHRS().getBPL(), this.runtime);
+                    StringMessage oxd = protocolAPIHelper.getOxygen_MSG(this.runtime.getHRS().getSpo2(), this.runtime);
+                    Deliver.sendLocationMSG(ppgd);
+                    Deliver.sendLocationMSG(bloodd);
+                    Deliver.sendLocationMSG(oxd);
+                    checkWarning();
+                } else {
+                    Deliver.sendLocationMSG(PPGDATA);
+                    ICLogger.i("Send PPG " + PPGDATA.isFromCache());
+                    checkWarning();
+                }
             }
-            isTimerStarted = false;
-        }
 
-        releaseWakeLock();
+        } else {
+            ICLogger.i("PPG Failed for Timeout!");
+        }
     }
 
-    private void callback(Messenger paramMessenger, int paramInt) {
-        if (paramMessenger != null)
-            try {
-                paramMessenger.send(Message.obtain(null, paramInt));
-                return;
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
+
+    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 BroadcastReceiver PPGStartReceiver = new BroadcastReceiver() {
+    private final BroadcastReceiver PPGStartReceiver = new BroadcastReceiver() {
         public void onReceive(Context param1Context, Intent param1Intent) {
             if (ACTION_HEATR_RATE_START.equals(param1Intent.getAction())) {
-
                 //此消息来源于BroadCaset,收到开始测试的消息。
                 //此时需要重置HeartRateDetect Timer
                 //倘若有 参数 PPGTestCycle,则根据这个数值进行设置
@@ -404,10 +250,7 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
                 }
                 ICLogger.i("PPGStartReceiver ACTION_HEATR_RATE_START " + ppgtestCycle);
                 CoreService.getInstance().setHeartRateDetectAlarm(runtime.getPpgTestCycle());
-//        HeartRateManager.this.startPPG();
             }
-
-
         }
     };
 
@@ -426,161 +269,44 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
     }
 
     public void onAttach(Connection paramConnection, Runtime paramRuntime) {
-
-//    this.mSignalUtil = SimSignalUtil.getInstance((paramRuntime.getContextProxy()).context);
         regReceiver();
     }
 
     public void onDetach(Connection paramConnection, Runtime paramRuntime) {
+        ICLogger.d("onDetach...");
         unRegReceiver();
+        //取消服务注册
+        try {
+            heartRateSensorService.unRegisterCallback(mRemoteCallback);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        ICApplication.sContext.unbindService(mRemoteConnection);
     }
 
-    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);
-////      str = paramIntent.getStringExtra("filepath");
-////      String str1 = paramIntent.getStringExtra("number");
-//      StringBuilder stringBuilder = new StringBuilder();
-//        stringBuilder.append("PPG Started on Action "+ACTION_HEATR_RATE_START);
-////        stringBuilder.append(str);
-////        stringBuilder.append("number == ");
-////        stringBuilder.append(str1);
-//      ICLogger.i(stringBuilder.toString());
-//      //周期测量执行
-//      if (Runtime.practising==true) {
-//        ICLogger.i("自由锻炼中,跳过原有的循环心率检测!");
-//        return false;
-//      }
-//      startPPG();
-//    }
-        return false;
-    }
-
-    public static void triggerPPGtest() {
+    public void triggerPPGTest(int from) {
         if (CoreService.getInstance() != null) {
             if (CoreService.getInstance().getRuntime().Anti_off_flag == 1) {
                 ICLogger.i("未佩戴,取消 triggerPPGtest!");
                 return;
             }
         }
-        if (mHandler != null) mHandler.sendEmptyMessage(200);
-    }
-
-    public static void stopPPGtest() {
-        if (mHandler != null) mHandler.sendEmptyMessage(300);
-    }
-
-    public boolean onUserRequest(Message message, Connection connection, final Runtime runtime) {
-
-
-        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);
-
-                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() {
-//                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);
-                    }
-                }
-                callback(message.replyTo, Constants.RESULT_OK);
-
-            default:
-                break;
+        //开始去测试
+        try {
+            heartRateSensorService.getHeartRateInfo(from);
+        } catch (Exception e) {
+            e.printStackTrace();
         }
-
-        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--上手);*/
+    public boolean onUserRequest(Intent paramIntent, Connection paramConnection, Runtime paramRuntime) {
+        return false;
     }
 
-    @Override
-    public void onAccuracyChanged(Sensor sensor, int i) {
-        ICLogger.i("onAccuracyChanged() is called " + sensor.getName() + " accuracy=" + i);
+    public boolean onUserRequest(Message message, Connection connection, final Runtime runtime) {
+        return false;
     }
 }
 
index d4e63b2..de3136e 100644 (file)
@@ -11,31 +11,30 @@ import java.lang.reflect.Method;
 import java.util.Calendar;\r
 \r
 public class AlarmHelper {\r
-  private static final String ACTION_STEP_COUNT_ALARM = "com.enqualcomm.support.ACTION_STEP_COUNT_ALARM";\r
-  \r
-  private static final long ONE_DAY = 86400000L;\r
-  \r
-  private static final long ONE_WEEK = 604800000L;\r
-  \r
-  private static Method setImpl;\r
-  \r
-\r
-  \r
-  static  {\r
-      try {\r
-        setImpl = AlarmManager.class.getDeclaredMethod("setImpl", new Class[] { int.class, long.class, long.class, long.class, PendingIntent.class, android.os.WorkSource.class });\r
-        setImpl.setAccessible(true);\r
-\r
-      } catch (Exception e) {\r
-        e.printStackTrace();\r
-        ICLogger.e(e.getMessage(),e);\r
-      }\r
-  }\r
-\r
-  //设置闹铃\r
-  public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis, long intervalMillis, PendingIntent paramPendingIntent) {\r
-\r
-    paramAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, paramPendingIntent);\r
+    private static final String ACTION_STEP_COUNT_ALARM = "com.enqualcomm.support.ACTION_STEP_COUNT_ALARM";\r
+\r
+    private static final long ONE_DAY = 86400000L;\r
+\r
+    private static final long ONE_WEEK = 604800000L;\r
+\r
+    private static Method setImpl;\r
+\r
+\r
+    static {\r
+        try {\r
+            setImpl = AlarmManager.class.getDeclaredMethod("setImpl", new Class[]{int.class, long.class, long.class, long.class, PendingIntent.class, android.os.WorkSource.class});\r
+            setImpl.setAccessible(true);\r
+\r
+        } catch (Exception e) {\r
+            e.printStackTrace();\r
+            ICLogger.e(e.getMessage(), e);\r
+        }\r
+    }\r
+\r
+    //设置闹铃\r
+    public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis, long intervalMillis, PendingIntent paramPendingIntent) {\r
+\r
+        paramAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, paramPendingIntent);\r
 \r
 //    try {\r
 //        setImpl.invoke(paramAlarmManager, new Object[] { Integer.valueOf(0), Long.valueOf(triggerAtMillis), Long.valueOf(0L), Long.valueOf(intervalMillis), paramPendingIntent, null });\r
@@ -47,91 +46,95 @@ public class AlarmHelper {
 //        exception.printStackTrace();\r
 //      }\r
 \r
-  }\r
-\r
-  //以周为单位设置循环闹铃\r
-  public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis, PendingIntent paramPendingIntent) {\r
-    ICLogger.i("setAlarm triggerAtMillis "+triggerAtMillis);\r
-    setAlarm(paramAlarmManager, triggerAtMillis, ONE_WEEK, paramPendingIntent);\r
-  }\r
-  public static void setAlarmOnce(AlarmManager paramAlarmManager, long triggerAtMillis, PendingIntent paramPendingIntent) {\r
-    ICLogger.i("setAlarmOnce triggerAtMillis "+triggerAtMillis);\r
-    setAlarm(paramAlarmManager, triggerAtMillis, 0, paramPendingIntent);\r
-  }\r
-  public static void setCleanStepCountAlarm(Context context, int hour, int minutes, String paramString) {\r
-    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);\r
-    Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
-    intent.setAction(paramString);\r
-    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
-    alarmManager.cancel(pendingIntent);\r
-    long currentMS = System.currentTimeMillis();\r
-    Calendar calendar = Calendar.getInstance();\r
-    calendar.set(Calendar.HOUR_OF_DAY, hour);\r
-    calendar.set(Calendar.MINUTE, minutes);\r
-    calendar.set(Calendar.SECOND, 0);\r
-    long targetMStmp = calendar.getTimeInMillis();\r
-    long targetMS = targetMStmp;\r
-    if (targetMStmp < currentMS)\r
-      targetMS = targetMStmp + ONE_DAY;\r
-    alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetMS, pendingIntent);\r
-  }\r
-  \r
-  public static void setRealTimeAlarm(Context context, int minutes, String actionname) {\r
-    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);\r
-    Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
-    intent.setAction(actionname);\r
-    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
-    alarmManager.cancel(pendingIntent);\r
-    long l = SystemClock.elapsedRealtime();\r
-    if (Build.VERSION.SDK_INT >= 19) {\r
-      alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (minutes * 60 * 1000), pendingIntent);\r
-      return;\r
     }\r
-    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (minutes * 60 * 1000), pendingIntent);\r
-  }\r
-  public static void setRealTimeAlarmInMicorSeconds(Context context, int ms, String actionname) {\r
-    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);\r
-    Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
-    intent.setAction(actionname);\r
-    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
-    alarmManager.cancel(pendingIntent);\r
-    long l = SystemClock.elapsedRealtime();\r
-    if (Build.VERSION.SDK_INT >= 19) {\r
-      alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (ms  ), pendingIntent);\r
-      return;\r
+\r
+    //以周为单位设置循环闹铃\r
+    public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis, PendingIntent paramPendingIntent) {\r
+        ICLogger.i("setAlarm triggerAtMillis " + triggerAtMillis);\r
+        setAlarm(paramAlarmManager, triggerAtMillis, ONE_WEEK, paramPendingIntent);\r
     }\r
-    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (ms  ), pendingIntent);\r
-  }\r
-  public static void setRealTimeAlarmInSeconds(Context context, int seconds, String actionname) {\r
-    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);\r
-    Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
-    intent.setAction(actionname);\r
-    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
-    alarmManager.cancel(pendingIntent);\r
-    long l = SystemClock.elapsedRealtime();\r
-    if (Build.VERSION.SDK_INT >= 19) {\r
-      alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds  * 1000), pendingIntent);\r
-      return;\r
+\r
+    public static void setAlarmOnce(AlarmManager paramAlarmManager, long triggerAtMillis, PendingIntent paramPendingIntent) {\r
+        ICLogger.i("setAlarmOnce triggerAtMillis " + triggerAtMillis);\r
+        setAlarm(paramAlarmManager, triggerAtMillis, 0, paramPendingIntent);\r
+    }\r
+\r
+    public static void setCleanStepCountAlarm(Context context, int hour, int minutes, String paramString) {\r
+        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);\r
+        Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
+        intent.setAction(paramString);\r
+        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
+        alarmManager.cancel(pendingIntent);\r
+        long currentMS = System.currentTimeMillis();\r
+        Calendar calendar = Calendar.getInstance();\r
+        calendar.set(Calendar.HOUR_OF_DAY, hour);\r
+        calendar.set(Calendar.MINUTE, minutes);\r
+        calendar.set(Calendar.SECOND, 0);\r
+        long targetMStmp = calendar.getTimeInMillis();\r
+        long targetMS = targetMStmp;\r
+        if (targetMStmp < currentMS)\r
+            targetMS = targetMStmp + ONE_DAY;\r
+        alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetMS, pendingIntent);\r
+    }\r
+\r
+    public static void setRealTimeAlarm(Context context, int minutes, String actionname) {\r
+        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);\r
+        Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
+        intent.setAction(actionname);\r
+        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
+        alarmManager.cancel(pendingIntent);\r
+        long l = SystemClock.elapsedRealtime();\r
+        if (Build.VERSION.SDK_INT >= 19) {\r
+            alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (minutes * 60 * 1000), pendingIntent);\r
+            return;\r
+        }\r
+        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (minutes * 60 * 1000), pendingIntent);\r
+    }\r
+\r
+    public static void setRealTimeAlarmInMicorSeconds(Context context, int ms, String actionname) {\r
+        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);\r
+        Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
+        intent.setAction(actionname);\r
+        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
+        alarmManager.cancel(pendingIntent);\r
+        long l = SystemClock.elapsedRealtime();\r
+        if (Build.VERSION.SDK_INT >= 19) {\r
+            alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (ms), pendingIntent);\r
+            return;\r
+        }\r
+        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (ms), pendingIntent);\r
+    }\r
+\r
+    public static void setRealTimeAlarmInSeconds(Context context, int seconds, String actionname) {\r
+        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);\r
+        Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
+        intent.setAction(actionname);\r
+        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
+        alarmManager.cancel(pendingIntent);\r
+        long l = SystemClock.elapsedRealtime();\r
+        if (Build.VERSION.SDK_INT >= 19) {\r
+            alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds * 1000), pendingIntent);\r
+            return;\r
+        }\r
+        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds * 1000), pendingIntent);\r
+    }\r
+\r
+    public static void setTimeAlarm(Context context, int hour, int minutes, String paramString) {\r
+        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);\r
+        Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
+        intent.setAction(paramString);\r
+        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
+        long l3 = System.currentTimeMillis();\r
+        Calendar calendar = Calendar.getInstance();\r
+        calendar.set(Calendar.HOUR_OF_DAY, hour);\r
+        calendar.set(Calendar.MINUTE, minutes);\r
+        calendar.set(Calendar.SECOND, 0);\r
+        long l2 = calendar.getTimeInMillis();\r
+        long l1 = l2;\r
+        if (l2 < l3)\r
+            l1 = l2 + ONE_DAY;\r
+        alarmManager.cancel(pendingIntent);\r
+        alarmManager.setExact(AlarmManager.RTC_WAKEUP, l1, pendingIntent);\r
     }\r
-    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds  * 1000), pendingIntent);\r
-  }\r
-\r
-  public static void setTimeAlarm(Context context, int hour, int minutes, String paramString) {\r
-    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);\r
-    Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);\r
-    intent.setAction(paramString);\r
-    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);\r
-    long l3 = System.currentTimeMillis();\r
-    Calendar calendar = Calendar.getInstance();\r
-    calendar.set(Calendar.HOUR_OF_DAY, hour);\r
-    calendar.set(Calendar.MINUTE, minutes);\r
-    calendar.set(Calendar.SECOND, 0);\r
-    long l2 = calendar.getTimeInMillis();\r
-    long l1 = l2;\r
-    if (l2 < l3)\r
-      l1 = l2 + ONE_DAY;\r
-    alarmManager.cancel(pendingIntent);\r
-    alarmManager.setExact(AlarmManager.RTC_WAKEUP, l1, pendingIntent);\r
-  }\r
 }\r
 \r
index d13dbc3..1451c1c 100644 (file)
@@ -306,7 +306,7 @@ public class DeviceInfoUtil {
           {"com.enqualcomm.support","Protocol"},\r
           {"com.ic.blood","BLood"},\r
           {"com.ic.launcher","Launcher"},\r
-          {"com.ic.work","Work"},\r
+          {"com.ic.com.ic.work","Work"},\r
           {"com.ic.weather","Weather"},\r
           {"com.ic.hardware","Hardware"},\r
           {"mobile.miki","FactoryMode"},\r
index 660951a..314a4e3 100644 (file)
@@ -35,6 +35,7 @@ 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;
 import static com.enqualcomm.support.Constants.DIALOG_ACTION;
+import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.Constants.KEY_MESSAGE_FROM;
 import static com.enqualcomm.support.Constants.KEY_MESSAGE_TYPE;
 import static com.enqualcomm.support.Constants.KEY_MESSAGE_URL;
@@ -342,12 +343,11 @@ public class ProcessReceiver extends BroadcastReceiver {
                     if (Util.getSystemProperties("persist.sys.do_check_condition", "false").equals("true")) {
                         //开启测温
                         if (CoreService.getInstance().getRuntime().check_stat_do_temp_test())
-                            TemperatureUtil.DoTempTest();
-
+                            TemperatureUtil.getInstance().DoTempTest(FROM_SERVER);
                         Util.mSleep(5000);
                         //开启测量PPG
                         if (CoreService.getInstance().getRuntime().check_stat_do_ppg_test())
-                            HeartRateManager.triggerPPGtest();
+                            HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
                     }
                     //开启发送图片
                     CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
@@ -396,12 +396,12 @@ public class ProcessReceiver extends BroadcastReceiver {
                     if (Util.getSystemProperties("persist.sys.do_check_condition", "false").equals("true")) {
                         //开启测温
                         if (CoreService.getInstance().getRuntime().check_stat_do_temp_test())
-                            TemperatureUtil.DoTempTest();
+                            TemperatureUtil.getInstance().DoTempTest(FROM_SERVER);
 
                         Util.mSleep(500);
                         //开启测量PPG
                         if (CoreService.getInstance().getRuntime().check_stat_do_ppg_test())
-                            HeartRateManager.triggerPPGtest();
+                            HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
                     }
                     //开启发送照片
                     CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
index 5fec64d..370a516 100644 (file)
 package com.enqualcomm.support.utils;
 
+import android.content.ComponentName;
+import android.content.Context;
 import android.content.Intent;
-import android.os.Handler;
+import android.content.ServiceConnection;
+import android.os.IBinder;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
+import com.enqualcomm.support.ICApplication;
 import com.enqualcomm.support.LocationClient;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
-import com.enqualcomm.support.bean.TemperatureItem;
 import com.enqualcomm.support.service.Deliver;
-import com.ic.jni.ICJniUtils;
 import com.ic.protocols.protocolAPIHelper;
+import com.ic.work.ITempSensorCallback;
+import com.ic.work.ITempSensorService;
+import com.ic.work.domain.Temperature;
 
 public class TemperatureUtil {
 
-
     private static final String TAG = "TemperatureUtil";
-    private static double temp_value_orig = 0.0f;
-    private static double temp_adjust_value = 0.0f;
-    private static double body_temp_value = 0.0f;
-    private static double tempOut_value = 0.0f;
-
-    public static double get_tempOut_value_origin() {
-        long tmp=System.currentTimeMillis();
-        tempOut_value = ICJniUtils.getTemperatureOrigin();
-        long tmp1=System.currentTimeMillis()-tmp;
-        if (tmp1>1000)
-            ICLogger.i("1测量环境温度 原始值 " + tempOut_value+" 超过1秒 "+tmp1);
-        ICLogger.i( "1测量环境温度 原始值 " + tempOut_value);
-        return tempOut_value;
+    public static final String ACTION_TEMPERATURE = "com.ic.sensor.data.action.TEMPERATURE";
+    private ITempSensorService temperatureRemoteService;
+
+    private TemperatureUtil() {
+        Intent intent = new Intent();
+        intent.setAction(ACTION_TEMPERATURE);
+        //绑定远程服务
+        ICApplication.sContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
     }
 
-    public static double get_temp_value_adjusted() {
-        long tmp=System.currentTimeMillis();
-        temp_value_orig = ICJniUtils.getTemperature();
-        long tmp1=System.currentTimeMillis()-tmp;
-        if (tmp1>1000)
-            ICLogger.i("1测量体温 原始值 " + temp_value_orig+" 超过1秒 "+tmp1);
-        ICLogger.i("1测量体温 原始值 " + temp_value_orig);
-        return temp_value_orig;
+
+    public void release() {
+        if (temperatureRemoteService != null) {
+            try {
+                temperatureRemoteService.unRegisterCallback(mRemoteCallback);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        ICApplication.sContext.unbindService(mConnection);
     }
 
 
-    public static double getTempAdjustValue() {
+    private final ServiceConnection mConnection = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            ICLogger.d("onServiceConnected...");
+            temperatureRemoteService = ITempSensorService.Stub.asInterface(service);
+            //注册回调接口
+            try {
+                ICLogger.d("registerCallback...");
+                temperatureRemoteService.registerCallback(mRemoteCallback);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
 
-        //   temp_adjust_value=ICJniUtils.getTemperatureAdjustValue();
-        ICLogger.i("get Temperature Adjust value=" + temp_adjust_value);
-        return temp_adjust_value;
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            ICLogger.d("onServiceDisconnected...");
+            temperatureRemoteService = null;
+        }
+    };
 
-    }
 
-    public static double getBodyTemp(double wristtemp, double envtemp) {
-        body_temp_value = ICJniUtils.getBodyTempFromWristTemp(wristtemp, envtemp);
-        ICLogger.i("get body Temperature value=" + body_temp_value);
-        return body_temp_value;
-    }
+    private final ITempSensorCallback.Stub mRemoteCallback = new ITempSensorCallback.Stub() {
+        @Override
+        public void onTemperatureGet(Temperature temperature) {
+            //处理结果
+            handleTemperature(temperature);
+        }
+
+        @Override
+        public void onGetData() {
+            //数据获取中...
+            ICLogger.d("数据获取中...");
+        }
+
+        @Override
+        public void onWaiting() {
+            //等待中...
+            ICLogger.d("任务等待中...");
+        }
+    };
+
+    private void handleTemperature(Temperature temperature) {
+        ICLogger.i("Temperature done!" + temperature);
+        if (temperature == null) {
+            return;
+        }
+        //结果处理
+        if (Runtime.practising) {
+            ICLogger.i("自由锻炼中,设置测量体温!" + String.format("%.1f", temperature.getBodyTemp()));
+            Runtime.healthInfo.setTemperatureData(temperature.getBodyTemp());
+        } else {
+            StringMessage temperatureMsg = protocolAPIHelper.getTemperatureMSG(temperature.getWristTemp(),
+                    temperature.getBodyTemp(), temperature.getEnvTemp(), null);
+            Deliver.sendLocationMSG(temperatureMsg);
+            if (temperatureMsg != null) ICLogger.i("发送体温测量值 " + temperatureMsg.isFromCache());
+        }
+
+        Runtime runtime = CoreService.getInstance().getRuntime();
+        runtime.tempInfo.setTemp(temperature.getBodyTemp(),
+                temperature.getWristTemp(),
+                temperature.getEnvTemp());
+
+        //发送消息给launcher显示
+        sendTempBroadcast(temperature.getWristTemp(),
+                temperature.getBodyTemp(),
+                temperature.getEnvTemp());
 
+        //体温异常报警检测开启的会进行异常报警
+        if (Config.needTemperature_abnormal_alarm) {
+            switch (runtime.tempInfo.isBodyTempAbnormal()) {
+                case 0:
+                    break;
+                case 1:
+                    if (runtime.setAlarmType(Runtime.AlarmType.ALARM_TEMP_HIGH)) {
+                        //trigger AP10 报警定位
+                        ICLogger.i("triggerSOSLocationProcess ");
+                        LocationClient.getInstance().triggerSOSLocationProcess();
+                    }
+                    break;
+                case 2:
+                    if (runtime.setAlarmType(Runtime.AlarmType.ALARM_TEMP_LOW)) {
+                        //trigger AP10 报警定位
+                        ICLogger.i("triggerSOSLocationProcess ");
+                        LocationClient.getInstance().triggerSOSLocationProcess();
+                    }
+                    break;
+            }
+        }
+    }
 
-    public static void doTempTestInThread() {
+    private static TemperatureUtil sInstance = null;
 
-        ThreadPool.newInstance().submitThreadPool(new Runnable() {
-            @Override
-            public void run() {
-                DoTempTest();
+    public static TemperatureUtil getInstance() {
+        if (sInstance == null) {
+            synchronized (TemperatureUtil.class) {
+                if (sInstance == null) {
+                    sInstance = new TemperatureUtil();
+                }
             }
-        });
+        }
+        return sInstance;
+    }
+
+
+    public void doTempTestInThread(int from) {
+        ThreadPool.newInstance().submitThreadPool(() -> DoTempTest(from));
     }
 
     public static final String ACTION_TEMP_RESULT = "com.ic.action.temp_result";
@@ -74,7 +159,7 @@ public class TemperatureUtil {
     public static final String KEY_TEMP_OUT = "out"; //temp out
     public static final String KEY_TEMP_BYPROTOCOL = "protocol"; //temp out
 
-    private static void sendTempBroadcast(double value, double animal, double tempOut) {
+    private void sendTempBroadcast(double value, double animal, double tempOut) {
         Intent pedIntent = new Intent();
         pedIntent.setAction(ACTION_TEMP_RESULT);
         pedIntent.putExtra(KEY_TEMP_WRIST, value);
@@ -86,115 +171,26 @@ public class TemperatureUtil {
     }
 
 
-    private static int loopTime;
-
-
-    public static void DoTempTest() {
-        loopTime = 10;
-        if (CoreService.getInstance() != null) {
-            if (CoreService.getInstance().getRuntime().Anti_off_flag == 1) {
-                ICLogger.i("未佩戴,取消TempTest!");
-                return;
-            }
-        } else
+    /**
+     * 不管是什么测试,后台指令,还是定时的,都会走这里。
+     * 那这个地方,不再走本地进行测试,而是走远程IcWorkService进行测试
+     * //TODO:TrillGates,也就是说调用远程的方法,只处理结果就可以了
+     *
+     * @param from
+     */
+    public void DoTempTest(int from) {
+        ICLogger.d("DoTempTest..." + from);
+        if (CoreService.getInstance() != null && CoreService.getInstance().getRuntime().Anti_off_flag == 1) {
+            ICLogger.i("未佩戴,取消TempTest!" + from);
             return;
-        if (ICJniUtils.isTemperatureDevAvailable() > ICJniUtils.TempSensorType.TEMPSENSOR_TYPE_NONE.ordinal()) {
-
-            if (!DeviceInfoUtil.isFactoryTestTopActivity(CoreService.getInstance())) {
-                ICJniUtils.disablePedometer();
-            }
-            ICJniUtils.enableTemperature();
-            Util.mSleep(1000);
-
-            double wrist_temp, body_temp, temout;
-            temout = 0.0f;
-            wrist_temp=0.0f;
-            body_temp=0.0f;
-            while (true) {
-                if (ICJniUtils.isTemperatureDevAvailable() == ICJniUtils.TempSensorType.TEMPSENSOR_TYPE_IC68.ordinal()) {
-                    //此处温度会走一个算法,跟主板挂钩,不同的主板有不同的公式,需要做实验,配置。
-                    //具体可以点击进去看里面的代码。
-                    TemperatureItem temperatureItem = TempAlgUtil.doTempTest();
-                    if (temperatureItem != null) {
-                        wrist_temp = Float.parseFloat(temperatureItem.getBodyTemp());
-                        temout = Float.parseFloat(temperatureItem.getEvnTemp());
-                        if (temout > 60 || temout < 1) {
-                            temout = 0.0f;
-                        }
-                        if (temout > 0.0f ) {
-                            body_temp = TemperatureUtil.getBodyTemp(wrist_temp, temout);
-                        } else {
-                            body_temp = TemperatureUtil.getBodyTemp(wrist_temp, 26.0f);
-                        }
-                    }
-                } else {
-                    wrist_temp = TemperatureUtil.get_temp_value_adjusted();
-                    if (wrist_temp < 10) {
-                        Util.mSleep(1000);
-                        ICLogger.i("retry read temp for <10");
-                        wrist_temp = TemperatureUtil.get_temp_value_adjusted();
-                    }
-                    ICLogger.log(TAG, "temperatureItem is null...");
-                    if (Config.disableWristTemp) {
-                        body_temp = wrist_temp;
-                    } else {
-                        body_temp = TemperatureUtil.getBodyTemp(wrist_temp, 26.0f);
-                    }
-                }
-                try {
-                    Thread.sleep(1000);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-                loopTime--;
-                if (loopTime <= 0) {
-                    break;
-                }
-            }
-            ICLogger.i("Temperature done!");
-            if (Runtime.practising == true) {
-                ICLogger.i("自由锻炼中,设置测量体温!" + String.format("%.1f", body_temp));
-                Runtime.healthInfo.setTemperatureData(body_temp);
-            } else {
-                StringMessage temperatureMsg = protocolAPIHelper.getTemperatureMSG(wrist_temp, body_temp, temout, null);
-                Deliver.sendLocationMSG(temperatureMsg);
-                if (temperatureMsg != null) ICLogger.i("发送体温测量值 " + temperatureMsg.isFromCache());
-            }
-
-            Runtime runtime = CoreService.getInstance().getRuntime();
-            runtime.tempInfo.setTemp(body_temp, wrist_temp, temout);
-
-            //发送消息给launcher显示
-            sendTempBroadcast(wrist_temp, body_temp, temout);
-
-            ICJniUtils.disableTemperature();
-            ICJniUtils.enablePedometer();
-
-            //体温异常报警检测开启的会进行异常报警
-            if (Config.needTemperature_abnormal_alarm) {
-                switch (runtime.tempInfo.isBodyTempAbnormal()) {
-                    case 0:
-                        break;
-                    case 1:
-                        if (runtime.setAlarmType(Runtime.AlarmType.ALARM_TEMP_HIGH)) {
-                            //trigger AP10 报警定位
-                            ICLogger.i("triggerSOSLocationProcess ");
-                            LocationClient.getInstance().triggerSOSLocationProcess();
-//                            Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-                        }
-                        break;
-                    case 2:
-                        if (runtime.setAlarmType(Runtime.AlarmType.ALARM_TEMP_LOW)) {
-                            //trigger AP10 报警定位
-                            ICLogger.i("triggerSOSLocationProcess ");
-                            LocationClient.getInstance().triggerSOSLocationProcess();
-//                            Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));
-                        }
-                        break;
-                }
+        }
+        try {
+            if (temperatureRemoteService != null) {
+                ICLogger.d("get temperature info...");
+                temperatureRemoteService.getTemperatureInfo(from);
             }
-
-
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 }
index 89434b1..804c8cb 100644 (file)
@@ -28,8 +28,8 @@ import java.util.Date;
 import java.util.HashMap;\r
 \r
 import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;\r
+import static com.enqualcomm.support.Constants.FROM_SERVER;\r
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;\r
-import static com.enqualcomm.support.LocationClient.getInstance;\r
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;\r
 import static java.lang.Math.abs;\r
 \r
@@ -39,8 +39,9 @@ public class protocol_beehome {
     private static final String CMDHEADER = "IW";\r
     private static final String CMDEND = "#";\r
     private static final String CMDSPLIT = ",";\r
-    public static final String defaultServerIP="en.beehome360.com";\r
-    public static final int defaultServerPort=5018;\r
+    public static final String defaultServerIP = "en.beehome360.com";\r
+    public static final int defaultServerPort = 5018;\r
+\r
     public enum CMD_TYPE {\r
         /*终端发起*/\r
         AP00,//登录包\r
@@ -203,14 +204,14 @@ public class protocol_beehome {
     }\r
 \r
 \r
-    private Connection mConnection=null;\r
-    private Runtime mRuntime=null;\r
+    private Connection mConnection = null;\r
+    private Runtime mRuntime = null;\r
 \r
-    public protocol_beehome(Connection connect,Runtime runtime) {\r
-            mConnection=connect;\r
-            mRuntime=runtime;\r
+    public protocol_beehome(Connection connect, Runtime runtime) {\r
+        mConnection = connect;\r
+        mRuntime = runtime;\r
 \r
-        }\r
+    }\r
 \r
     private StringBuffer cmdbuf = new StringBuffer();\r
 \r
@@ -227,7 +228,7 @@ public class protocol_beehome {
 \r
                 return "";\r
             }\r
-        }else{\r
+        } else {\r
             return "";\r
         }\r
 \r
@@ -250,14 +251,14 @@ public class protocol_beehome {
     }\r
 \r
 \r
-\r
     /**/\r
-    public static StringMessage genStringMessage(String cmdName, String msg){\r
-        StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
+    public static StringMessage genStringMessage(String cmdName, String msg) {\r
+        StringMessage sm = new StringMessage(new String[]{cmdName, msg});\r
         sm.refresh(msg);\r
-        sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
+        sm.setDate(TimeUtil.getSystemDateYYMMDD(), TimeUtil.getSystemTimeHHmmss());\r
         return sm;\r
     }\r
+\r
     /*\r
     返回true 表示 cmd 全部解析成功\r
     返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用\r
@@ -268,11 +269,11 @@ public class protocol_beehome {
         boolean iscmdComplete = false;\r
         boolean ret = true;\r
         String last_inCompletecmd = "";\r
-        String cmd_msgbuf=new String(bytes);\r
-        log("bytes.size "+bytes.length);\r
+        String cmd_msgbuf = new String(bytes);\r
+        log("bytes.size " + bytes.length);\r
 //        cmdbuf.append(cmd_msgbuf);\r
         cmdbuf.append(cmd_msgbuf);\r
-        log("cmdbuf.size "+cmdbuf.length() +" "+cmdbuf.toString());\r
+        log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString());\r
     /*\r
         如果不是 #结尾,就认为 接收数据不全,置位。\r
          */\r
@@ -281,7 +282,7 @@ public class protocol_beehome {
         }\r
         String[] cmdlist = cmd_msgbuf.split(CMDEND);\r
         int listlen = cmdlist.length;\r
-        log("listlen "+listlen);\r
+        log("listlen " + listlen);\r
          /*\r
         如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd\r
          */\r
@@ -297,12 +298,12 @@ public class protocol_beehome {
                     if (key == CMD_TYPE.BP28) {\r
                         //如果是BP28则 后面的数据是音频,需要保留\r
                         byte[] amrBuf;\r
-                        int amrLen = getBP28Amrlen(cmdlist[i] );\r
+                        int amrLen = getBP28Amrlen(cmdlist[i]);\r
                         if (bytes.length > amrLen) {\r
                             handleCmd(key, cmdlist[i], bytes);\r
                         }\r
                     } else {\r
-                       handleCmd(key, cmdlist[i]);\r
+                        handleCmd(key, cmdlist[i]);\r
                     }\r
                 }\r
             }\r
@@ -311,6 +312,7 @@ public class protocol_beehome {
         cmdbuf = new StringBuffer().append(last_inCompletecmd);\r
         return ret;\r
     }\r
+\r
     public int getBP28Amrlen(String cmd) {\r
 \r
         String Name;\r
@@ -320,8 +322,8 @@ public class protocol_beehome {
         int packetLen;\r
 \r
 \r
-        String[] msg=cmd.split(CMDSPLIT);\r
-        if (msg.length>=6){\r
+        String[] msg = cmd.split(CMDSPLIT);\r
+        if (msg.length >= 6) {\r
 \r
             try {\r
                 Name = msg[1];\r
@@ -340,28 +342,29 @@ public class protocol_beehome {
 \r
                 log(stringBuffer.toString());\r
                 return packetLen;\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
-        }else{\r
-            log("getBP28AmrLen","format Error");\r
+        } else {\r
+            log("getBP28AmrLen", "format Error");\r
 \r
         }\r
         return -1;\r
     }\r
+\r
     /*登录*/\r
     public static StringMessage AP00(Runtime ds) {\r
         //示例数据:IWAP00867155030001063#\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP00),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP00)).append(ds.IMEI()).append(CMDEND).toString());\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP00), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP00)).append(ds.IMEI()).append(CMDEND).toString());\r
     }\r
 \r
     //处理 登录 BP00\r
-    public void handleBP00(Runtime runtime,String cmd){\r
-        String[] msg=cmd.split(CMDSPLIT);\r
+    public void handleBP00(Runtime runtime, String cmd) {\r
+        String[] msg = cmd.split(CMDSPLIT);\r
 //        get Msg :IWBP00,20191229171933,8# (size)24\r
 //        12-30 01:19:33.861 6492-6492/com.enqualcomm.support I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 ,  IWBP00,20191229171933,8\r
 \r
-        if (msg.length>=3) {\r
+        if (msg.length >= 3) {\r
             log("handleBP00", "Set Datetime " + msg[1]);\r
             log("handleBP00", "Set TimeZone " + msg[2]);\r
 \r
@@ -380,11 +383,11 @@ public class protocol_beehome {
                 }\r
 //            Set Datetime 20200505112734\r
 //            Set TimeZone 8\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
-        }else{\r
-            log("handleBP00","format Error");\r
+        } else {\r
+            log("handleBP00", "format Error");\r
         }\r
     }\r
 \r
@@ -405,19 +408,20 @@ public class protocol_beehome {
         //02为工作模式 ,(设防,工作模式如果为00,则代表无或未设置)\r
         //5555: 计步步数,每次到达 9999 后重 0 开始计 (此处 9999 为示例,可以为2字节int 然后溢出归零)\r
         //30: 翻滚次数\r
-        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())))\r
+        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())))\r
                 .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")\r
                 .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)\r
                 .append(ds.getTotalStepCount()).append(CMDSPLIT).append(ds.getRolltimes()).append(CMDEND).toString());\r
     }\r
+\r
     //处理 心跳 BP03\r
-    public void handleBP03(String cmd){\r
+    public void handleBP03(String cmd) {\r
 \r
         log("BP03心跳接收成功");\r
     }\r
 \r
 \r
-    public static StringMessage AP10(Runtime ds){\r
+    public static StringMessage AP10(Runtime ds) {\r
 \r
         /**\r
          * IWAP10080524A2232.9806N11404.9355E000.1061830323.8706000908000502,\r
@@ -429,9 +433,9 @@ public class protocol_beehome {
          * 00:第一个0:是否需要回复地址信息,0:不回复,1回复.\r
          * 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#\r
          */\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP10),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate())\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP10), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate())\r
                 .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading())\r
-                .append(String.format("%03d",abs(ds.getSignalStrength())))\r
+                .append(String.format("%03d", abs(ds.getSignalStrength())))\r
                 .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")\r
                 .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)\r
                 .append(ds.getLBSData()).append(CMDSPLIT)\r
@@ -448,20 +452,19 @@ public class protocol_beehome {
         // 460,0,9520,3671,\r
         // 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#\r
 //        IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,#\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP01),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01)).append(TimeUtil.getShortDate())\r
-                .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength())))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP01), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01)).append(TimeUtil.getShortDate())\r
+                .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d", abs(ds.getSignalStrength())))\r
                 .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")\r
                 .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)\r
                 .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString());\r
     }\r
 \r
     //处理 定位 BP01\r
-    public void handleBP01(String cmd){\r
+    public void handleBP01(String cmd) {\r
         log("BP01定位接收成功");\r
     }\r
 \r
 \r
-\r
     /*LBS+WiFi混合定位*/\r
     public static StringMessage AP02(Runtime ds) {\r
         //示例数据:IWAP02,\r
@@ -483,15 +486,15 @@ public class protocol_beehome {
 //        4: 表示WIFI组数,\r
 //                1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)\r
 \r
-        int apsum=0;\r
-        String wifiinfo=ds.getWifiInfo();\r
+        int apsum = 0;\r
+        String wifiinfo = ds.getWifiInfo();\r
         if (!wifiinfo.isEmpty()) {\r
             String[] list = wifiinfo.split("&");\r
             apsum = list.length;\r
         }\r
 \r
-        ICLogger.i("Wifi ap sum "+apsum);\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP02),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP02)).append(CMDSPLIT)\r
+        ICLogger.i("Wifi ap sum " + apsum);\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP02), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP02)).append(CMDSPLIT)\r
                 .append(ds.getLanguage()).append(CMDSPLIT)\r
                 .append(0).append(CMDSPLIT) //为0时不回复地址\r
                 .append(ds.getLBSMultiStationData()).append(CMDSPLIT)  //基站信息数据\r
@@ -499,26 +502,26 @@ public class protocol_beehome {
     }\r
 \r
     //处理 定位 BP01\r
-    public void handleBP02(String cmd){\r
+    public void handleBP02(String cmd) {\r
         log("BP02定位接收成功");\r
     }\r
 \r
 \r
-\r
-    public static StringMessage APXL(String id){\r
+    public static StringMessage APXL(String id) {\r
 //设备响应:      IWAPXL,080835#\r
         //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APXL),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APXL), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))\r
                 .append(CMDSPLIT).append(id)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
     /**\r
      * 测量心率\r
+     *\r
      * @param cmd\r
      * @param connection\r
      */\r
-    public void handleBPXL(String cmd, Connection connection){\r
+    public void handleBPXL(String cmd, Connection connection) {\r
         //IWBPXL,353456789012345,080835#\r
         //说明:\r
         //IW:标识符\r
@@ -527,32 +530,33 @@ public class protocol_beehome {
         //080835 :指令流水号\r
         //设备响应:      IWAPXL,080835#\r
         //080835:指令流水号\r
-        String[] list=cmd.split(CMDSPLIT);\r
-        if (list.length==3){\r
-            String index=list[2];\r
-            String imei=list[1];\r
-            ICLogger.i("Handle BPXL IMEI "+imei+",index "+index);\r
+        String[] list = cmd.split(CMDSPLIT);\r
+        if (list.length == 3) {\r
+            String index = list[2];\r
+            String imei = list[1];\r
+            ICLogger.i("Handle BPXL IMEI " + imei + ",index " + index);\r
             connection.send(APXL(index));\r
-        }else{\r
+        } else {\r
             ICLogger.i("BPXL format error!");\r
         }\r
 \r
     }\r
 \r
-    public static StringMessage APXY(String id){\r
+    public static StringMessage APXY(String id) {\r
 //设备响应:      IWAPXY,080835#\r
         //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APXY),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APXY), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))\r
                 .append(CMDSPLIT).append(id)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
     /**\r
      * 测量血压\r
+     *\r
      * @param cmd\r
      * @param connection\r
      */\r
-    public void handleBPXY(String cmd,Connection connection){\r
+    public void handleBPXY(String cmd, Connection connection) {\r
         //IWBPXY,353456789012345,080835#\r
         //说明:\r
         //IW:标识符\r
@@ -561,25 +565,24 @@ public class protocol_beehome {
         //080835 :指令流水号\r
         //设备响应:      IWAPXY,080835#\r
         //080835:指令流水号\r
-        String[] list=cmd.split(CMDSPLIT);\r
-        if (list.length==3){\r
-            String index=list[2];\r
-            String imei=list[1];\r
-            ICLogger.i("Handle BPXY IMEI "+imei+",index "+index);\r
+        String[] list = cmd.split(CMDSPLIT);\r
+        if (list.length == 3) {\r
+            String index = list[2];\r
+            String imei = list[1];\r
+            ICLogger.i("Handle BPXY IMEI " + imei + ",index " + index);\r
             connection.send(APXY(index));\r
-        }else{\r
+        } else {\r
             ICLogger.i("BPXY format error!");\r
         }\r
 \r
     }\r
 \r
 \r
-\r
-    public static StringMessage APJZ(String id,String BPH,String BPL,String Age,String Sex){\r
+    public static StringMessage APJZ(String id, String BPH, String BPL, String Age, String Sex) {\r
         //设备响应:      IWAPJZ,792997,120,85,42,1#\r
         //792997:指令流水号\r
         // 高压120,低压85,年龄42,1 男性\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APJZ),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APJZ), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ))\r
                 .append(CMDSPLIT).append(id)\r
                 .append(CMDSPLIT).append(BPH)\r
                 .append(CMDSPLIT).append(BPL)\r
@@ -589,12 +592,11 @@ public class protocol_beehome {
     }\r
 \r
     /**\r
-     *\r
      * @param cmd\r
      * @param connection\r
      * @param runtime\r
      */\r
-    public void handleBPJZ(String cmd,Connection connection,Runtime runtime){\r
+    public void handleBPJZ(String cmd, Connection connection, Runtime runtime) {\r
         //cmdbuf.size 42 IWBPJZ,867155030001063,199600,120,85,45,1#   高压120,低压85,年龄45,男性\r
 //        cmdbuf.size 42 IWBPJZ,867155030001063,909957,120,85,42,0#  高压120,低压85,年龄42,女性\r
         //IWBPJZ,353456789012345,080835,110,75#\r
@@ -607,43 +609,42 @@ public class protocol_beehome {
         //080835 :指令流水号\r
         //设备响应:      IWAPJZ,792997,120,85,42,1#\r
         //792997:指令流水号\r
-        String[] list=cmd.split(CMDSPLIT);\r
-        if (list.length==7){\r
-            String index=list[2];\r
-            String imei=list[1];\r
-            String strBPH=list[3];\r
-            String strBPL=list[4];\r
-            String strAge=list[5];\r
-            String strSex=list[6];\r
-\r
-            connection.send(APJZ(index,strBPH,strBPL,strAge,strSex));\r
+        String[] list = cmd.split(CMDSPLIT);\r
+        if (list.length == 7) {\r
+            String index = list[2];\r
+            String imei = list[1];\r
+            String strBPH = list[3];\r
+            String strBPL = list[4];\r
+            String strAge = list[5];\r
+            String strSex = list[6];\r
+\r
+            connection.send(APJZ(index, strBPH, strBPL, strAge, strSex));\r
             try {\r
                 runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH), Integer.parseInt(strBPL), Integer.parseInt(strAge), Integer.parseInt(strSex));\r
                 ICLogger.i("Handle BPJZ IMEI " + imei + ",index " + index + ", BPH " + strBPH + ", BPL " + strBPL + ", Age " + strAge + ", Sex " + (strSex.equals("1") ? "男" : "女"));\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
-        }else{\r
+        } else {\r
             ICLogger.i("BPXY format error!");\r
         }\r
     }\r
 \r
 \r
-\r
     //重启\r
 \r
 \r
-    public static StringMessage AP18(String index){\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP18),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18))\r
+    public static StringMessage AP18(String index) {\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP18), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
-    public void handleBP18(Connection connection,String cmd) {\r
+    public void handleBP18(Connection connection, String cmd) {\r
 \r
         //    IWBP18,867155030001063,161723\r
-        String[] cmdlist=cmd.split(CMDSPLIT);\r
-        if (cmdlist.length==3) {\r
+        String[] cmdlist = cmd.split(CMDSPLIT);\r
+        if (cmdlist.length == 3) {\r
 \r
             connection.send(AP18(cmdlist[2]));\r
 \r
@@ -651,16 +652,17 @@ public class protocol_beehome {
     }\r
     //恢复出厂设置\r
 \r
-    public static StringMessage AP17(String index){\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP17),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17))\r
+    public static StringMessage AP17(String index) {\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP17), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDEND).toString());\r
     }\r
-    public void handleBP17(Connection connection,String cmd) {\r
+\r
+    public void handleBP17(Connection connection, String cmd) {\r
 \r
         //    IWBP17,867155030001063,161723\r
-        String[] cmdlist=cmd.split(CMDSPLIT);\r
-        if (cmdlist.length==3) {\r
+        String[] cmdlist = cmd.split(CMDSPLIT);\r
+        if (cmdlist.length == 3) {\r
 \r
             connection.send(AP17(cmdlist[2]));\r
 \r
@@ -670,16 +672,17 @@ public class protocol_beehome {
     //关机\r
 \r
 \r
-    public static StringMessage AP31(String index){\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP31),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP31))\r
+    public static StringMessage AP31(String index) {\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP31), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP31))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDEND).toString());\r
     }\r
-    public void handleBP31(Connection connection,String cmd) {\r
+\r
+    public void handleBP31(Connection connection, String cmd) {\r
 \r
         //    IWBP31,867155030001063,161723\r
-        String[] cmdlist=cmd.split(CMDSPLIT);\r
-        if (cmdlist.length==3) {\r
+        String[] cmdlist = cmd.split(CMDSPLIT);\r
+        if (cmdlist.length == 3) {\r
 \r
             connection.send(AP31(cmdlist[2]));\r
 \r
@@ -687,8 +690,8 @@ public class protocol_beehome {
     }\r
 \r
     //设置SOS号码\r
-    public static StringMessage AP12(String index,String phNum1,String phNum2,String phNum3){\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP12),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12))\r
+    public static StringMessage AP12(String index, String phNum1, String phNum2, String phNum3) {\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP12), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDSPLIT).append(phNum1)\r
                 .append(CMDSPLIT).append(phNum2)\r
@@ -697,32 +700,35 @@ public class protocol_beehome {
     }\r
 \r
     //设置SOS号码\r
-    public void handleBP12(Connection connection,String cmd,Runtime runtime){\r
+    public void handleBP12(Connection connection, String cmd, Runtime runtime) {\r
         //    IWBP12,353456789012345,080835,135XXXXXXXX,135XXXXXXXX,135XXXXXXXX#\r
-        String[] cmdlist=cmd.split(CMDSPLIT);\r
-        if (cmdlist.length>=3){\r
-            String index=cmdlist[2];\r
-            String phNum1=cmdlist.length==3?"":cmdlist[3];\r
-            String phNum2=cmdlist.length>3?(cmdlist.length==4?"":cmdlist[4]):"";\r
-            String phNum3=(cmdlist.length>4)?(cmdlist.length==5? "":cmdlist[5]):"";\r
-            ICLogger.i(new StringBuffer().append("get Emegency Numbs "+phNum1+","+phNum2+","+phNum3).toString());\r
-            connection.send(AP12(index,phNum1,phNum2,phNum3));\r
-\r
-            ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
-            if (!phNum1.isEmpty())  contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos1",phNum1));\r
-            if (!phNum2.isEmpty())  contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos2",phNum2));\r
-            if (!phNum3.isEmpty())  contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos3",phNum3));\r
-\r
-            runtime.getDbHelper().saveContacts(contactArray,false,false,false,false,false,true);\r
-\r
-        }else{\r
+        String[] cmdlist = cmd.split(CMDSPLIT);\r
+        if (cmdlist.length >= 3) {\r
+            String index = cmdlist[2];\r
+            String phNum1 = cmdlist.length == 3 ? "" : cmdlist[3];\r
+            String phNum2 = cmdlist.length > 3 ? (cmdlist.length == 4 ? "" : cmdlist[4]) : "";\r
+            String phNum3 = (cmdlist.length > 4) ? (cmdlist.length == 5 ? "" : cmdlist[5]) : "";\r
+            ICLogger.i(new StringBuffer().append("get Emegency Numbs " + phNum1 + "," + phNum2 + "," + phNum3).toString());\r
+            connection.send(AP12(index, phNum1, phNum2, phNum3));\r
+\r
+            ArrayList<Contact> contactArray = new ArrayList<Contact>();\r
+            if (!phNum1.isEmpty())\r
+                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", phNum1));\r
+            if (!phNum2.isEmpty())\r
+                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum2));\r
+            if (!phNum3.isEmpty())\r
+                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum3));\r
+\r
+            runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);\r
+\r
+        } else {\r
             ICLogger.i(" BP12 format error!");\r
         }\r
     }\r
 \r
 \r
-    public static StringMessage  AP14(String index,String[] phnumbs){\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))\r
+    public static StringMessage AP14(String index, String[] phnumbs) {\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDSPLIT).append(phnumbs[0])\r
                 .append(CMDSPLIT).append(phnumbs[1])\r
@@ -736,8 +742,9 @@ public class protocol_beehome {
                 .append(CMDSPLIT).append(phnumbs[9])\r
                 .append(CMDEND).toString());\r
     }\r
+\r
     //设置通讯录,白名单(10个)\r
-    public void handleBP14(Connection connection,String cmd , Runtime runtime){\r
+    public void handleBP14(Connection connection, String cmd, Runtime runtime) {\r
 //        IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,,\r
 /**\r
  * IWBP14,353456789012345,080835,\r
@@ -752,57 +759,57 @@ public class protocol_beehome {
  * D3590D54|135xxxxxxxxxx,\r
  * D3590D54|135xxxxxxxxxx#\r
  */\r
-        String[] cmdlist=cmd.split(CMDSPLIT);\r
-        String[] phnums=new String[]{"","","","","","","","","",""};\r
-        StringBuffer sb=new StringBuffer().append("recv phone Numbs ");\r
-        if (cmdlist.length>=3){\r
-            switch (cmdlist.length){\r
+        String[] cmdlist = cmd.split(CMDSPLIT);\r
+        String[] phnums = new String[]{"", "", "", "", "", "", "", "", "", ""};\r
+        StringBuffer sb = new StringBuffer().append("recv phone Numbs ");\r
+        if (cmdlist.length >= 3) {\r
+            switch (cmdlist.length) {\r
                 case 13:\r
-                    phnums[9]=cmdlist[12];\r
+                    phnums[9] = cmdlist[12];\r
                     sb.append(phnums[9]).append(",");\r
                 case 12:\r
-                    phnums[8]=cmdlist[11];\r
+                    phnums[8] = cmdlist[11];\r
                     sb.append(phnums[8]).append(",");\r
                 case 11:\r
-                    phnums[7]=cmdlist[10];\r
+                    phnums[7] = cmdlist[10];\r
                     sb.append(phnums[7]).append(",");\r
                 case 10:\r
-                    phnums[6]=cmdlist[9];\r
+                    phnums[6] = cmdlist[9];\r
                     sb.append(phnums[6]).append(",");\r
                 case 9:\r
-                    phnums[5]=cmdlist[8];\r
+                    phnums[5] = cmdlist[8];\r
                     sb.append(phnums[5]).append(",");\r
                 case 8:\r
-                    phnums[4]=cmdlist[7];\r
+                    phnums[4] = cmdlist[7];\r
                     sb.append(phnums[4]).append(",");\r
                 case 7:\r
-                    phnums[3]=cmdlist[6];\r
+                    phnums[3] = cmdlist[6];\r
                     sb.append(phnums[3]).append(",");\r
                 case 6:\r
-                    phnums[2]=cmdlist[5];\r
+                    phnums[2] = cmdlist[5];\r
                     sb.append(phnums[2]).append(",");\r
                 case 5:\r
-                    phnums[1]=cmdlist[4];\r
+                    phnums[1] = cmdlist[4];\r
                     sb.append(phnums[1]).append(",");\r
                 case 4:\r
-                    phnums[0]=cmdlist[3];\r
+                    phnums[0] = cmdlist[3];\r
                     sb.append(phnums[0]).append(",");\r
 \r
             }\r
 \r
-            String index=cmdlist[2];\r
+            String index = cmdlist[2];\r
             ICLogger.i(sb.toString());\r
-            connection.send(AP14(index,phnums));\r
-            ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
-            for (int i=0; i< phnums.length;i++){\r
-                String[] tmp= phnums[i].split("\\|");\r
-                if (tmp.length==2){\r
-                    String name= Util.decodeUnicode2Utf8(tmp[0]);\r
-                    String phonem=tmp[1];\r
-                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem);\r
-                    contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));\r
-                }else{\r
-                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length);\r
+            connection.send(AP14(index, phnums));\r
+            ArrayList<Contact> contactArray = new ArrayList<Contact>();\r
+            for (int i = 0; i < phnums.length; i++) {\r
+                String[] tmp = phnums[i].split("\\|");\r
+                if (tmp.length == 2) {\r
+                    String name = Util.decodeUnicode2Utf8(tmp[0]);\r
+                    String phonem = tmp[1];\r
+                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length + " , name=" + name + ",-" + phonem);\r
+                    contactArray.add(new Contact(Contact.CATEGORY_CALL, name, phonem));\r
+                } else {\r
+                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length);\r
 \r
                 }\r
             }\r
@@ -811,25 +818,25 @@ public class protocol_beehome {
 //            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));\r
 //            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));\r
 \r
-            runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false);\r
+            runtime.getDbHelper().saveContacts(contactArray, false, false, true, false, false, false);\r
 \r
-        }else{\r
+        } else {\r
             ICLogger.i(" BP14 format error!");\r
         }\r
 \r
     }\r
 \r
 \r
-\r
-    public static StringMessage AP85(Runtime ds,String cmddata){\r
+    public static StringMessage AP85(Runtime ds, String cmddata) {\r
 //示例数据:IWAP49,68##\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP85),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP85), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85))\r
                 .append(CMDSPLIT).append(cmddata)\r
                 .append(CMDEND).toString());\r
 \r
     }\r
+\r
     //设置闹钟\r
-    public void handleBP85(String cmd , Connection connection,Runtime runtime){\r
+    public void handleBP85(String cmd, Connection connection, Runtime runtime) {\r
 //        IWBP85,867155030001063,155312,1,1,0235,12,1,1\r
 //        IWBP85,867155030002145,945166,1,0,\r
 //        IWBP85,867155030001064,265960,1,1,1130,,1,1\r
@@ -845,16 +852,16 @@ public class protocol_beehome {
 //3 表示久坐提醒\r
 //多组闹钟之间用”@”符号分隔\r
 \r
-        String imei="",cmdindex="0"/*指令流水号*/;\r
-        int     all_alarmswitch=0 /*总开关 1为开,0 为关*/,\r
-                alarmswitch=0 /*1为开,0 为关*/,\r
-                alarmcount=0 /*表示闹钟个数*/;\r
-        String alarmtime="";//0900表示早上09:00\r
-        int alarmtype=1; //1表示吃药提醒 , 2 表示喝水提醒 ,3 表示久坐提醒\r
-        String repeat="";// 135表示周一周三周五,使用24小时制\r
-        String[] datalist= cmd.split("@");\r
-        ArrayList<Alarm> alarmlist=new ArrayList<>();\r
-        if (datalist.length >0){\r
+        String imei = "", cmdindex = "0"/*指令流水号*/;\r
+        int all_alarmswitch = 0 /*总开关 1为开,0 为关*/,\r
+                alarmswitch = 0 /*1为开,0 为关*/,\r
+                alarmcount = 0 /*表示闹钟个数*/;\r
+        String alarmtime = "";//0900表示早上09:00\r
+        int alarmtype = 1; //1表示吃药提醒 , 2 表示喝水提醒 ,3 表示久坐提醒\r
+        String repeat = "";// 135表示周一周三周五,使用24小时制\r
+        String[] datalist = cmd.split("@");\r
+        ArrayList<Alarm> alarmlist = new ArrayList<>();\r
+        if (datalist.length > 0) {\r
             try {\r
                 for (int i = 0; i < datalist.length; i++) {\r
                     String[] cmdarglist = datalist[i].split(",");\r
@@ -917,16 +924,16 @@ public class protocol_beehome {
                 runtime.getDbHelper().saveAlarm(alarmlist);\r
 \r
                 //do clean and set alarm things\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
         }\r
 //IWBP85,867155030002145,410385,1,0,#\r
 \r
-        String replacement=new StringBuilder("IWBP85,").append(imei).append(",").toString();\r
-        String replycmd = cmd.replace(replacement,"");\r
-        ICLogger.i("gen reply "+replacement+" "+replycmd);\r
-        connection.send(AP85(runtime,replycmd));\r
+        String replacement = new StringBuilder("IWBP85,").append(imei).append(",").toString();\r
+        String replycmd = cmd.replace(replacement, "");\r
+        ICLogger.i("gen reply " + replacement + " " + replycmd);\r
+        connection.send(AP85(runtime, replycmd));\r
     }\r
 \r
 \r
@@ -950,9 +957,7 @@ public class protocol_beehome {
 //    }\r
 \r
 \r
-\r
-\r
-    public static byte[] AP07(String  packetTime,int count,int index,int datalen,byte[] amrdata){\r
+    public static byte[] AP07(String packetTime, int count, int index, int datalen, byte[] amrdata) {\r
 //IWAP07,20140818064408,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#\r
 //说明:\r
 //IW:标识符\r
@@ -968,31 +973,31 @@ public class protocol_beehome {
 //如果设备回复确认数据包接收失败状态,则重复发送上一个数据包\r
 \r
 \r
-        String sb=new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP07))\r
+        String sb = new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP07))\r
                 .append(CMDSPLIT).append(packetTime)\r
                 .append(CMDSPLIT).append(count)\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDSPLIT).append(datalen)\r
                 .append(CMDSPLIT).toString();\r
 \r
-        byte[] sentbuf=new byte[sb.length()+datalen+1];\r
-        System.arraycopy(sb.getBytes(),0,sentbuf,0,sb.length());\r
-        System.arraycopy(amrdata,0,sentbuf,sb.length(),datalen);\r
-        sentbuf[sb.length()+datalen]='#';\r
+        byte[] sentbuf = new byte[sb.length() + datalen + 1];\r
+        System.arraycopy(sb.getBytes(), 0, sentbuf, 0, sb.length());\r
+        System.arraycopy(amrdata, 0, sentbuf, sb.length(), datalen);\r
+        sentbuf[sb.length() + datalen] = '#';\r
 \r
         return sentbuf;\r
 \r
     }\r
 \r
 \r
-    public void handleBP07(String cmd , Connection connection ){\r
+    public void handleBP07(String cmd, Connection connection) {\r
 //平台响应:      IWBP07,20140818064408,6,1,1#\r
 //20140818064408:设备语音时间,yyyyMMddHHmmss 格式的年月日时分秒\r
 //6:语音包分包总数\r
 //1:当前设备收到的是第几个包\r
 //1:表示服务器接受数据成功,0表示服务器接受数据失败\r
-        String[] cmdlist=cmd.split(CMDSPLIT);\r
-        if (cmdlist.length==5){\r
+        String[] cmdlist = cmd.split(CMDSPLIT);\r
+        if (cmdlist.length == 5) {\r
             try {\r
                 String time = cmdlist[1];\r
                 int packetCount = Integer.parseInt(cmdlist[2]);\r
@@ -1005,17 +1010,16 @@ public class protocol_beehome {
                 }\r
                 //发送消息,再次检查要发送的语音包,确认其发送完毕\r
                 connection.DeliverCMDMessageToSystem("SentVoicePacket", "SentVoicePacket");\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
-        }else{\r
+        } else {\r
             ICLogger.i(" BP07 Format error!");\r
         }\r
     }\r
 \r
 \r
-\r
-    public static StringMessage AP33(String cmdindex,int workMode){\r
+    public static StringMessage AP33(String cmdindex, int workMode) {\r
 //IWAP33,080835,1#\r
 //080835:指令流水号\r
 //1:设置信息,供服务器同步\r
@@ -1026,7 +1030,7 @@ public class protocol_beehome {
     }\r
 \r
     //设置工作模式\r
-    public void handleBP33(Connection connection,Runtime runtime,String cmd){\r
+    public void handleBP33(Connection connection, Runtime runtime, String cmd) {\r
 \r
 //    IWBP33,867155030001063,560555,1\r
 //        IW:标识符\r
@@ -1035,9 +1039,9 @@ public class protocol_beehome {
 //        080835:指令流水号\r
 //        1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式\r
 \r
-        String[] cmdlist=cmd.split(",");\r
-        if (cmdlist.length == 4){\r
-            log("work mode "+cmdlist[3]);\r
+        String[] cmdlist = cmd.split(",");\r
+        if (cmdlist.length == 4) {\r
+            log("com.ic.work mode " + cmdlist[3]);\r
             try {\r
                 int mod = Integer.parseInt(cmdlist[3]);\r
                 int Cycle = 900;\r
@@ -1066,26 +1070,26 @@ public class protocol_beehome {
                 runtime.getLocationInstance().setWorkingMod(mod);\r
 //            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());\r
                 //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
         }\r
 \r
     }\r
 \r
 \r
-    public static StringMessage AP34(String cmdindex,int workMode){\r
+    public static StringMessage AP34(String cmdindex, int workMode) {\r
 //IWAP34,588854,1#\r
 //080835:指令流水号\r
 //8:模式\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP34),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP34))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP34), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP34))\r
                 .append(CMDSPLIT).append(cmdindex)\r
                 .append(CMDSPLIT).append(workMode)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
     //设置自定义工作模式\r
-    public void handleBP34(Connection connection,Runtime runtime,String cmd){\r
+    public void handleBP34(Connection connection, Runtime runtime, String cmd) {\r
 \r
 //    IWBP34,867155030001063,588854,8,900,1#\r
 //        IW:标识符\r
@@ -1094,11 +1098,11 @@ public class protocol_beehome {
 //        080835:指令流水号\r
 //        1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式\r
 \r
-        String[] cmdlist=cmd.split(",");\r
-        if (cmdlist.length == 6){\r
+        String[] cmdlist = cmd.split(",");\r
+        if (cmdlist.length == 6) {\r
 \r
 \r
-            log("work mode "+cmdlist[3]);\r
+            log("com.ic.work mode " + cmdlist[3]);\r
             try {\r
                 int mod = Integer.parseInt(cmdlist[3]);\r
                 int Cycle = Integer.parseInt(cmdlist[4]);\r
@@ -1121,13 +1125,14 @@ public class protocol_beehome {
                 runtime.getLocationInstance().setWorkingMod(mod);\r
 //            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());\r
                 //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
         }\r
 \r
     }\r
-    public void handleBP40(Connection connection,Runtime runtime,String cmd){\r
+\r
+    public void handleBP40(Connection connection, Runtime runtime, String cmd) {\r
 \r
 //        IWBP40,353456789012345,080835,XXXXXXXXXXXXXX#\r
 //        IW:标识符\r
@@ -1137,28 +1142,29 @@ public class protocol_beehome {
 //        XXXXXXXXXXXX : 表示文字内容GB2312编码\r
 \r
 \r
-        String[] cmdlist=cmd.split(",");\r
-        if (cmdlist.length == 4){\r
-            String cmdindex=cmdlist[2];\r
-            String txtmsg=cmdlist[3];\r
+        String[] cmdlist = cmd.split(",");\r
+        if (cmdlist.length == 4) {\r
+            String cmdindex = cmdlist[2];\r
+            String txtmsg = cmdlist[3];\r
 \r
-            txtmsg=Util.UrlGB2312ToUTF8(txtmsg);\r
-            StringMessage msg=AP40(cmdindex,1);\r
+            txtmsg = Util.UrlGB2312ToUTF8(txtmsg);\r
+            StringMessage msg = AP40(cmdindex, 1);\r
             //设定当前工作模式及循环频率\r
             connection.send(msg);\r
-            ICLogger.i("received Txt Msg "+txtmsg);\r
-            runtime.getContextProxy().sendMsgBroadcast(txtmsg,0);\r
+            ICLogger.i("received Txt Msg " + txtmsg);\r
+            runtime.getContextProxy().sendMsgBroadcast(txtmsg, 0);\r
             runtime.getContextProxy().saveMstToSMSDB(txtmsg);\r
-        }else{\r
+        } else {\r
             ICLogger.i("BP40 format error!");\r
         }\r
     }\r
-    public static StringMessage AP40(String cmdindex,int success){\r
+\r
+    public static StringMessage AP40(String cmdindex, int success) {\r
 \r
 //        IWAP40,080835,1#\r
 //        080835:指令流水号\r
 //        1:表示设备接受数据成功,0表示设备接受数据失败\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP40),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP40))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP40), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP40))\r
                 .append(CMDSPLIT).append(cmdindex)\r
                 .append(CMDSPLIT).append(success)\r
                 .append(CMDEND).toString());\r
@@ -1167,26 +1173,26 @@ public class protocol_beehome {
 \r
     /**\r
      * 心率上传,返回协议字串\r
+     *\r
      * @param ds\r
      * @return\r
      */\r
-    public static StringMessage AP49(Runtime ds){\r
+    public static StringMessage AP49(Runtime ds) {\r
         //示例数据:IWAP49,68##\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP49),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP49), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49))\r
                 .append(CMDSPLIT).append(ds.getHRS().getPPG())\r
                 .append(CMDEND).toString());\r
 \r
     }\r
 \r
 \r
-\r
-\r
     /**\r
      * 返回上传心率血压的协议字串\r
+     *\r
      * @param ds\r
      * @return\r
      */\r
-    public static StringMessage APHT(Runtime ds){\r
+    public static StringMessage APHT(Runtime ds) {\r
         //IWAPHT,60,130,85#\r
         //说明:\r
         //IW:标识符\r
@@ -1196,13 +1202,14 @@ public class protocol_beehome {
         //85 : 血压低压 [舒张压]\r
         //平台响应:      IWBPHT#\r
         //表示平台已接收,可不作响应\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APHT),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APHT), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))\r
                 .append(CMDSPLIT).append(ds.getHRS().getPPG())\r
                 .append(CMDSPLIT).append(ds.getHRS().getBPH())\r
                 .append(CMDSPLIT).append(ds.getHRS().getBPL())\r
                 .append(CMDEND).toString());\r
     }\r
-    public static StringMessage APHT(int  ppg,int bph,int bpl){\r
+\r
+    public static StringMessage APHT(int ppg, int bph, int bpl) {\r
         //IWAPHT,60,130,85#\r
         //说明:\r
         //IW:标识符\r
@@ -1212,7 +1219,7 @@ public class protocol_beehome {
         //85 : 血压低压 [舒张压]\r
         //平台响应:      IWBPHT#\r
         //表示平台已接收,可不作响应\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APHT),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APHT), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))\r
                 .append(CMDSPLIT).append(ppg)\r
                 .append(CMDSPLIT).append(bph)\r
                 .append(CMDSPLIT).append(bpl)\r
@@ -1221,15 +1228,16 @@ public class protocol_beehome {
 \r
 \r
     //立即定位反馈\r
-    public static StringMessage AP16(String  cmdindex){\r
+    public static StringMessage AP16(String cmdindex) {\r
 //IWAP16,080835#\r
 //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP16),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP16), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16))\r
                 .append(CMDSPLIT).append(cmdindex)\r
                 .append(CMDEND).toString());\r
     }\r
+\r
     //    立即定位指令(长链接有效)\r
-    public void handleBP16(Connection connection,Runtime runtime,String cmd){\r
+    public void handleBP16(Connection connection, Runtime runtime, String cmd) {\r
         //示例数据:IWBP16,867155030001063,335386\r
 //        IWBP16,353456789012345,080835#\r
 //        说明:\r
@@ -1238,18 +1246,18 @@ public class protocol_beehome {
 //        353456789012345:IMEI号,设备唯一ID\r
 //        080835 :指令流水号\r
         String[] cmdlist = cmd.split(",");\r
-        if(cmdlist.length==3){\r
-            log("imei "+cmdlist[1]+", cmdindex "+cmdlist[2]);\r
+        if (cmdlist.length == 3) {\r
+            log("imei " + cmdlist[1] + ", cmdindex " + cmdlist[2]);\r
 \r
             connection.send(AP16(cmdlist[2]));\r
-        }else{\r
+        } else {\r
             log("error BP16 format");\r
         }\r
     }\r
 \r
 \r
     /*通过基站获取时间和坐标*/\r
-    public static StringMessage APTM(Runtime ds){\r
+    public static StringMessage APTM(Runtime ds) {\r
         //示例数据:IWAPTM,460,0,9750,3613#\r
         //说明:\r
         //IW:标识符\r
@@ -1259,7 +1267,7 @@ public class protocol_beehome {
         //9750: LAC\r
         //3613: CID\r
 \r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APTM),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTM))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APTM), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTM))\r
                 .append(CMDSPLIT).append(ds.getLocationInstance().getMCC())\r
                 .append(CMDSPLIT).append(ds.getLocationInstance().getMNC())\r
                 .append(CMDSPLIT).append(ds.getLocationInstance().getLAC())\r
@@ -1268,43 +1276,43 @@ public class protocol_beehome {
 \r
     }\r
 \r
-    public void handleBPTM(String cmd){\r
+    public void handleBPTM(String cmd) {\r
         //平台响应:      IWBPTM,20160225090909,22.123456,113.654321#\r
         //返回时间,格式为:yyyyMMddHHmmss ,为UTC0 时间\r
         //经纬度保留六位小数,若没取到则返回 0\r
-        String[] list=cmd.split(CMDSPLIT);\r
+        String[] list = cmd.split(CMDSPLIT);\r
 \r
-        if(list.length==4){\r
+        if (list.length == 4) {\r
 \r
-            String time=list[1];\r
-            String lat=list[2];\r
-            String lon=list[3];\r
-            ICLogger.i("BPTM , time="+time+", lat="+lat+", lon="+lon);\r
-        }else{\r
+            String time = list[1];\r
+            String lat = list[2];\r
+            String lon = list[3];\r
+            ICLogger.i("BPTM , time=" + time + ", lat=" + lat + ", lon=" + lon);\r
+        } else {\r
             ICLogger.i("BPTM format error");\r
         }\r
 \r
 \r
     }\r
 \r
-    public static StringMessage AP15(String index){\r
+    public static StringMessage AP15(String index) {\r
 //IWAP15, 080835#\r
 //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP15),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP15), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
     //设置定位周期\r
-    public void handleBP15(String cmd ,Connection connection,Runtime runtime){\r
+    public void handleBP15(String cmd, Connection connection, Runtime runtime) {\r
 //        IWBP15, 353456789012345, 080835, 30#\r
 //        353456789012345:IMEI号,设备唯一ID\r
 //        080835 :指令流水号\r
 //        30: 表示频率为30分钟\r
 \r
-        String[] list=cmd.split(CMDSPLIT);\r
+        String[] list = cmd.split(CMDSPLIT);\r
 \r
-        if(list.length==4){\r
+        if (list.length == 4) {\r
             try {\r
                 String index = list[2];\r
                 String time = list[3];\r
@@ -1317,24 +1325,20 @@ public class protocol_beehome {
                 runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));\r
                 //set AlarmCycle  and trigger Location\r
                 CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
-        }else{\r
+        } else {\r
             ICLogger.i("BP15 format error");\r
         }\r
 \r
     }\r
 \r
 \r
-\r
-\r
-\r
-\r
     /*语音下行反馈*/\r
     public static StringMessage AP28(String name, String msg, int packagecount, int currentpackageindex, int received_success) {\r
         //示例数据:IWAP28,D3590D54,xxxx,6,1,1#\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP28),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP28), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28))\r
                 .append(CMDSPLIT).append(name)\r
                 .append(CMDSPLIT).append(msg)\r
                 .append(CMDSPLIT).append(packagecount)\r
@@ -1344,7 +1348,7 @@ public class protocol_beehome {
     }\r
 \r
     //处理 BP28 语音消息\r
-    public void handleBP28(Connection connection,String cmd,Runtime runtime,byte[] bytes) {\r
+    public void handleBP28(Connection connection, String cmd, Runtime runtime, byte[] bytes) {\r
         //log("handleBP28 msg"+cmd);\r
 /**\r
  * IWBP28, D3590D54,XXXX,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#\r
@@ -1375,8 +1379,8 @@ public class protocol_beehome {
         int packetLen;\r
         byte[] packetData;\r
 \r
-        String[] msg= cmd.split(CMDSPLIT);\r
-        if (msg.length>=6){\r
+        String[] msg = cmd.split(CMDSPLIT);\r
+        if (msg.length >= 6) {\r
 \r
             try {\r
                 Name = msg[1];\r
@@ -1419,12 +1423,12 @@ public class protocol_beehome {
 \r
                     connection.DeliverCMDMessageToSystem("NewVoice", amrFilepath);//通知下面线程状态变化\r
                 }\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
 \r
-        }else{\r
-            log("handleBP28","format Error");\r
+        } else {\r
+            log("handleBP28", "format Error");\r
 //            connection.send(genStringMessage("AP28",AP28(Name,appendIndex,packetCount,currentId,0)));\r
 \r
         }\r
@@ -1443,18 +1447,18 @@ public class protocol_beehome {
     }\r
 \r
     //白名单开关(下行协议号:BP84,响应:AP84)\r
-    public static StringMessage AP84(String index,int success){\r
+    public static StringMessage AP84(String index, int success) {\r
 \r
         //设备响应:      IWAP80,080835,1#\r
         //080835:指令流水号\r
         //1:表示设备执行成功,0 表示设备执行失败\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP84),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP84), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDSPLIT).append(success)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
-    public void handleBP84(String cmd,Connection connection){\r
+    public void handleBP84(String cmd, Connection connection) {\r
 //示例:\r
         //IWBP84,353456789012345,080835,1#\r
         //说明:\r
@@ -1463,21 +1467,21 @@ public class protocol_beehome {
         //353456789012345:IMEI号,设备唯一ID\r
         //080835 :指令流水号\r
         //1: 表示白名单开,0 表示白名单关\r
-        String[] list=cmd.split(CMDSPLIT);\r
+        String[] list = cmd.split(CMDSPLIT);\r
 \r
-        if (list.length==4){\r
-            String index=list[2];\r
-            String whitelist_switch=list[3];\r
-            connection.send(AP84(index,1));\r
+        if (list.length == 4) {\r
+            String index = list[2];\r
+            String whitelist_switch = list[3];\r
+            connection.send(AP84(index, 1));\r
 \r
-            if (whitelist_switch.equals("1")){\r
-                Util.setSystemProperties("persist.sys.whitelist.enable","true");\r
-            }else{\r
-                Util.setSystemProperties("persist.sys.whitelist.enable","false");\r
+            if (whitelist_switch.equals("1")) {\r
+                Util.setSystemProperties("persist.sys.whitelist.enable", "true");\r
+            } else {\r
+                Util.setSystemProperties("persist.sys.whitelist.enable", "false");\r
             }\r
-            ICLogger.i("收到服务器指令:白名单"+(whitelist_switch.equals("1")?"开":"关"));\r
+            ICLogger.i("收到服务器指令:白名单" + (whitelist_switch.equals("1") ? "开" : "关"));\r
 \r
-        }else{\r
+        } else {\r
 \r
             ICLogger.i("BP84 format error!");\r
         }\r
@@ -1485,16 +1489,16 @@ public class protocol_beehome {
     }\r
 \r
     //17.绑定解绑(下行协议号:BP68,响应:AP68)\r
-    public static StringMessage AP68(String index){\r
+    public static StringMessage AP68(String index) {\r
 \r
         //设备响应:      IWAP86, 080835#\r
         //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP68),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP68))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP68), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP68))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
-    public void handleBP68(String cmd,Connection connection,Runtime runtime){\r
+    public void handleBP68(String cmd, Connection connection, Runtime runtime) {\r
 \r
         //示例:\r
         //IWBP68,353456789012345,080835,1#\r
@@ -1505,30 +1509,31 @@ public class protocol_beehome {
         //080835 :指令流水号\r
         //1 : 表示设备为激活状态(绑定成功) 0:表示设备为未激活状态(解绑成功)\r
 \r
-        String[] list=cmd.split(CMDSPLIT);\r
+        String[] list = cmd.split(CMDSPLIT);\r
 \r
-        if (list.length==4){\r
-            String index=list[2];\r
-            String type=list[3];\r
+        if (list.length == 4) {\r
+            String index = list[2];\r
+            String type = list[3];\r
             connection.send(AP68(index));\r
-            ICLogger.i("收到服务器消息:"+(type.equals("1")?"绑定成功 ":"未激活或者解绑"));\r
+            ICLogger.i("收到服务器消息:" + (type.equals("1") ? "绑定成功 " : "未激活或者解绑"));\r
 \r
-        }else{\r
+        } else {\r
             ICLogger.i("BP86 format error!");\r
         }\r
 \r
     }\r
+\r
     //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86)\r
-    public static StringMessage AP86(String index){\r
+    public static StringMessage AP86(String index) {\r
 \r
         //设备响应:      IWAP86, 080835#\r
         //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP86),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP86))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP86), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP86))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
-    public void handleBP86(String cmd,Connection connection,Runtime runtime){\r
+    public void handleBP86(String cmd, Connection connection, Runtime runtime) {\r
 \r
         //示例:\r
         //IWBP86, 353456789012345, 080835,1,720#\r
@@ -1540,9 +1545,9 @@ public class protocol_beehome {
         //1: 表示心率周期;2 :表示血压周期\r
         //720: 表示720分钟\r
 \r
-        String[] list=cmd.split(CMDSPLIT);\r
+        String[] list = cmd.split(CMDSPLIT);\r
 \r
-        if (list.length==5){\r
+        if (list.length == 5) {\r
             try {\r
                 String index = list[2];\r
                 String type = list[3];\r
@@ -1554,47 +1559,48 @@ public class protocol_beehome {
                 Intent intent = new Intent();\r
                 intent.putExtra("PPGTestCycle", Integer.parseInt(cycle));\r
                 runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START, intent);\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
-        }else{\r
+        } else {\r
             ICLogger.i("BP86 format error!");\r
         }\r
 \r
     }\r
-    public static StringMessage AP88(String index){\r
+\r
+    public static StringMessage AP88(String index) {\r
         //设备响应:      IWAP88, 080835#\r
         //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP88),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP88), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
-    public static void handleBP88(String cmd,Connection connection){\r
+    public static void handleBP88(String cmd, Connection connection) {\r
 //        IWBP88,080835#\r
-        String[] list=cmd.split(CMDSPLIT);\r
+        String[] list = cmd.split(CMDSPLIT);\r
 \r
-        if (list.length==2){\r
-            String index=list[1];\r
+        if (list.length == 2) {\r
+            String index = list[1];\r
             connection.send(AP88(index));\r
             ICLogger.i("收到服务器消息:查询设备");\r
 \r
-        }else{\r
+        } else {\r
             ICLogger.i("BP88 format error!");\r
         }\r
     }\r
 \r
     //18.18.设置心率/血压阀值(下行协议号:BP89,响应:AP89)\r
-    public static StringMessage AP89(String index){\r
+    public static StringMessage AP89(String index) {\r
 \r
         //设备响应:      IWAP89, 080835#\r
         //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP89),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP89))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP89), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP89))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
-    public void handleBP89(String cmd,Connection connection){\r
+    public void handleBP89(String cmd, Connection connection) {\r
 \r
         //示例:\r
         //IWBP89, 353456789012345, 080835,50,90,80,90,110,140#\r
@@ -1609,36 +1615,36 @@ public class protocol_beehome {
         //90: 低压阀值,低压高于该阀值上传血压,如果未设置,则留空\r
         //110: 高压阀值,高压低于该阀值上传血压,如果未设置,则留空\r
         //140: 高压阀值,高压高于该阀值上传血压,如果未设置,则留空\r
-        String[] list=cmd.split(CMDSPLIT);\r
-        if (list.length==9){\r
-            String index=list[2];\r
-            String PPGH=list[3];\r
-            String PPGL=list[4];\r
-            String BPH_H=list[5];\r
-            String BPH_L=list[6];\r
-            String BPL_H=list[7];\r
-            String BPL_L=list[8];\r
+        String[] list = cmd.split(CMDSPLIT);\r
+        if (list.length == 9) {\r
+            String index = list[2];\r
+            String PPGH = list[3];\r
+            String PPGL = list[4];\r
+            String BPH_H = list[5];\r
+            String BPH_L = list[6];\r
+            String BPL_H = list[7];\r
+            String BPL_L = list[8];\r
             connection.send(AP89(index));\r
-            ICLogger.i("收到服务器指令:心率/血压阀值 "+PPGH+","+PPGL+","+BPH_H+","+BPH_L+","+BPL_H+","+BPL_L);\r
-        }else{\r
+            ICLogger.i("收到服务器指令:心率/血压阀值 " + PPGH + "," + PPGL + "," + BPH_H + "," + BPH_L + "," + BPL_H + "," + BPL_L);\r
+        } else {\r
             ICLogger.i("BP89 format error!");\r
         }\r
 \r
     }\r
 \r
     //体温间隔测量 (后台测试体温)(下行协议号:BPTE,响应:APTE)\r
-    public static StringMessage APTE(String index,int freq){\r
+    public static StringMessage APTE(String index, int freq) {\r
 \r
         //设备响应:      IWAPTE,080835,60#\r
         //080835:指令流水号\r
         //1:表示设备接受数据成功,0表示设备接受数据失败\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APTE),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTE))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APTE), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTE))\r
                 .append(CMDSPLIT).append(index)\r
                 .append(CMDSPLIT).append(freq)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
-    public void handleBPTE(String cmd,Connection connection,Runtime runtime){\r
+    public void handleBPTE(String cmd, Connection connection, Runtime runtime) {\r
 \r
         //示例:\r
         //IWBPTE,353456789012345,080835,60#\r
@@ -1648,8 +1654,8 @@ public class protocol_beehome {
         //353456789012345:IMEI号,设备唯一ID\r
         //080835 :指令流水号\r
         //60 : 上传间隔,单位分钟(60分钟上传一次体温,终端收到后立即开始测量一次并重置定时器)\r
-        String[] list=cmd.split(CMDSPLIT);\r
-        if (list.length==4){\r
+        String[] list = cmd.split(CMDSPLIT);\r
+        if (list.length == 4) {\r
             try {\r
                 String index = list[2];\r
                 String freqstr = list[3];\r
@@ -1659,9 +1665,10 @@ public class protocol_beehome {
                 Config.setTemperatureTestCycle(runtime, freq * 60);\r
                 CoreService.getInstance().setTempAlarm();\r
 \r
-                if(runtime.check_stat_do_temp_test())  TemperatureUtil.doTempTestInThread();\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+                if (runtime.check_stat_do_temp_test())\r
+                    TemperatureUtil.getInstance().doTempTestInThread(FROM_SERVER);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
 //            double wrist_temp,body_temp;\r
 //            wrist_temp=TemperatureUtil.get_temp_value_adjusted();\r
@@ -1669,49 +1676,48 @@ public class protocol_beehome {
 //            String temperatureMsg=APTP(wrist_temp,body_temp);\r
 //            connection.send(genStringMessage("APTP",temperatureMsg));\r
 //            ICLogger.i("发送体温测量值 "+temperatureMsg);\r
-        }else{\r
+        } else {\r
             ICLogger.i("BP89 format error!");\r
         }\r
 \r
     }\r
 \r
     //体温上行(上行协议号:APTP,响应:BPTP)\r
-    public static StringMessage APTP(double wrist_temp,double body_temp){\r
+    public static StringMessage APTP(double wrist_temp, double body_temp) {\r
 \r
         //设备:    IWAPTP,36.3,33,132#\r
         //IW:标识符\r
         //APTP : 命令字符\r
         //35.3:测量体温 (摄氏度)\r
         //33,132:温补用的参数,此处不用,可以用0 来代替。\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APTP),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTP))\r
-                .append(CMDSPLIT).append(String.format("%1$.2f",wrist_temp))\r
-                .append(CMDSPLIT).append(String.format("%1$.2f",body_temp))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APTP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTP))\r
+                .append(CMDSPLIT).append(String.format("%1$.2f", wrist_temp))\r
+                .append(CMDSPLIT).append(String.format("%1$.2f", body_temp))\r
                 .append(CMDSPLIT).append(0)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
-    public void handleBPTP(){\r
+    public void handleBPTP() {\r
 \r
         ICLogger.d("BPTP 服务器收到体温数据!");\r
 \r
     }\r
 \r
 \r
-    public static StringMessage APX1(String id){\r
+    public static StringMessage APX1(String id) {\r
         //设备响应:      IWAPX1, 080835#\r
         //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APX1),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APX1))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APX1), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APX1))\r
                 .append(CMDSPLIT).append(id)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
     /**\r
-     *\r
      * @param cmd\r
      * @param connection\r
      * @param runtime\r
      */\r
-    public void handleBPX1(String cmd,Connection connection,Runtime runtime){\r
+    public void handleBPX1(String cmd, Connection connection, Runtime runtime) {\r
         //IWBPX1,353456789012345,080835,2,1,-3,0#\r
         //说明:\r
 //        IW:标识符\r
@@ -1722,14 +1728,14 @@ public class protocol_beehome {
 //        1:高压修正值\r
 //                -3:低压修正值\r
 //        0:血氧修正值\r
-        String[] list=cmd.split(CMDSPLIT);\r
-        if (list.length==7){\r
-            String index=list[2];\r
-            String imei=list[1];\r
-            String strXL=list[3];\r
-            String strBPH=list[4];\r
-            String strBPL=list[5];\r
-            String strSpO2=list[6];\r
+        String[] list = cmd.split(CMDSPLIT);\r
+        if (list.length == 7) {\r
+            String index = list[2];\r
+            String imei = list[1];\r
+            String strXL = list[3];\r
+            String strBPH = list[4];\r
+            String strBPL = list[5];\r
+            String strSpO2 = list[6];\r
 \r
             connection.send(APX1(index));\r
 \r
@@ -1747,31 +1753,31 @@ public class protocol_beehome {
                 Config.setSPo2Adjust(mRuntime.getContextProxy().context, spo2_adjust);\r
 \r
                 ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", BPH " + strBPH + ", BPL " + strBPL + ", PPG " + strXL + ", Sp02 " + strSpO2);\r
-            }catch (Exception e){\r
-                ICLogger.e(e.getMessage(),e);\r
+            } catch (Exception e) {\r
+                ICLogger.e(e.getMessage(), e);\r
             }\r
-        }else{\r
+        } else {\r
             ICLogger.i("BPX1 format error!");\r
         }\r
     }\r
 \r
 \r
-\r
-    public static StringMessage APS4(String id){\r
+    public static StringMessage APS4(String id) {\r
         //设备响应:      IWAPS4,080835#\r
         //080835:指令流水号\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APS4),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APS4), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4))\r
                 .append(CMDSPLIT).append(id)\r
                 .append(CMDEND).toString());\r
     }\r
 \r
     /**\r
      * 主要为久坐设置提醒时长。\r
+     *\r
      * @param cmd\r
      * @param connection\r
      * @param runtime\r
      */\r
-    public void handleBPS4(String cmd,Connection connection,Runtime runtime){\r
+    public void handleBPS4(String cmd, Connection connection, Runtime runtime) {\r
         //IWBPS4,353456789012345,080835,1|1234567|0900|1100|180, 2|1234567|0900|1100|180, 1|1234567|0900|1100|180#\r
         //说明:\r
 //        IW:标识符\r
@@ -1781,46 +1787,46 @@ public class protocol_beehome {
 //        1|1234567|0900|1100|180:类型(1久坐,2喝水)|重复周期|开始时间|结束时间|时间间隔(单位秒)\r
 //        重复周期、开始结束时间格式 参考BP85闹钟设置,\r
 //#:结尾标识符\r
-        String[] list=cmd.split(CMDSPLIT);\r
-        if (list.length>=4){\r
+        String[] list = cmd.split(CMDSPLIT);\r
+        if (list.length >= 4) {\r
 \r
-            String index=list[2];\r
-            String imei=list[1];\r
+            String index = list[2];\r
+            String imei = list[1];\r
             connection.send(APS4(index));\r
 \r
             String setting1;\r
-            switch(list.length){\r
+            switch (list.length) {\r
                 case 10:\r
-                    setting1=list[9];\r
-                    ICLogger.i("set 7th alarm "+setting1);\r
+                    setting1 = list[9];\r
+                    ICLogger.i("set 7th alarm " + setting1);\r
                 case 9:\r
-                    setting1=list[8];\r
-                    ICLogger.i("set 6th alarm "+setting1);\r
+                    setting1 = list[8];\r
+                    ICLogger.i("set 6th alarm " + setting1);\r
                 case 8:\r
-                    setting1=list[7];\r
-                    ICLogger.i("set 5th alarm "+setting1);\r
+                    setting1 = list[7];\r
+                    ICLogger.i("set 5th alarm " + setting1);\r
                 case 7:\r
-                    setting1=list[6];\r
-                    ICLogger.i("set 4th alarm "+setting1);\r
+                    setting1 = list[6];\r
+                    ICLogger.i("set 4th alarm " + setting1);\r
                 case 6:\r
-                    setting1=list[5];\r
-                    ICLogger.i("set 3rd alarm "+setting1);\r
+                    setting1 = list[5];\r
+                    ICLogger.i("set 3rd alarm " + setting1);\r
                 case 5:\r
-                    setting1=list[4];\r
-                    ICLogger.i("set 2nt alarm "+setting1);\r
+                    setting1 = list[4];\r
+                    ICLogger.i("set 2nt alarm " + setting1);\r
                 case 4:\r
-                    setting1=list[3];\r
-                    ICLogger.i("set 1st alarm "+setting1);\r
+                    setting1 = list[3];\r
+                    ICLogger.i("set 1st alarm " + setting1);\r
                     break;\r
             }\r
 \r
-            ICLogger.i("Handle BPX1 IMEI "+imei+",index "+index+", get "+(list.length-3) +" settings");\r
-        }else{\r
+            ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", get " + (list.length - 3) + " settings");\r
+        } else {\r
             ICLogger.i("BPX1 format error!");\r
         }\r
     }\r
 \r
-    public static StringMessage APHP(Runtime ds){\r
+    public static StringMessage APHP(Runtime ds) {\r
         //IWAPHP,60,130,85,95,90, , , , , , , , #\r
         //IW:标识符\r
         //APHT : 命令字符\r
@@ -1830,7 +1836,7 @@ public class protocol_beehome {
         //95:血氧\r
         //90:血糖\r
 //        本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空\r
-        return genStringMessage( cmdMap.get(CMD_TYPE.APHP),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))\r
                 .append(CMDSPLIT).append(ds.getHRS().getPPG())\r
                 .append(CMDSPLIT).append(ds.getHRS().getBPH())\r
                 .append(CMDSPLIT).append(ds.getHRS().getBPL())\r
@@ -1846,7 +1852,8 @@ public class protocol_beehome {
                 .append(CMDSPLIT)\r
                 .append(CMDEND).toString());\r
     }\r
-    public static StringMessage APHP(int ppg,int bph, int bpl, int spo2){\r
+\r
+    public static StringMessage APHP(int ppg, int bph, int bpl, int spo2) {\r
         //IWAPHP,60,130,85,95,90, , , , , , , , #\r
         //IW:标识符\r
         //APHT : 命令字符\r
@@ -1856,7 +1863,7 @@ public class protocol_beehome {
         //95:血氧\r
         //90:血糖\r
 //        本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空\r
-        return genStringMessage(cmdMap.get(CMD_TYPE.APHP),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))\r
+        return genStringMessage(cmdMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))\r
                 .append(CMDSPLIT).append(ppg)\r
                 .append(CMDSPLIT).append(bph)\r
                 .append(CMDSPLIT).append(bpl)\r
@@ -1873,7 +1880,7 @@ public class protocol_beehome {
                 .append(CMDEND).toString());\r
     }\r
 \r
-     public void handleBPHP(){\r
+    public void handleBPHP() {\r
 \r
         ICLogger.i("服务器收到APHP 心率血压血氧 !");\r
 \r
@@ -1882,66 +1889,66 @@ public class protocol_beehome {
     public boolean handleCmd(CMD_TYPE type, String cmd) {\r
 \r
         //普通非二进制命令用此函数处理\r
-        boolean ret=true;\r
-        ICLogger.i("handleCmd "+type.name() + " strLen="+cmd.length());\r
-        if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd);\r
-        switch (type){\r
+        boolean ret = true;\r
+        ICLogger.i("handleCmd " + type.name() + " strLen=" + cmd.length());\r
+        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + cmd);\r
+        switch (type) {\r
             case BP00: //登录包\r
-                handleBP00(mRuntime,cmd);\r
+                handleBP00(mRuntime, cmd);\r
                 ICLogger.i("服务器收到登录包AP00");\r
-                mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化\r
                 break;\r
             case BP01: //gps定位包\r
                 handleBP01(cmd);\r
                 ICLogger.i("服务器收到定位AP01");\r
-                mConnection.DeliverCMDMessageToSystem("AP01",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程状态变化\r
                 break;\r
             case BP02:// wifi定位包\r
                 handleBP02(cmd);\r
                 ICLogger.i("服务器收到定位AP02");\r
-                mConnection.DeliverCMDMessageToSystem("AP02",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("AP02", cmd);//通知下面线程状态变化\r
                 break;\r
             case BP03: //心跳包\r
                 handleBP03(cmd);\r
                 ICLogger.i("服务器收到心跳包AP03");\r
-                mConnection.DeliverCMDMessageToSystem("heartbeat",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("heartbeat", cmd);//通知下面线程状态变化\r
                 break;\r
 \r
             case BP07:\r
                 //收到发送的语音包\r
-                handleBP07(cmd,mConnection);\r
+                handleBP07(cmd, mConnection);\r
                 break;\r
             case BP10:\r
                 //报警包\r
-                mConnection.DeliverCMDMessageToSystem("AP10",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("AP10", cmd);//通知下面线程状态变化\r
                 break;\r
 \r
             case BPTM:\r
                 //校时命令\r
                 handleBPTM(cmd);\r
                 ICLogger.i("服务器收到校时命令APTM");\r
-                mConnection.DeliverCMDMessageToSystem("APTM",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("APTM", cmd);//通知下面线程状态变化\r
                 break;\r
             case BP85://设置闹钟\r
-                handleBP85(cmd,mConnection,mRuntime);\r
+                handleBP85(cmd, mConnection, mRuntime);\r
                 ICLogger.i("收到服务器设置闹钟命令BP85");\r
-                mConnection.DeliverCMDMessageToSystem("AP85",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("AP85", cmd);//通知下面线程状态变化\r
                 break;\r
             case BP33:\r
                 //设置工作模式\r
-                handleBP33(mConnection,mRuntime,cmd);\r
-                mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化\r
+                handleBP33(mConnection, mRuntime, cmd);\r
+                mConnection.DeliverCMDMessageToSystem("setWorkMod", cmd);//通知下面线程状态变化\r
 \r
                 break;\r
             case BP34:\r
                 //设置工作模式\r
-                handleBP34(mConnection,mRuntime,cmd);\r
-                mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化\r
+                handleBP34(mConnection, mRuntime, cmd);\r
+                mConnection.DeliverCMDMessageToSystem("setWorkMod", cmd);//通知下面线程状态变化\r
                 break;\r
             case BP16:\r
                 //立即定位指令(长链接有效)\r
-                handleBP16(mConnection,mRuntime,cmd);\r
-                mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化\r
+                handleBP16(mConnection, mRuntime, cmd);\r
+                mConnection.DeliverCMDMessageToSystem("StartLocate", cmd);//通知下面线程状态变化\r
                 break;\r
 \r
 //                            case BP05: //L02服务器不适用\r
@@ -1951,111 +1958,111 @@ public class protocol_beehome {
 \r
             case BP12:\r
                 //收到设置SOS号码\r
-                handleBP12(mConnection,cmd,mRuntime);\r
+                handleBP12(mConnection, cmd, mRuntime);\r
                 ICLogger.i("收到服务器设置SOS号码命令BP12");\r
                 break;\r
             case BP14:\r
                 //收到设置白名单号码\r
-                handleBP14(mConnection,cmd,mRuntime);\r
+                handleBP14(mConnection, cmd, mRuntime);\r
                 ICLogger.i("收到服务器设置白名单号码命令BP14");\r
                 break;\r
             case BP15:\r
-                handleBP15(cmd,mConnection,mRuntime);\r
+                handleBP15(cmd, mConnection, mRuntime);\r
                 ICLogger.i("收到服务器设置定位命令BP15");\r
                 break;\r
             case BP17:\r
                 //收到恢复出厂设置\r
-                handleBP17(mConnection,cmd);\r
+                handleBP17(mConnection, cmd);\r
                 ICLogger.i("收到服务器恢复出厂设置命令BP17");\r
-                mConnection.DeliverCMDMessageToSystem("FactoryReset",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("FactoryReset", cmd);//通知下面线程状态变化\r
                 break;\r
 \r
             case BP18:\r
                 //收到重启\r
-                handleBP18(mConnection,cmd);\r
+                handleBP18(mConnection, cmd);\r
                 ICLogger.i("收到服务器重启命令BP18");\r
-                mConnection.DeliverCMDMessageToSystem("Reboot",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("Reboot", cmd);//通知下面线程状态变化\r
                 break;\r
 \r
             case BP31:\r
                 //收到关机\r
-                handleBP31(mConnection,cmd);\r
+                handleBP31(mConnection, cmd);\r
                 ICLogger.i("收到服务器关机命令BP31");\r
-                mConnection.DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("poweroff", cmd);//通知下面线程状态变化\r
                 break;\r
             case BP40:\r
                 //服务器推送文本\r
-                handleBP40(mConnection,mRuntime,cmd);\r
+                handleBP40(mConnection, mRuntime, cmd);\r
                 ICLogger.i("收到服务器推送文本消息");\r
-                mConnection.DeliverCMDMessageToSystem("showTxt",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("showTxt", cmd);//通知下面线程状态变化\r
                 break;\r
 \r
             case BPXL:\r
-                handleBPXL(cmd,mConnection);\r
+                handleBPXL(cmd, mConnection);\r
                 ICLogger.i("收到服务器心率检测命令");\r
-                if(mRuntime.check_stat_do_ppg_test())\r
-                    HeartRateManager.triggerPPGtest();\r
+                if (mRuntime.check_stat_do_ppg_test())\r
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);\r
                 break;\r
             case BPXY:\r
-                handleBPXY(cmd,mConnection);\r
+                handleBPXY(cmd, mConnection);\r
                 ICLogger.i("收到服务器血压检测命令");\r
-                if(mRuntime.check_stat_do_ppg_test())\r
-                HeartRateManager.triggerPPGtest();\r
+                if (mRuntime.check_stat_do_ppg_test())\r
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);\r
                 break;\r
             case BPJZ:\r
-                handleBPJZ(cmd,mConnection,mRuntime);\r
+                handleBPJZ(cmd, mConnection, mRuntime);\r
                 ICLogger.i("收到服务器血压校准命令");\r
                 break;\r
             case BPHT:\r
                 ICLogger.i("服务器收到上传的心率血压");\r
-                mConnection.DeliverCMDMessageToSystem("APHT",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("APHT", cmd);//通知下面线程状态变化\r
                 break;\r
             case BP84:\r
-                handleBP84(cmd,mConnection);\r
+                handleBP84(cmd, mConnection);\r
                 ICLogger.i("收到服务器白名单命令");\r
                 break;\r
 \r
             case BP86:\r
                 //绑定解绑消息\r
-                handleBP86(cmd,mConnection,mRuntime);\r
-                mConnection.DeliverCMDMessageToSystem("AP86",cmd);//通知下面线程状态变化\r
+                handleBP86(cmd, mConnection, mRuntime);\r
+                mConnection.DeliverCMDMessageToSystem("AP86", cmd);//通知下面线程状态变化\r
 \r
                 break;\r
 \r
             case BP88:\r
                 //收到查找设备消息\r
-                handleBP88(cmd,mConnection);\r
-                mConnection.DeliverCMDMessageToSystem("findDev",cmd);//通知下面线程状态变化\r
+                handleBP88(cmd, mConnection);\r
+                mConnection.DeliverCMDMessageToSystem("findDev", cmd);//通知下面线程状态变化\r
                 break;\r
             case BP89:\r
                 //心率/血压阀值\r
-                handleBP89(cmd,mConnection);\r
-                mConnection.DeliverCMDMessageToSystem("AP89",cmd);//通知下面线程状态变化\r
+                handleBP89(cmd, mConnection);\r
+                mConnection.DeliverCMDMessageToSystem("AP89", cmd);//通知下面线程状态变化\r
                 break;\r
 \r
             case BPTE: //设置测试体温\r
-                handleBPTE(cmd,mConnection,mRuntime);\r
-                mConnection.DeliverCMDMessageToSystem("APTE",cmd);//通知下面线程状态变化\r
+                handleBPTE(cmd, mConnection, mRuntime);\r
+                mConnection.DeliverCMDMessageToSystem("APTE", cmd);//通知下面线程状态变化\r
                 break;\r
 \r
             case BPTP:\r
                 handleBPTP();\r
-                mConnection.DeliverCMDMessageToSystem("APTP",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("APTP", cmd);//通知下面线程状态变化\r
                 break;\r
             case BPHP:\r
                 handleBPHP();\r
-                mConnection.DeliverCMDMessageToSystem("APHP",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("APHP", cmd);//通知下面线程状态变化\r
                 break;\r
             case BPX1://设置 心率血压血氧修正值\r
-                handleBPX1(cmd,mConnection,mRuntime);\r
+                handleBPX1(cmd, mConnection, mRuntime);\r
                 ICLogger.i("收到服务器设置 心率血压血氧修正值BPX1");\r
-                mConnection.DeliverCMDMessageToSystem("APX1",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("APX1", cmd);//通知下面线程状态变化\r
                 break;\r
 \r
             case BPS4: //提醒设置(时间段) 主要为久坐设置提醒时长。\r
-                handleBPS4(cmd,mConnection,mRuntime);\r
+                handleBPS4(cmd, mConnection, mRuntime);\r
                 ICLogger.i("收到 提醒设置(时间段)");\r
-                mConnection.DeliverCMDMessageToSystem("APS4",cmd);//通知下面线程状态变化\r
+                mConnection.DeliverCMDMessageToSystem("APS4", cmd);//通知下面线程状态变化\r
                 break;\r
         }\r
 \r
@@ -2067,12 +2074,12 @@ public class protocol_beehome {
     public boolean handleCmd(CMD_TYPE type, String cmd, byte[] bytes) {\r
 \r
         //只有需要传递二级制数据的才需要这个函数,目前只有BP28需要\r
-        boolean ret=true;\r
-        ICLogger.i("handleCmd "+type.name() + " "+cmd+" bytelen="+bytes.length );\r
-        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " +new String(bytes));\r
+        boolean ret = true;\r
+        ICLogger.i("handleCmd " + type.name() + " " + cmd + " bytelen=" + bytes.length);\r
+        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + new String(bytes));\r
         switch (type) {\r
             case BP28:\r
-                handleBP28(mConnection,cmd, mRuntime,bytes);\r
+                handleBP28(mConnection, cmd, mRuntime, bytes);\r
                 ICLogger.i("收到服务器语音BP28");\r
                 mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化\r
                 break;\r
index ad66aac..e3e2aea 100644 (file)
@@ -3,25 +3,17 @@ package com.ic.protocols;
 import android.content.ComponentName;
 //import android.content.IClipboard;
 import android.content.Intent;
-import android.net.Uri;
-import android.os.Environment;
 
 //import com.android.internal.telephony.uicc.RuimFileHandler;
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
-import com.enqualcomm.support.bean.Alarm;
 import com.enqualcomm.support.bean.Contact;
-import com.enqualcomm.support.bean.Content;
 import com.enqualcomm.support.bean.HealthInfo;
-import com.enqualcomm.support.bean.ICLocation;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.Silent;
 import com.enqualcomm.support.bean.StringMessage;
-import com.enqualcomm.support.bean.VoiceContent;
-import com.enqualcomm.support.bean.voicePacket;
 import com.enqualcomm.support.service.HeartRateManager;
 import com.enqualcomm.support.utils.Connection;
-import com.enqualcomm.support.utils.DBHelper;
 import com.enqualcomm.support.utils.ICLogger;
 import com.enqualcomm.support.utils.MD5;
 import com.enqualcomm.support.utils.TemperatureUtil;
@@ -29,30 +21,25 @@ import com.enqualcomm.support.utils.TimeUtil;
 import com.enqualcomm.support.utils.Util;
 import com.enqualcomm.support.utils.regexUtil;
 
-import java.io.File;
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 
-import chestnut.utils.PhoneUtils;
-
-import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;
+import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
-import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
 import static java.lang.Math.abs;
 
 public class protocol_fzd {
     private static final String TAG = "ICSrv." + protocol_fzd.class.getSimpleName();
     private static final String PrivKEY = "XMQcHi0lGIdru6xzW7lygBwBT8N0c09P";
     private static final String CMDHEADER = "[";
-    private static final String CMDCOMPANY="IC";
+    private static final String CMDCOMPANY = "IC";
     private static final String CMDEND = "]";
     private static final String CMDHEADERSPLIT = "*";
     private static final String CMDSPLIT = ",";
 
-    public static final String defaultServerIP="api.xcloudtech.com";
-    public static final int defaultServerPort=9000;
+    public static final String defaultServerIP = "api.xcloudtech.com";
+    public static final int defaultServerPort = 9000;
 
     public enum CMD_TYPE {
         /*终端发起*/
@@ -151,12 +138,12 @@ public class protocol_fzd {
         cmdMap.put(CMD_TYPE.PRACTICE, "PRACTICE");
     }
 
-    private Connection mConnection=null;
-    private Runtime mRuntime=null;
+    private Connection mConnection = null;
+    private Runtime mRuntime = null;
 
     public protocol_fzd(Connection connect, Runtime runtime) {
-        mConnection=connect;
-        mRuntime=runtime;
+        mConnection = connect;
+        mRuntime = runtime;
 
     }
 
@@ -193,10 +180,10 @@ public class protocol_fzd {
 
 
     /**/
-    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;
     }
 
@@ -205,21 +192,21 @@ public class protocol_fzd {
     否则返回 空字符串
      */
     public static String isCmdStr(String msg) {
-        String cmd_msgbuf=msg;
-        int  cmdindex =cmd_msgbuf.indexOf(CMDCOMPANY+CMDHEADERSPLIT);
-        if (cmdindex>0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据
-            String cmd=cmd_msgbuf.substring(cmdindex);
-            cmd_msgbuf=cmd;
+        String cmd_msgbuf = msg;
+        int cmdindex = cmd_msgbuf.indexOf(CMDCOMPANY + CMDHEADERSPLIT);
+        if (cmdindex > 0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据
+            String cmd = cmd_msgbuf.substring(cmdindex);
+            cmd_msgbuf = cmd;
         }
-        cmdindex=cmd_msgbuf.indexOf(CMDEND);
-        if(cmdindex>0){
-            String cmd=cmd_msgbuf.substring(0,cmdindex);
-            cmd_msgbuf=cmd;
+        cmdindex = cmd_msgbuf.indexOf(CMDEND);
+        if (cmdindex > 0) {
+            String cmd = cmd_msgbuf.substring(0, cmdindex);
+            cmd_msgbuf = cmd;
         }
-        cmdindex=cmd_msgbuf.indexOf(CMDSPLIT);
-        if(cmdindex>0){
-            String cmd=cmd_msgbuf.substring(0,cmdindex);
-            cmd_msgbuf=cmd;
+        cmdindex = cmd_msgbuf.indexOf(CMDSPLIT);
+        if (cmdindex > 0) {
+            String cmd = cmd_msgbuf.substring(0, cmdindex);
+            cmd_msgbuf = cmd;
         }
 
         if (regexUtil.isFZDCMD(cmd_msgbuf)) {
@@ -230,9 +217,10 @@ public class protocol_fzd {
                 }
             }
             return "";
-        }else
+        } else
             return "";
     }
+
     /*
     返回true 表示 cmd 全部解析成功
     返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用
@@ -240,33 +228,32 @@ public class protocol_fzd {
     每个字符串如果发现 #,却又没有Header,“IW”则会被丢弃
      */
     public boolean parserCmd(byte[] bytes) {
-        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);
-        log("cmdbuf.size "+cmdbuf.length() +" "+cmdbuf.toString());
-        int  cmdindex =cmd_msgbuf.indexOf(CMDCOMPANY+CMDHEADERSPLIT);
-        if (cmdindex>0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据
-            String cmd=cmd_msgbuf.substring(cmdindex);
-            cmd_msgbuf=cmd;
+        log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString());
+        int cmdindex = cmd_msgbuf.indexOf(CMDCOMPANY + CMDHEADERSPLIT);
+        if (cmdindex > 0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据
+            String cmd = cmd_msgbuf.substring(cmdindex);
+            cmd_msgbuf = cmd;
         }
-        cmdindex=cmd_msgbuf.indexOf(CMDEND);
-        if(cmdindex>0){
-            String cmd=cmd_msgbuf.substring(0,cmdindex);
-            cmd_msgbuf=cmd;
+        cmdindex = cmd_msgbuf.indexOf(CMDEND);
+        if (cmdindex > 0) {
+            String cmd = cmd_msgbuf.substring(0, cmdindex);
+            cmd_msgbuf = cmd;
         }
-        cmdindex=cmd_msgbuf.indexOf(CMDSPLIT);
-        if(cmdindex>0){
-            String cmd=cmd_msgbuf.substring(0,cmdindex);
-            cmd_msgbuf=cmd;
+        cmdindex = cmd_msgbuf.indexOf(CMDSPLIT);
+        if (cmdindex > 0) {
+            String cmd = cmd_msgbuf.substring(0, cmdindex);
+            cmd_msgbuf = cmd;
         }
-        if (cmdbuf.toString().split(CMDCOMPANY+CMDHEADERSPLIT).length>1)
-        {
+        if (cmdbuf.toString().split(CMDCOMPANY + CMDHEADERSPLIT).length > 1) {
             ICLogger.i("More than 1 cmd in buffer ! just log it");
         }
-            for (CMD_TYPE key : cmdMap.keySet()) {
-               // ICLogger.i("key "+cmdMap.get(key)+" cmdbuf "+cmd_msgbuf);
-                if (regexUtil.isFZDCMD(cmdMap.get(key),cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动
-                    String data=cmdbuf.toString().replace(CMDHEADER,"").replace(cmd_msgbuf,"").replace(CMDEND,"");
+        for (CMD_TYPE key : cmdMap.keySet()) {
+            // ICLogger.i("key "+cmdMap.get(key)+" cmdbuf "+cmd_msgbuf);
+            if (regexUtil.isFZDCMD(cmdMap.get(key), cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动
+                String data = cmdbuf.toString().replace(CMDHEADER, "").replace(cmd_msgbuf, "").replace(CMDEND, "");
 //                    ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " ,  " + cmdbuf.toString() + "  "+cmd_msgbuf  + " data "+data );
 //                    if (key == CMD_TYPE.TK) {
 //                        //如果是BP28则 后面的数据是音频,需要保留
@@ -276,63 +263,66 @@ public class protocol_fzd {
 //                            handleCmd(key, cmdlist[i], bytes);
 //                        }
 //                    } else {
-                        if (data.startsWith(CMDSPLIT)) data=data.substring(1);
-                        handleCmd(key, cmd_msgbuf,data);
-                        cmdbuf.delete(0,cmdbuf.length());//处理后清空
+                if (data.startsWith(CMDSPLIT)) data = data.substring(1);
+                handleCmd(key, cmd_msgbuf, data);
+                cmdbuf.delete(0, cmdbuf.length());//处理后清空
 //                    }
-                }
             }
+        }
         return true;
     }
 
-    private static String getHexLen(int len){
-        StringBuilder sb=new StringBuilder();
+    private static String getHexLen(int len) {
+        StringBuilder sb = new StringBuilder();
         int v = len & 0xFFFF;
         String hv = Integer.toHexString(v);
-        if (hv.length() ==1 ) {
+        if (hv.length() == 1) {
             sb.append(0).append(0).append(0);
-        }else if (hv.length()==2){
+        } else if (hv.length() == 2) {
             sb.append(0).append(0);
-        }else if (hv.length()==3){
+        } else if (hv.length() == 3) {
             sb.append(0);
         }
         sb.append(hv);
         return sb.toString();
     }
-    private static String genHeader(int len,String cmd){
 
-        if (CoreService.getInstance()==null)
+    private static String genHeader(int len, String cmd) {
+
+        if (CoreService.getInstance() == null)
             return "";
 
-        String imei =CoreService.getInstance().getRuntime().IMEI();
+        String imei = CoreService.getInstance().getRuntime().IMEI();
         return new StringBuilder().append(CMDCOMPANY).append(CMDHEADERSPLIT)
                 .append(imei).append(CMDHEADERSPLIT)
                 .append(getHexLen(len)).append(CMDHEADERSPLIT).append(cmd).toString();
     }
 
-    private static String keyheader(String cmd,int len){
-        String header=genHeader(len,cmd);
-        String key= MD5.getCMDStringMD5(header+PrivKEY);
+    private static String keyheader(String cmd, int len) {
+        String header = genHeader(len, cmd);
+        String key = MD5.getCMDStringMD5(header + PrivKEY);
         return key;
     }
 
-    public static StringMessage genFZDCMD( String CMD){
-        StringBuilder sb=new StringBuilder();
-        int len=CMD.length();
-        String header=genHeader(len,CMD);
-        String keyheader=keyheader(CMD,len);
+    public static StringMessage genFZDCMD(String CMD) {
+        StringBuilder sb = new StringBuilder();
+        int len = CMD.length();
+        String header = genHeader(len, CMD);
+        String keyheader = keyheader(CMD, len);
         sb.append(CMDHEADER).append(keyheader).append(header).append(CMDEND);
-        return genStringMessage(CMD,sb.toString());
+        return genStringMessage(CMD, sb.toString());
     }
-    public static StringMessage genFZDCMD( String CMD,String data){
-        StringBuilder sb=new StringBuilder();
-        String data_buf=CMD+CMDSPLIT+data;
-        int data_buf_len=data_buf.length();
-        String header=genHeader(data_buf_len,CMD);
-        String keyheader=keyheader(CMD,data_buf_len);//计算header md5值
+
+    public static StringMessage genFZDCMD(String CMD, String data) {
+        StringBuilder sb = new StringBuilder();
+        String data_buf = CMD + CMDSPLIT + data;
+        int data_buf_len = data_buf.length();
+        String header = genHeader(data_buf_len, CMD);
+        String keyheader = keyheader(CMD, data_buf_len);//计算header md5值
         sb.append(CMDHEADER).append(keyheader).append(header).append(CMDSPLIT).append(data).append(CMDEND);
-        return genStringMessage(CMD,sb.toString());
+        return genStringMessage(CMD, sb.toString());
     }
+
     /*登录*/
     public static StringMessage LK() {
         /*IC*YYYYYYYYYYYYYYY*LEN*LK*/
@@ -341,14 +331,14 @@ public class protocol_fzd {
 
     /**
      * 绑定
-     * */
-    public static StringMessage PING(){
+     */
+    public static StringMessage PING() {
 //        IC*YYYYYYYYYYYYYYY*LEN*PING
         return genFZDCMD(cmdMap.get(CMD_TYPE.PING));
     }
 
 
-    public static void handlePing(Runtime runtime,String data){
+    public static void handlePing(Runtime runtime, String data) {
 //        [IC*YYYYYYYYYYYYYYY*LEN*PING,是否绑定(0 表示未绑定,1 表示绑定)]
 //        实例:[IC*334588000000156*0006*PING,0]或[IC*334588000000156*0006*PING,1]
         try {
@@ -360,45 +350,44 @@ public class protocol_fzd {
                 ICLogger.i("设备已绑定!");
                 runtime.BindingStatus = true;
             }
-        }catch (Exception e){
-            ICLogger.e(e.getMessage(),e);
+        } catch (Exception e) {
+            ICLogger.e(e.getMessage(), e);
         }
 
     }
 
-    public static StringMessage KA(Runtime runtime){
+    public static StringMessage KA(Runtime runtime) {
 //[IC*YYYYYYYYYYYYYYY*LEN*KA,日期,步数,翻滚次数,电量百分数] 实例:[IC*334588000000156*0014*KA,120414,50,100,100]
-        StringBuilder sb=new StringBuilder();
-        String cmd=cmdMap.get(CMD_TYPE.KA);
+        StringBuilder sb = new StringBuilder();
+        String cmd = cmdMap.get(CMD_TYPE.KA);
         sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
-        .append(runtime.getTotalStepCount()).append(CMDSPLIT)
-        .append(runtime.getRolltimes()).append(CMDSPLIT)
-        .append(runtime.getBattery());
-        return genFZDCMD(cmd,sb.toString());
+                .append(runtime.getTotalStepCount()).append(CMDSPLIT)
+                .append(runtime.getRolltimes()).append(CMDSPLIT)
+                .append(runtime.getBattery());
+        return genFZDCMD(cmd, sb.toString());
     }
 
 
-    public void handleKA(Runtime runtime,String data){
+    public void handleKA(Runtime runtime, String data) {
 
     }
-    public static StringMessage CENTER(Runtime runtime){
+
+    public static StringMessage CENTER(Runtime runtime) {
         return genFZDCMD(cmdMap.get(CMD_TYPE.CENTER));
     }
 
 
-    public void handleCENTER(Connection connection,Runtime runtime,String cmd,String data){
-            connection.send(CENTER(runtime));
+    public void handleCENTER(Connection connection, Runtime runtime, String cmd, String data) {
+        connection.send(CENTER(runtime));
     }
 
 
-
-
-    public static StringMessage SILENCETIME2(Runtime runtime){
+    public static StringMessage SILENCETIME2(Runtime runtime) {
         return genFZDCMD(cmdMap.get(CMD_TYPE.SILENCETIME2));
     }
 
 
-    public void handleSILENCETIME2(Connection connection,Runtime runtime,String cmd,String data){
+    public void handleSILENCETIME2(Connection connection, Runtime runtime, String cmd, String data) {
         /**
          * 上课禁用时间段设置 2
          *size 60 [IC*860314001000466*0022*SILENCETIME2,10:03-16:00-1-0111110]
@@ -416,74 +405,74 @@ public class protocol_fzd {
          * 关于自定义星期几的规则:最左边是周日,最右边是周六,即 0111110 的顺序是:周日,周一,周二,周三,周四,周五,周六(1 为打开,0 为关闭),所以上面的意思是周一至周五打开上课禁用。
          */
         connection.send(SILENCETIME2(runtime));
-        String[] silent_items=data.split(",");
-        ArrayList<Silent> slist=new ArrayList<>();
-        if (silent_items.length>0){
-            for(String si:silent_items){
-              String[]  sl=si.split("-");
-              if(sl.length==4)
-              {
-                  String start,end,status;
-                  start="ST"+sl[0];
-                  end="ST"+sl[1];
-                  status=sl[2].equals("1")?"ON":"OFF";
-                  char[] week=sl[3].toCharArray();
-                  StringBuilder week_sb=new StringBuilder();
-                  for (int i=0;i<week.length;i++){
-                      if(week[i]=='1'){
-                          week_sb.append(i+1);
-                      }
-                  }
-                  Silent silent=new Silent(start,end, week_sb.toString(),status);
-                  slist.add(silent);
-                  ICLogger.i("set silence "+start +" " + end + " "+ week_sb.toString()+ " "+status);
-              }else{
-                  ICLogger.i("免打扰时间格式错误,skip");
-              }
+        String[] silent_items = data.split(",");
+        ArrayList<Silent> slist = new ArrayList<>();
+        if (silent_items.length > 0) {
+            for (String si : silent_items) {
+                String[] sl = si.split("-");
+                if (sl.length == 4) {
+                    String start, end, status;
+                    start = "ST" + sl[0];
+                    end = "ST" + sl[1];
+                    status = sl[2].equals("1") ? "ON" : "OFF";
+                    char[] week = sl[3].toCharArray();
+                    StringBuilder week_sb = new StringBuilder();
+                    for (int i = 0; i < week.length; i++) {
+                        if (week[i] == '1') {
+                            week_sb.append(i + 1);
+                        }
+                    }
+                    Silent silent = new Silent(start, end, week_sb.toString(), status);
+                    slist.add(silent);
+                    ICLogger.i("set silence " + start + " " + end + " " + week_sb.toString() + " " + status);
+                } else {
+                    ICLogger.i("免打扰时间格式错误,skip");
+                }
             }
         }
 
         runtime.getDbHelper().saveSilent(slist);
 
     }
+
     public static StringMessage LGZONE(Runtime runtime) {
-       return genFZDCMD(cmdMap.get(CMD_TYPE.LGZONE));
+        return genFZDCMD(cmdMap.get(CMD_TYPE.LGZONE));
     }
-    public void handleLGZONE(Runtime runtime, String data){
+
+    public void handleLGZONE(Runtime runtime, String data) {
 
         /***
          *  平台回复:[XT*YYYYYYYYYYYYYYY*LEN*LGZONE,时区,时间,日期]
          *  实例: [XT*1234567890*001D*LGZONE,+8,08:00:00,2016-01-12]
          */
-        String[] list=data.split(CMDSPLIT);
-        if (list.length==3){
-            String timeZone=list[0].trim();
-            String date=list[2].trim();
-            String time=list[1].trim();
-            Date datetime= TimeUtil.parseDatetiime(date,time);
+        String[] list = data.split(CMDSPLIT);
+        if (list.length == 3) {
+            String timeZone = list[0].trim();
+            String date = list[2].trim();
+            String time = list[1].trim();
+            Date datetime = TimeUtil.parseDatetiime(date, time);
 
             int timezone;
-            try
-            {
-                timezone=Integer.parseInt(timeZone.replace("+","").trim());
-            }catch (Exception e){
-                ICLogger.e("timezone",e);
-                timezone=8;
+            try {
+                timezone = Integer.parseInt(timeZone.replace("+", "").trim());
+            } catch (Exception e) {
+                ICLogger.e("timezone", e);
+                timezone = 8;
             }
 
-            if (datetime!=null){
-                ICLogger.i("==="+timezone+" "+TimeUtil.getDefaultTimeZone());
+            if (datetime != null) {
+                ICLogger.i("===" + timezone + " " + TimeUtil.getDefaultTimeZone());
                 TimeUtil.setTimeZone(timezone);
 
 
-                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());
-                TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone,false);
-                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());
+                ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
+                TimeUtil.setSysDateTime(runtime.getContextProxy().context, datetime, timezone, false);
+                ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
             }
 //            Set Datetime 20200505112734
 //            Set TimeZone 8
 
-        }else{
+        } else {
             ICLogger.i("LGZONE Format Error!");
         }
 
@@ -523,12 +512,12 @@ public class protocol_fzd {
          */
 
 
-        StringBuilder sb=new StringBuilder();
-        String cmd=cmdMap.get(CMD_TYPE.UD);
+        StringBuilder sb = new StringBuilder();
+        String cmd = cmdMap.get(CMD_TYPE.UD);
         sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
                 .append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT)
                 .append(runtime.getFZDGPSData()).append(CMDSPLIT)
-                .append(String.format("%03d",abs(runtime.getSignalStrength()))).append(CMDSPLIT)
+                .append(String.format("%03d", abs(runtime.getSignalStrength()))).append(CMDSPLIT)
                 .append(runtime.getBattery()).append(CMDSPLIT)
                 .append(runtime.getTotalStepCount()).append(CMDSPLIT)
                 .append(runtime.getRolltimes()).append(CMDSPLIT)
@@ -536,7 +525,7 @@ public class protocol_fzd {
                 .append(runtime.getFZDLBSMultiStationData()).append(CMDSPLIT)
                 .append(runtime.getFZDWifiData());
 
-        return genFZDCMD(cmd,sb.toString());
+        return genFZDCMD(cmd, sb.toString());
     }
 
 
@@ -561,14 +550,14 @@ public class protocol_fzd {
 //        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);
+        ICLogger.i("Wifi ap sum " + apsum);
         return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.LK)).append(CMDSPLIT)
                 .append(ds.getLanguage()).append(CMDSPLIT)
                 .append(0).append(CMDSPLIT) //为0时不回复地址
@@ -577,12 +566,12 @@ public class protocol_fzd {
     }
 
     //处理 定位 BP01
-    public void handleUD2(String cmd){
+    public void handleUD2(String cmd) {
         log("BP02定位接收成功");
     }
 
 
-    public static StringMessage AL(Runtime runtime){
+    public static StringMessage AL(Runtime runtime) {
         /***
          * [IC*334588000000156*00CD*AL,180916,064153,A,22.570512,N,113.8623267,E,0.00,154.8,0.0,11,10 0,100,0,0,00100018,7,0,460,1,9529,21809,155,9529,21242,132,9529,21405,131,9529,63554,131,9
          * 529,63555,130,9529,63556,118,9529,21869,116,0,12.4]
@@ -592,12 +581,12 @@ public class protocol_fzd {
          * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止.
          */
 
-        StringBuilder sb=new StringBuilder();
-        String cmd=cmdMap.get(CMD_TYPE.AL);
+        StringBuilder sb = new StringBuilder();
+        String cmd = cmdMap.get(CMD_TYPE.AL);
         sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
                 .append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT)
                 .append(runtime.getFZDGPSData()).append(CMDSPLIT)
-                .append(String.format("%03d",abs(runtime.getSignalStrength()))).append(CMDSPLIT)
+                .append(String.format("%03d", abs(runtime.getSignalStrength()))).append(CMDSPLIT)
                 .append(runtime.getBattery()).append(CMDSPLIT)
                 .append(runtime.getTotalStepCount()).append(CMDSPLIT)
                 .append(runtime.getRolltimes()).append(CMDSPLIT)
@@ -605,16 +594,16 @@ public class protocol_fzd {
                 .append(runtime.getFZDLBSMultiStationData()).append(CMDSPLIT)
                 .append(runtime.getFZDWifiData());
 
-        return genFZDCMD(cmd,sb.toString());
+        return genFZDCMD(cmd, sb.toString());
     }
 
-    public static StringMessage UPLOAD(){
+    public static StringMessage UPLOAD() {
 
-        return  genFZDCMD(cmdMap.get(CMD_TYPE.UPLOAD));
+        return genFZDCMD(cmdMap.get(CMD_TYPE.UPLOAD));
     }
 
-    public void handleUPLOAD(Connection connection,Runtime runtime,String cmd,String data){
-            connection.send(UPLOAD());
+    public void handleUPLOAD(Connection connection, Runtime runtime, String cmd, String data) {
+        connection.send(UPLOAD());
         try {
             int timesecond = Integer.parseInt(data);
             int mod = runtime.getLocationInstance().getWorkingMod();
@@ -625,51 +614,60 @@ public class protocol_fzd {
             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 static StringMessage heart(int hrt){
-        return genFZDCMD(cmdMap.get(CMD_TYPE.heart),String.valueOf(hrt));
+    public static StringMessage heart(int hrt) {
+        return genFZDCMD(cmdMap.get(CMD_TYPE.heart), String.valueOf(hrt));
     }
-    public static StringMessage oxygen(int ox){
-        return genFZDCMD(cmdMap.get(CMD_TYPE.oxygen),String.valueOf(ox));
+
+    public static StringMessage oxygen(int ox) {
+        return genFZDCMD(cmdMap.get(CMD_TYPE.oxygen), String.valueOf(ox));
     }
 
-    public static StringMessage blood(int pbl,int pbh){
-        String data=pbh+CMDSPLIT+pbl;
-        return genFZDCMD(cmdMap.get(CMD_TYPE.blood),data);
+    public static StringMessage blood(int pbl, int pbh) {
+        String data = pbh + CMDSPLIT + pbl;
+        return genFZDCMD(cmdMap.get(CMD_TYPE.blood), data);
     }
 
-    public static StringMessage temp(double temp){
-        return genFZDCMD(cmdMap.get(CMD_TYPE.temp),String.format("%.1f",temp));
+    public static StringMessage temp(double temp) {
+        return genFZDCMD(cmdMap.get(CMD_TYPE.temp), String.format("%.1f", temp));
     }
-    public static StringMessage POWEROFF(){
+
+    public static StringMessage POWEROFF() {
         return genFZDCMD(cmdMap.get(CMD_TYPE.POWEROFF));
     }
+
     public void handlePOWEROFF(Connection connection) {
 
         connection.send(POWEROFF());
     }
-    public static StringMessage CR(){
+
+    public static StringMessage CR() {
         return genFZDCMD(cmdMap.get(CMD_TYPE.CR));
     }
+
     public void handleCR(Connection connection) {
 
         connection.send(CR());
     }
-    public static StringMessage bldstart(){
+
+    public static StringMessage bldstart() {
         return genFZDCMD(cmdMap.get(CMD_TYPE.bldstart));
     }
+
     public void handleBldstart(Connection connection) {
 
         connection.send(bldstart());
     }
-    public static StringMessage wdstart(){
+
+    public static StringMessage wdstart() {
         return genFZDCMD(cmdMap.get(CMD_TYPE.wdstart));
     }
-    public void handleWdstart(Connection connection,Runtime runtime ,String data) {
+
+    public void handleWdstart(Connection connection, Runtime runtime, String data) {
 
         connection.send(wdstart());
         try {
@@ -679,9 +677,10 @@ public class protocol_fzd {
             Config.setTemperatureTestCycle(runtime, freq);
             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.getInstance().doTempTestInThread(FROM_SERVER);
+        } catch (Exception e) {
+            ICLogger.e(e.getMessage(), e);
         }
 //
 //        double wrist_temp,body_temp;
@@ -690,63 +689,66 @@ public class protocol_fzd {
 //        String temperatureMsg=temp(body_temp);
 //        connection.send(genStringMessage("temp",temperatureMsg));
     }
-    public static StringMessage hrtstart(){
+
+    public static StringMessage hrtstart() {
         return genFZDCMD(cmdMap.get(CMD_TYPE.hrtstart));
     }
+
     public void handleHrtstart(Connection connection) {
 
         connection.send(hrtstart());
     }
-    public static StringMessage FIND(){
+
+    public static StringMessage FIND() {
         return genFZDCMD(cmdMap.get(CMD_TYPE.FIND));
     }
+
     public void handleFIND(Connection connection) {
 
         connection.send(FIND());
     }
-    public static StringMessage SOS(){
+
+    public static StringMessage SOS() {
         return genFZDCMD(cmdMap.get(CMD_TYPE.SOS));
     }
 
 
-    public void handleSOS(Connection connection,Runtime runtime,String cmd,String data) {
+    public void handleSOS(Connection connection, Runtime runtime, String cmd, String data) {
 
         connection.send(SOS());
-        if (data!=null && data.length()>0) {
+        if (data != null && data.length() > 0) {
             String list[] = data.split(CMDSPLIT);
-            if (list.length==1){
-                ArrayList<Contact> contactArray=new ArrayList<Contact>();
-                if (regexUtil.isMobileNumber( list[0]) || regexUtil.isPhoneNumber(list[0]))
-               {
-                   contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos1",list[0]));
-                   ICLogger.i("find SOS1 number "+list[0]);
-               }
-            }else if (list.length==2){
-
-                ArrayList<Contact> contactArray=new ArrayList<Contact>();
-                if (regexUtil.isMobileNumber( list[0]) || regexUtil.isPhoneNumber(list[0]))
-                {
-                    contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos1",list[0]));
-                    ICLogger.i("find SOS1 number "+list[0]);
+            if (list.length == 1) {
+                ArrayList<Contact> contactArray = new ArrayList<Contact>();
+                if (regexUtil.isMobileNumber(list[0]) || regexUtil.isPhoneNumber(list[0])) {
+                    contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", list[0]));
+                    ICLogger.i("find SOS1 number " + list[0]);
+                }
+            } else if (list.length == 2) {
+
+                ArrayList<Contact> contactArray = new ArrayList<Contact>();
+                if (regexUtil.isMobileNumber(list[0]) || regexUtil.isPhoneNumber(list[0])) {
+                    contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", list[0]));
+                    ICLogger.i("find SOS1 number " + list[0]);
                 }
-                if (regexUtil.isMobileNumber( list[1]) || regexUtil.isPhoneNumber(list[1]))
-                {
-                    contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos2",list[1]));
-                    ICLogger.i("find SOS2 number "+list[1]);
+                if (regexUtil.isMobileNumber(list[1]) || regexUtil.isPhoneNumber(list[1])) {
+                    contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", list[1]));
+                    ICLogger.i("find SOS2 number " + list[1]);
                 }
 
-                runtime.getDbHelper().saveContacts(contactArray,false,false,false,false,false,true);
+                runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
 
             }
         }
 
 
     }
-    public static StringMessage PHL(){
+
+    public static StringMessage PHL() {
         return genFZDCMD(cmdMap.get(CMD_TYPE.PHL));
     }
 
-    public void handlePHL(Connection connection,Runtime runtime,String cmd,String data){
+    public void handlePHL(Connection connection, Runtime runtime, String cmd, String data) {
         /***
          * [IC*334588000000156*len*PHL,号码,名字,号码,名字,号码,名字,号码,名字,号码,名字] len:发送长度 16 进制表示 占用 2 个字节
          * 号码:ascii 字符 名字:Unicode 编码
@@ -756,27 +758,27 @@ public class protocol_fzd {
          * 终端回复:[IC*334588000000156*0003*PHL]
          */
 
-            String list[]=data.split(CMDSPLIT);
-            int listlen=list.length;
-            boolean ispared=  (( listlen >=0) && (listlen%2 == 0));
-            if (ispared){
-                ArrayList<Contact> contactArray=new ArrayList<Contact>();
-                for(int i=0; i<listlen;i+=2){
-                    String phonem=list[i];
-                    String name = Util.decodeUnicode2Utf8(list[i+1]);
-                    ICLogger.i(i/2 +" 姓名 "+name+", 电话 "+phonem);
-                    contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));
-                }
+        String list[] = data.split(CMDSPLIT);
+        int listlen = list.length;
+        boolean ispared = ((listlen >= 0) && (listlen % 2 == 0));
+        if (ispared) {
+            ArrayList<Contact> contactArray = new ArrayList<Contact>();
+            for (int i = 0; i < listlen; i += 2) {
+                String phonem = list[i];
+                String name = Util.decodeUnicode2Utf8(list[i + 1]);
+                ICLogger.i(i / 2 + " 姓名 " + name + ", 电话 " + phonem);
+                contactArray.add(new Contact(Contact.CATEGORY_CALL, name, phonem));
+            }
 //            contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));
 //            contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));
 //            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);
-            }else{
-                ICLogger.i("没有电话本!执行清除操作!");
-            }
-            connection.send(PHL());
+            runtime.getDbHelper().saveContacts(contactArray, false, false, true, false, false, false);
+        } else {
+            ICLogger.i("没有电话本!执行清除操作!");
+        }
+        connection.send(PHL());
     }
 
     public void sendBroadcast(String cmd, Runtime dev) {
@@ -790,42 +792,42 @@ public class protocol_fzd {
         dev.getContextProxy().context.startActivity(intent);
     }
 
-    public static StringMessage PRACTICE(HealthInfo healthInfo){
-        if (healthInfo!=null && healthInfo.getInfoCount()>0)
-            return genFZDCMD(cmdMap.get(CMD_TYPE.PRACTICE),String.valueOf(healthInfo.getBufferDataStr()));
+    public static StringMessage PRACTICE(HealthInfo healthInfo) {
+        if (healthInfo != null && healthInfo.getInfoCount() > 0)
+            return genFZDCMD(cmdMap.get(CMD_TYPE.PRACTICE), String.valueOf(healthInfo.getBufferDataStr()));
         else
             return null;
     }
 
-    public boolean handleCmd(CMD_TYPE type, String cmd , String data) {
+    public boolean handleCmd(CMD_TYPE type, String cmd, String data) {
 
         //普通非二进制命令用此函数处理
-        boolean ret=true;
-        ICLogger.i("handleCmd "+type.name() + " strLen="+data.length());
-        if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd +" "+ data);
-        switch (type){
+        boolean ret = true;
+        ICLogger.i("handleCmd " + type.name() + " strLen=" + data.length());
+        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + cmd + " " + data);
+        switch (type) {
             case LK: //登录包
                 ICLogger.i("服务器收到登录包LK");
-                mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化
                 break;
             case KA:
                 ICLogger.i("服务器收到心跳包KA");
-                mConnection.DeliverCMDMessageToSystem("heartbeat",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("heartbeat", cmd);//通知下面线程状态变化
                 break;
             case AL:
-                mConnection.DeliverCMDMessageToSystem("AL",cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("AL", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
                 break;
             case PRACTICE:
-                mConnection.DeliverCMDMessageToSystem("PRACTICE",cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("PRACTICE", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
                 break;
             case PING:
-                handlePing(mRuntime,data);
+                handlePing(mRuntime, data);
                 ICLogger.i("服务器返回Ping绑定信息");
                 break;
             case CR:
                 //立即定位指令(长链接有效)
                 handleCR(mConnection);
-                mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("StartLocate", cmd);//通知下面线程状态变化
                 break;
 
 //            case BP07:
@@ -850,8 +852,8 @@ public class protocol_fzd {
 //                break;
             case UPLOAD:
                 //设置工作模式
-                handleUPLOAD(mConnection,mRuntime,cmd,data);
-                mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化
+                handleUPLOAD(mConnection, mRuntime, cmd, data);
+                mConnection.DeliverCMDMessageToSystem("setWorkMod", cmd);//通知下面线程状态变化
 //
 //                break;
 //            case BP34:
@@ -867,13 +869,13 @@ public class protocol_fzd {
 //
             case SOS:
                 //收到设置SOS号码
-                handleSOS(mConnection,mRuntime,cmd,data);
+                handleSOS(mConnection, mRuntime, cmd, data);
                 ICLogger.i("收到服务器设置SOS号码命令SOS");
                 break;
             case PHL:
                 //收到设置白名单号码
                 ICLogger.i("收到服务器设置白名单号码命令PHL");
-                handlePHL(mConnection,mRuntime,cmd,data);
+                handlePHL(mConnection, mRuntime, cmd, data);
                 break;
 //            case BP15:
 //                handleBP15(cmd,mConnection,mRuntime);
@@ -897,7 +899,7 @@ public class protocol_fzd {
                 //收到关机
                 handlePOWEROFF(mConnection);
                 ICLogger.i("收到服务器关机命令BP31");
-                mConnection.DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("poweroff", cmd);//通知下面线程状态变化
                 break;
 //            case BP40:
 //                //服务器推送文本
@@ -909,49 +911,51 @@ public class protocol_fzd {
             case hrtstart:
                 handleHrtstart(mConnection);
                 ICLogger.i("收到服务器心率检测命令");
-                if(mRuntime.check_stat_do_ppg_test()) HeartRateManager.triggerPPGtest();
+                if (mRuntime.check_stat_do_ppg_test())
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
                 break;
             case bldstart:
                 handleBldstart(mConnection);
                 ICLogger.i("收到服务器血压检测命令");
-                if(mRuntime.check_stat_do_ppg_test()) HeartRateManager.triggerPPGtest();
+                if (mRuntime.check_stat_do_ppg_test())
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
                 break;
             case wdstart:
-                handleWdstart(mConnection,mRuntime,data);
+                handleWdstart(mConnection, mRuntime, data);
                 ICLogger.i("收到服务器体温测试及设置命令");
                 break;
             case blood:
                 ICLogger.i("服务器收到上传的血压");
-                mConnection.DeliverCMDMessageToSystem("blood",cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("blood", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
                 break;
             case oxygen:
                 ICLogger.i("服务器收到上传的血氧");
-                mConnection.DeliverCMDMessageToSystem("oxygen",cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("oxygen", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
                 break;
             case temp:
                 ICLogger.i("服务器收到上传的体温");
-                mConnection.DeliverCMDMessageToSystem("temp",cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("temp", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
                 break;
             case heart:
                 ICLogger.i("服务器收到上传的心率heart");
-                mConnection.DeliverCMDMessageToSystem("heart",cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("heart", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
                 break;
             case LGZONE:
-                ICLogger.i("收到服务器时间 LGZONE "+data);
-                handleLGZONE(mRuntime,data);
+                ICLogger.i("收到服务器时间 LGZONE " + data);
+                handleLGZONE(mRuntime, data);
                 break;
 
             case CENTER:
-                handleCENTER(mConnection,mRuntime,cmd,data);
+                handleCENTER(mConnection, mRuntime, cmd, data);
                 break;
             case SILENCETIME2:
-                handleSILENCETIME2(mConnection,mRuntime,cmd,data);
+                handleSILENCETIME2(mConnection, mRuntime, cmd, data);
                 break;
 
             case FIND:
                 //收到查找设备消息
                 handleFIND(mConnection);
-                mConnection.DeliverCMDMessageToSystem("findDev",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("findDev", cmd);//通知下面线程状态变化
                 break;
 //            case BP89:
 //                //心率/血压阀值
@@ -1011,12 +1015,12 @@ public class protocol_fzd {
 
         //只有需要传递二级制数据的才需要这个函数,目前只有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 LK:
-            //    handleBP28(mConnection,cmd, mRuntime,bytes);
+                //    handleBP28(mConnection,cmd, mRuntime,bytes);
                 ICLogger.i("收到服务器语音BP28");
                 mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化
                 break;
index 4994478..3b97017 100644 (file)
@@ -42,6 +42,7 @@ 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.DIALOG_ACTION;
+import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
 import static java.lang.Math.abs;
@@ -374,8 +375,8 @@ public class protocol_ic {
         String[] cmdlist = cmd_msgbuf.split(CMDEND);
         int listlen = cmdlist.length;
         log("listlen " + listlen);
-         /*
-        如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd
+        /**
+         * 如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd
          */
         if (cmdlist.length > 0 && iscmdComplete == false) {
             listlen -= 1;
@@ -1152,7 +1153,7 @@ public class protocol_ic {
         if (cmdlist.length == 4) {
 
 
-            log("work mode " + cmdlist[3]);
+            log("com.ic.work mode " + cmdlist[3]);
             try {
                 int mod = Integer.parseInt(cmdlist[3]);
                 int Cycle = 900;
@@ -1213,7 +1214,7 @@ public class protocol_ic {
         if (cmdlist.length == 6) {
 
 
-            log("work mode " + cmdlist[3]);
+            log("com.ic.work mode " + cmdlist[3]);
             try {
                 int mod = Integer.parseInt(cmdlist[3]);
                 int Cycle = Integer.parseInt(cmdlist[4]);
@@ -1833,7 +1834,6 @@ public class protocol_ic {
     }
 
     public void handleBPTE(String cmd, Connection connection, Runtime runtime) {
-
         //示例:
         //IWBPTE,353456789012345,080835,60#
         //说明:
@@ -1852,9 +1852,8 @@ public class protocol_ic {
                 ICLogger.i("收到服务器指令:测量体温 " + freq + "分钟一次。");
                 Config.setTemperatureTestCycle(runtime, freq * 60);
                 CoreService.getInstance().setTempAlarm();
-
-
-                if (runtime.check_stat_do_temp_test()) TemperatureUtil.doTempTestInThread();
+                if (runtime.check_stat_do_temp_test())
+                    TemperatureUtil.getInstance().doTempTestInThread(FROM_SERVER);
             } catch (Exception e) {
                 ICLogger.e(e.getMessage(), e);
             }
@@ -3087,12 +3086,14 @@ public class protocol_ic {
             case BPXL:
                 handleBPXL(cmd, mConnection);
                 ICLogger.i("收到服务器心率检测命令");
-                if (mRuntime.check_stat_do_ppg_test()) HeartRateManager.triggerPPGtest();
+                if (mRuntime.check_stat_do_ppg_test())
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
                 break;
             case BPXY:
                 handleBPXY(cmd, mConnection);
                 ICLogger.i("收到服务器血压检测命令");
-                if (mRuntime.check_stat_do_ppg_test()) HeartRateManager.triggerPPGtest();
+                if (mRuntime.check_stat_do_ppg_test())
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
                 break;
             case BPJZ:
                 handleBPJZ(cmd, mConnection, mRuntime);
index 243f056..ad82be4 100644 (file)
@@ -1,17 +1,12 @@
 package com.ic.protocols;
 
 import android.content.ComponentName;
-import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
-import android.os.Build;
 import android.os.Environment;
-import android.support.annotation.RequiresApi;
-import android.text.TextUtils;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
-import com.enqualcomm.support.R;
 import com.enqualcomm.support.bean.Alarm;
 import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.Content;
@@ -33,6 +28,7 @@ import java.util.Date;
 import java.util.HashMap;
 
 import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;
+import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
 import static java.lang.Math.abs;
@@ -43,8 +39,8 @@ public class protocol_jiai {
     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 {
         /*终端发起*/
@@ -206,12 +202,12 @@ public class protocol_jiai {
         cmdMap.put(CMD_TYPE.BPLA, "BPLA");
     }
 
-    private Connection mConnection=null;
-    private Runtime mRuntime=null;
+    private Connection mConnection = null;
+    private Runtime mRuntime = null;
 
-    public protocol_jiai(Connection connect,Runtime runtime) {
-        mConnection=connect;
-        mRuntime=runtime;
+    public protocol_jiai(Connection connect, Runtime runtime) {
+        mConnection = connect;
+        mRuntime = runtime;
 
     }
 
@@ -230,7 +226,7 @@ public class protocol_jiai {
 
                 return "";
             }
-        }else{
+        } else {
             return "";
         }
 
@@ -243,6 +239,7 @@ public class protocol_jiai {
 
         return "";
     }
+
     private void log(String msg) {
         ICLogger.log(TAG, msg);
     }
@@ -252,14 +249,14 @@ public class protocol_jiai {
     }
 
 
-
     /**/
-    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,下一次识别接着使用
@@ -270,11 +267,11 @@ public class protocol_jiai {
         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());
     /*
         如果不是 #结尾,就认为 接收数据不全,置位。
          */
@@ -283,7 +280,7 @@ public class protocol_jiai {
         }
         String[] cmdlist = cmd_msgbuf.split(CMDEND);
         int listlen = cmdlist.length;
-        log("listlen "+listlen);
+        log("listlen " + listlen);
          /*
         如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd
          */
@@ -299,7 +296,7 @@ public class protocol_jiai {
                     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);
                         }
@@ -313,6 +310,7 @@ public class protocol_jiai {
         cmdbuf = new StringBuffer().append(last_inCompletecmd);
         return ret;
     }
+
     public int getBP28Amrlen(String cmd) {
 
         String Name;
@@ -322,8 +320,8 @@ public class protocol_jiai {
         int packetLen;
 
 
-        String[] msg=cmd.split(CMDSPLIT);
-        if (msg.length>=6){
+        String[] msg = cmd.split(CMDSPLIT);
+        if (msg.length >= 6) {
 
             try {
                 Name = msg[1];
@@ -342,28 +340,29 @@ public class protocol_jiai {
 
                 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]);
 
@@ -382,30 +381,31 @@ public class protocol_jiai {
                 }
 //            Set Datetime 20200505112734
 //            Set TimeZone 8
-            }catch (Exception e){
-                ICLogger.e(e.getMessage(),e);
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
             }
-        }else{
-            log("handleBP00","format Error");
+        } else {
+            log("handleBP00", "format Error");
         }
     }
 
 
     public static StringMessage AP03(Runtime ds) {
         //示例数据:IWAP03,06000908000102,5555,30#  IWAP03,000000null00000,0,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())))
+        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("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.1  061830  323.87  060 009 080 0 05 02,
@@ -428,8 +428,8 @@ public class protocol_jiai {
          * zh-cn:设备语言
          * 00:第一个0:是否需要回复地址信息,0:不回复,1回复.
          */
-        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())))
+        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(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")
                 .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)
                 .append(ds.getLBSData()).append(CMDSPLIT)
@@ -446,20 +446,19 @@ public class protocol_jiai {
         // 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,
@@ -481,15 +480,15 @@ public class protocol_jiai {
 //        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)  //基站信息数据
@@ -497,26 +496,26 @@ public class protocol_jiai {
     }
 
     //处理 定位 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("APXL",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))
+        return genStringMessage("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:标识符
@@ -525,32 +524,33 @@ public class protocol_jiai {
         //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("APXY",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))
+        return genStringMessage("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:标识符
@@ -559,25 +559,24 @@ public class protocol_jiai {
         //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("APJZ",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ))
+        return genStringMessage("APJZ", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ))
                 .append(CMDSPLIT).append(id)
                 .append(CMDSPLIT).append(BPH)
                 .append(CMDSPLIT).append(BPL)
@@ -587,12 +586,11 @@ public class protocol_jiai {
     }
 
     /**
-     *
      * @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#
@@ -605,43 +603,42 @@ public class protocol_jiai {
         //080835 :指令流水号
         //设备响应:      IWAPJZ,792997,120,85,42,1#
         //792997:指令流水号
-        String[] list=cmd.split(CMDSPLIT);
-        if (list.length==7){
-            String index=list[2];
-            String imei=list[1];
-            String strBPH=list[3];
-            String strBPL=list[4];
-            String strAge=list[5];
-            String strSex=list[6];
-
-            connection.send(APJZ(index,strBPH,strBPL,strAge,strSex));
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 7) {
+            String index = list[2];
+            String imei = list[1];
+            String strBPH = list[3];
+            String strBPL = list[4];
+            String strAge = list[5];
+            String strSex = list[6];
+
+            connection.send(APJZ(index, strBPH, strBPL, strAge, strSex));
             try {
                 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("AP18",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18))
+    public static StringMessage AP18(String index) {
+        return genStringMessage("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]));
 
@@ -649,16 +646,17 @@ public class protocol_jiai {
     }
     //恢复出厂设置
 
-    public static StringMessage AP17(String index){
-        return genStringMessage("AP17",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17))
+    public static StringMessage AP17(String index) {
+        return genStringMessage("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]));
 
@@ -668,16 +666,17 @@ public class protocol_jiai {
     //关机
 
 
-    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]));
 
@@ -685,8 +684,8 @@ public class protocol_jiai {
     }
 
     //设置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)
@@ -695,32 +694,35 @@ public class protocol_jiai {
     }
 
     //设置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>();
-            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{
+        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 (!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 {
             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])
@@ -734,8 +736,9 @@ public class protocol_jiai {
                 .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,
@@ -750,57 +753,57 @@ public class protocol_jiai {
  * 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>();
-            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);
+            connection.send(AP14(index, phnums));
+            ArrayList<Contact> contactArray = new ArrayList<Contact>();
+            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);
 
                 }
             }
@@ -809,25 +812,25 @@ public class protocol_jiai {
 //            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
@@ -843,25 +846,25 @@ public class protocol_jiai {
 //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<>();
+        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){
+        if (datalist.length > 0) {
 
 
-            for (int i =0 ; i< datalist.length;i++){
-                String [] cmdarglist=datalist[i].split(",");
+            for (int i = 0; i < datalist.length; i++) {
+                String[] cmdarglist = datalist[i].split(",");
 
-                if (i == 0){
-                    if (cmdarglist.length == 9){
+                if (i == 0) {
+                    if (cmdarglist.length == 9) {
                         try {
                             imei = cmdarglist[1];
                             cmdindex = cmdarglist[2];
@@ -885,23 +888,23 @@ public class protocol_jiai {
                                     .toString()
                             );
                             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 if (cmdarglist.length == 5) {
+                    } 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);
+                        } catch (Exception e) {
+                            ICLogger.e(e.getMessage(), e);
                         }
-                    }else{
+                    } else {
                         log("data len is too small!");
                     }
-                }else{
-                    if (cmdarglist.length == 4){
+                } else {
+                    if (cmdarglist.length == 4) {
                         try {
                             alarmtime = cmdarglist[0];
                             repeat = cmdarglist[1];
@@ -916,10 +919,10 @@ public class protocol_jiai {
                             );
 
                             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!");
                     }
 
@@ -932,10 +935,10 @@ public class protocol_jiai {
         }
 //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));
     }
 
 
@@ -959,9 +962,7 @@ public class protocol_jiai {
 //    }
 
 
-
-
-    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:标识符
@@ -977,31 +978,31 @@ public class protocol_jiai {
 //如果设备回复确认数据包接收失败状态,则重复发送上一个数据包
 
 
-        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]);
@@ -1014,28 +1015,27 @@ public class protocol_jiai {
                 }
                 //发送消息,再次检查要发送的语音包,确认其发送完毕
                 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:标识符
@@ -1044,11 +1044,11 @@ public class protocol_jiai {
 //        080835:指令流水号
 //        1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式
 
-        String[] cmdlist=cmd.split(",");
-        if (cmdlist.length == 4){
+        String[] cmdlist = cmd.split(",");
+        if (cmdlist.length == 4) {
 
             try {
-                log("work mode " + cmdlist[3]);
+                log("com.ic.work mode " + cmdlist[3]);
                 int mod = Integer.parseInt(cmdlist[3]);
                 int Cycle = 900;
                 switch (mod) {
@@ -1076,26 +1076,26 @@ public class protocol_jiai {
                 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 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:标识符
@@ -1104,11 +1104,11 @@ public class protocol_jiai {
 //        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("com.ic.work mode " + cmdlist[3]);
             try {
                 int mod = Integer.parseInt(cmdlist[3]);
                 int Cycle = Integer.parseInt(cmdlist[4]);
@@ -1131,8 +1131,8 @@ public class protocol_jiai {
                 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);
             }
         }
 
@@ -1140,44 +1140,46 @@ public class protocol_jiai {
 
     /**
      * 心率上传,返回协议字串
+     *
      * @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());
 
     }
 
-/***
- * 9温度数据上传(上行协议号:AP50,响应:BP50)
- * 示例:
- * IWAP50,36.7,90#
- * 说明:
- * IW:标识符
- * AP50 : 命令字符
- * 36.7:温度
- * 90:电量
- * 平台响应:     IWBP50#
- * 说明:   本消息适用所有终端
- */
-public static StringMessage AP50(Runtime ds){
-    //示例数据:IWAP50,36.7,90#
-    return genStringMessage(cmdMap.get(CMD_TYPE.AP50),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP50))
-            .append(CMDSPLIT).append(ds.tempInfo.currentBodyTemp)
-            .append(CMDSPLIT).append("100")
-            .append(CMDEND).toString());
+    /***
+     * 9温度数据上传(上行协议号:AP50,响应:BP50)
+     * 示例:
+     * IWAP50,36.7,90#
+     * 说明:
+     * IW:标识符
+     * AP50 : 命令字符
+     * 36.7:温度
+     * 90:电量
+     * 平台响应: IWBP50#
+     * 说明:       本消息适用所有终端
+     */
+    public static StringMessage AP50(Runtime ds) {
+        //示例数据:IWAP50,36.7,90#
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP50), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP50))
+                .append(CMDSPLIT).append(ds.tempInfo.currentBodyTemp)
+                .append(CMDSPLIT).append("100")
+                .append(CMDEND).toString());
 
-}
+    }
 
     /**
      * 返回上传心率血压的协议字串
+     *
      * @param ds
      * @return
      */
-    public static StringMessage APHT(Runtime ds){
+    public static StringMessage APHT(Runtime ds) {
         //IWAPHT,60,130,85#
         //说明:
         //IW:标识符
@@ -1187,13 +1189,14 @@ public static StringMessage AP50(Runtime ds){
         //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:标识符
@@ -1203,13 +1206,14 @@ public static StringMessage AP50(Runtime ds){
         //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)
                 .append(CMDEND).toString());
     }
-    public static StringMessage APHP(Runtime ds){
+
+    public static StringMessage APHP(Runtime ds) {
         //IWAPHP,60,130,85,95,90, , , , , , , , #
         //IW:标识符
         //APHT : 命令字符
@@ -1219,7 +1223,7 @@ public static StringMessage AP50(Runtime ds){
         //95:血氧
         //90:血糖
 //        本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
-        return genStringMessage(cmdMap.get(protocol_ic.CMD_TYPE.APHP),new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_ic.CMD_TYPE.APHP))
+        return genStringMessage(cmdMap.get(protocol_ic.CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_ic.CMD_TYPE.APHP))
                 .append(CMDSPLIT).append(ds.getHRS().getPPG())
                 .append(CMDSPLIT).append(ds.getHRS().getBPH())
                 .append(CMDSPLIT).append(ds.getHRS().getBPL())
@@ -1235,7 +1239,8 @@ public static StringMessage AP50(Runtime ds){
                 .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 : 命令字符
@@ -1245,7 +1250,7 @@ public static StringMessage AP50(Runtime ds){
         //95:血氧
         //90:血糖
 //        本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
-        return genStringMessage(cmdMap.get(protocol_ic.CMD_TYPE.APHP),new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_ic.CMD_TYPE.APHP))
+        return genStringMessage(cmdMap.get(protocol_ic.CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_ic.CMD_TYPE.APHP))
                 .append(CMDSPLIT).append(ppg)
                 .append(CMDSPLIT).append(bph)
                 .append(CMDSPLIT).append(bpl)
@@ -1263,22 +1268,23 @@ public static StringMessage AP50(Runtime ds){
     }
 
 
-    public void handleBPHP(){
+    public void handleBPHP() {
 
         ICLogger.i("服务器收到APHP 心率血压血氧 !");
 
     }
 
     //立即定位反馈
-    public static StringMessage AP16(String  cmdindex){
+    public static StringMessage AP16(String cmdindex) {
 //IWAP16,080835#
 //080835:指令流水号
-        return genStringMessage("AP16",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16))
+        return genStringMessage("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#
 //        说明:
@@ -1287,18 +1293,18 @@ public static StringMessage AP50(Runtime ds){
 //        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:标识符
@@ -1308,7 +1314,7 @@ public static StringMessage AP50(Runtime ds){
         //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())
@@ -1317,43 +1323,43 @@ public static StringMessage AP50(Runtime ds){
 
     }
 
-    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){
+        if (list.length == 4) {
             try {
                 String index = list[2];
                 String time = list[3];
@@ -1366,24 +1372,20 @@ public static StringMessage AP50(Runtime ds){
                 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)
@@ -1393,7 +1395,7 @@ public static StringMessage AP50(Runtime ds){
     }
 
     //处理 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#
@@ -1424,8 +1426,8 @@ public static StringMessage AP50(Runtime ds){
         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];
                 appendIndex = msg[2];
@@ -1467,11 +1469,11 @@ public static StringMessage AP50(Runtime ds){
 
                     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)));
 
         }
@@ -1490,18 +1492,18 @@ public static StringMessage AP50(Runtime ds){
     }
 
     //白名单开关(下行协议号: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#
         //说明:
@@ -1510,21 +1512,21 @@ public static StringMessage AP50(Runtime ds){
         //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!");
         }
@@ -1532,16 +1534,16 @@ public static StringMessage AP50(Runtime ds){
     }
 
     //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#
@@ -1553,9 +1555,9 @@ public static StringMessage AP50(Runtime ds){
         //1: 表示心率周期;2 :表示血压周期
         //720: 表示720分钟
 
-        String[] list=cmd.split(CMDSPLIT);
+        String[] list = cmd.split(CMDSPLIT);
 
-        if (list.length==5){
+        if (list.length == 5) {
             try {
                 String index = list[2];
                 String type = list[3];
@@ -1567,26 +1569,26 @@ public static StringMessage AP50(Runtime ds){
                 Intent intent = new Intent();
                 intent.putExtra("PPGTestCycle", Integer.parseInt(cycle));
                 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!");
         }
 
     }
 
     //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#
@@ -1601,24 +1603,24 @@ public static StringMessage AP50(Runtime ds){
         //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!");
         }
 
     }
 
-    public static StringMessage AP93(String index){
+    public static StringMessage AP93(String index) {
         /***
          * 20.发送文字到手环(下行协议号:BP93,响应:AP93)
          * 示例:
@@ -1636,13 +1638,13 @@ public static StringMessage AP50(Runtime ds){
          * 080835: 设备响应的时候带上响应流水号
          * 说明:   本消息适用所有终端
          */
-        return genStringMessage("AP93",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP93))
+        return genStringMessage("AP93", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP93))
                 .append(CMDSPLIT).append(index)
                 .append(CMDEND).toString());
 
     }
 
-    public void handleBP93(Connection connection,Runtime runtime , String cmd){
+    public void handleBP93(Connection connection, Runtime runtime, String cmd) {
         /***
          * 20.发送文字到手环(下行协议号:BP93,响应:AP93)
          * 示例:
@@ -1660,39 +1662,39 @@ public static StringMessage AP50(Runtime ds){
          * 080835: 设备响应的时候带上响应流水号
          * 说明:   本消息适用所有终端
          */
-        String[] cmdlist=cmd.split(",");
-        if (cmdlist.length == 7){
-            String cmdindex=cmdlist[2];
-            String msg_index_no=cmdlist[3];
-            String txtmsg=cmdlist[4];
-            String play_time=cmdlist[5];
-            String vib_time=cmdlist[6];
-            ICLogger.i("收到服务器文本 "+txtmsg+" 序号 "+msg_index_no+" , 播放 "+play_time+" 次,震动 "+vib_time+" 次!");
-            StringBuilder sb=new StringBuilder();
-            runtime.PushtxtMsg_srv_index=msg_index_no;//给回复AP94用
+        String[] cmdlist = cmd.split(",");
+        if (cmdlist.length == 7) {
+            String cmdindex = cmdlist[2];
+            String msg_index_no = cmdlist[3];
+            String txtmsg = cmdlist[4];
+            String play_time = cmdlist[5];
+            String vib_time = cmdlist[6];
+            ICLogger.i("收到服务器文本 " + txtmsg + " 序号 " + msg_index_no + " , 播放 " + play_time + " 次,震动 " + vib_time + " 次!");
+            StringBuilder sb = new StringBuilder();
+            runtime.PushtxtMsg_srv_index = msg_index_no;//给回复AP94用
             sb.append(cmdindex).append(CMDSPLIT).append(TimeUtil.getSystemTimeyyyyMMddHHmmss()).append(CMDSPLIT).append(txtmsg);
 
-            txtmsg=Util.decodeUnicode2Utf8(txtmsg);
-            StringMessage msg=AP93(cmdindex);
+            txtmsg = Util.decodeUnicode2Utf8(txtmsg);
+            StringMessage msg = AP93(cmdindex);
             //设定当前工作模式及循环频率
             connection.send(msg);
-            runtime.PushtxtMsg_srv_index=msg_index_no;//给回复AP94用
-            ICLogger.i("received Txt Msg "+txtmsg);
-            if(!Config.noPushTxtReadReply) {
+            runtime.PushtxtMsg_srv_index = msg_index_no;//给回复AP94用
+            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 AP94( ){
+    public static StringMessage AP94() {
         /***
          * 15确认已读文字(上行协议号:AP94,响应:BP94)
          * 示例:
@@ -1708,7 +1710,7 @@ public static StringMessage AP50(Runtime ds){
          */
 
         //在UI逻辑中,只要有处理就都是已经阅读。所以不存在取消阅读的说法。
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP94),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP94))
+        return genStringMessage(cmdMap.get(CMD_TYPE.AP94), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP94))
                 .append(CMDSPLIT).append(Runtime.PushtxtMsg_srv_index)
                 .append(CMDSPLIT).append("1")
                 .append(CMDEND).toString());
@@ -1716,17 +1718,17 @@ public static StringMessage AP50(Runtime ds){
     }
 
 
-    public void handleBP94(){
+    public void handleBP94() {
 
     }
 
-    public static StringMessage APWT(){
+    public static StringMessage APWT() {
 
-        return genStringMessage("APWT",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APWT)).append(CMDEND).toString());
+        return genStringMessage("APWT", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APWT)).append(CMDEND).toString());
 
     }
 
-    public void handleBPWT(Connection connection,Runtime runtime , String cmd) {
+    public void handleBPWT(Connection connection, Runtime runtime, String cmd) {
 /**
  * 14同步天气(上行协议号:APWT,响应:BPWT)
  * 示例:
@@ -1759,89 +1761,89 @@ public static StringMessage AP50(Runtime ds){
  * 如果未取到天气,则相关栏位留空,注意城市也有可能为空
  * 说明:   本消息适用所有终端
  */
-        String tmp,City,forecastTime,day1,day2,day3;
-        int temp_h_day1,temp_h_day2,temp_h_day3;
-        int temp_l_day1,temp_l_day2,temp_l_day3;
-        int temp_type_day1,temp_type_day2,temp_type_day3;
-        String temp_str_day1,temp_str_day2,temp_str_day3;
+        String tmp, City, forecastTime, day1, day2, day3;
+        int temp_h_day1, temp_h_day2, temp_h_day3;
+        int temp_l_day1, temp_l_day2, temp_l_day3;
+        int temp_type_day1, temp_type_day2, temp_type_day3;
+        String temp_str_day1, temp_str_day2, temp_str_day3;
 
-        temp_h_day1=temp_h_day2=temp_h_day3=0;
-        temp_l_day1=temp_l_day2=temp_l_day3=0;
-        temp_type_day1=temp_type_day2=temp_type_day3=1;
+        temp_h_day1 = temp_h_day2 = temp_h_day3 = 0;
+        temp_l_day1 = temp_l_day2 = temp_l_day3 = 0;
+        temp_type_day1 = temp_type_day2 = temp_type_day3 = 1;
 
 
-        String list[]=cmd.split(CMDSPLIT);
+        String list[] = cmd.split(CMDSPLIT);
 
-        if (list.length==18){
+        if (list.length == 18) {
             try {
                 City = Util.decodeUnicode2Utf8(list[1]);
                 forecastTime = list[2];
                 day1 = list[3];
                 tmp = list[4];
-                if (Util.isNumeric(tmp.trim().replace("-",""))) {
+                if (Util.isNumeric(tmp.trim().replace("-", ""))) {
                     temp_h_day1 = Integer.parseInt(tmp);
                 }
                 tmp = list[5];
-                if (Util.isNumeric(tmp.trim().replace("-",""))) {
+                if (Util.isNumeric(tmp.trim().replace("-", ""))) {
                     temp_l_day1 = Integer.parseInt(tmp);
                 }
                 tmp = list[6];
-                if (Util.isNumeric(tmp.trim().replace("-",""))) {
+                if (Util.isNumeric(tmp.trim().replace("-", ""))) {
                     temp_type_day1 = Integer.parseInt(tmp);
                 }
-                temp_str_day1=Util.decodeUnicode2Utf8(list[7]);
-                day2=list[8];
+                temp_str_day1 = Util.decodeUnicode2Utf8(list[7]);
+                day2 = list[8];
                 tmp = list[9];
-                if (Util.isNumeric(tmp.trim().replace("-",""))) {
+                if (Util.isNumeric(tmp.trim().replace("-", ""))) {
                     temp_h_day2 = Integer.parseInt(tmp);
                 }
                 tmp = list[10];
-                if (Util.isNumeric(tmp.trim().replace("-",""))) {
+                if (Util.isNumeric(tmp.trim().replace("-", ""))) {
                     temp_l_day2 = Integer.parseInt(tmp);
                 }
                 tmp = list[11];
-                if (Util.isNumeric(tmp.trim().replace("-",""))) {
+                if (Util.isNumeric(tmp.trim().replace("-", ""))) {
                     temp_type_day2 = Integer.parseInt(tmp);
                 }
-                temp_str_day2=Util.decodeUnicode2Utf8(list[12]);
-                day3=list[13];
+                temp_str_day2 = Util.decodeUnicode2Utf8(list[12]);
+                day3 = list[13];
                 tmp = list[14];
-                if (Util.isNumeric(tmp.trim().replace("-",""))) {
+                if (Util.isNumeric(tmp.trim().replace("-", ""))) {
                     temp_h_day3 = Integer.parseInt(tmp);
                 }
                 tmp = list[15];
-                if (Util.isNumeric(tmp.trim().replace("-",""))) {
+                if (Util.isNumeric(tmp.trim().replace("-", ""))) {
                     temp_l_day3 = Integer.parseInt(tmp);
                 }
                 tmp = list[16];
-                if (Util.isNumeric(tmp.trim().replace("-",""))) {
+                if (Util.isNumeric(tmp.trim().replace("-", ""))) {
                     temp_type_day3 = Integer.parseInt(tmp);
                 }
-                temp_str_day3=Util.decodeUnicode2Utf8(list[17]);
+                temp_str_day3 = Util.decodeUnicode2Utf8(list[17]);
 
-                ICLogger.i("天气预报城市 "+City+", 预报时间 "+forecastTime+",\n第一天 "+day1+", 最高温度 "+temp_h_day1+",最低温度 "+temp_l_day1+",天气类型 "+temp_type_day1+" "+temp_str_day1
-                        +", \n第二天 "+day2+", 最高温度 "+temp_h_day2+",最低温度 "+temp_l_day2+",天气类型 "+temp_type_day2+" "+temp_str_day2
-                        +", \n第三天 "+day3+", 最高温度 "+temp_h_day3+",最低温度 "+temp_l_day3+",天气类型 "+temp_type_day3+" "+temp_str_day3      );
-            }catch (Exception e){
+                ICLogger.i("天气预报城市 " + City + ", 预报时间 " + forecastTime + ",\n第一天 " + day1 + ", 最高温度 " + temp_h_day1 + ",最低温度 " + temp_l_day1 + ",天气类型 " + temp_type_day1 + " " + temp_str_day1
+                        + ", \n第二天 " + day2 + ", 最高温度 " + temp_h_day2 + ",最低温度 " + temp_l_day2 + ",天气类型 " + temp_type_day2 + " " + temp_str_day2
+                        + ", \n第三天 " + day3 + ", 最高温度 " + temp_h_day3 + ",最低温度 " + temp_l_day3 + ",天气类型 " + temp_type_day3 + " " + temp_str_day3);
+            } catch (Exception e) {
                 e.printStackTrace();
-                ICLogger.i("BPWT format error!"+e.getMessage());
+                ICLogger.i("BPWT format error!" + e.getMessage());
             }
 
-        }else{
+        } else {
             ICLogger.i("BPWT format error!");
         }
     }
 
 
-    public static StringMessage APLA(String index){
+    public static StringMessage APLA(String index) {
 
-        return genStringMessage("APLA",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APLA))
+        return genStringMessage("APLA", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APLA))
                 .append(CMDSPLIT).append(index)
                 .append(CMDEND).toString());
 
     }
 
-      public void handleBPLA(Connection connection, Runtime runtime , String cmd){
+    public void handleBPLA(Connection connection, Runtime runtime, String cmd) {
         /***
          *IWBPLA,353456789012345,577569,1#
          * 说明:
@@ -1854,16 +1856,16 @@ public static StringMessage AP50(Runtime ds){
          * 080835:指令流水号
          */
 
-        ICLogger.i("received BPLA "+cmd);
-        String[] cmdlist=cmd.split(",");
-        if (cmdlist.length == 4){
-            String cmdindex=cmdlist[2];
-            String msg_index_no=cmdlist[3];
-            StringMessage msg=APLA(cmdindex);
+        ICLogger.i("received BPLA " + cmd);
+        String[] cmdlist = cmd.split(",");
+        if (cmdlist.length == 4) {
+            String cmdindex = cmdlist[2];
+            String msg_index_no = cmdlist[3];
+            StringMessage msg = APLA(cmdindex);
             connection.send(msg);
-            LanguageUtils.changeLanguageByIndex(runtime.getContextProxy().context,msg_index_no);
+            LanguageUtils.changeLanguageByIndex(runtime.getContextProxy().context, msg_index_no);
 
-        }else{
+        } else {
             ICLogger.i("BPLA format error!");
         }
 
@@ -1872,66 +1874,66 @@ public static StringMessage AP50(Runtime ds){
     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);
-        switch (type){
+        boolean ret = true;
+        ICLogger.i("handleCmd " + type.name() + " strLen=" + cmd.length());
+        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + cmd);
+        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 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 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 BP05: //L02服务器不适用
@@ -1941,98 +1943,100 @@ public static StringMessage AP50(Runtime ds){
 
             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 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 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.getInstance().triggerPPGTest(FROM_SERVER);
                 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.getInstance().triggerPPGTest(FROM_SERVER);
                 break;
             case BPJZ:
-                handleBPJZ(cmd,mConnection,mRuntime);
+                handleBPJZ(cmd, mConnection, mRuntime);
                 ICLogger.i("收到服务器血压校准命令");
                 break;
             case BPHT:
                 ICLogger.i("服务器收到上传的心率血压APHT");
-                mConnection.DeliverCMDMessageToSystem("APHT",cmd);//通知下面线程服务器收到指令
+                mConnection.DeliverCMDMessageToSystem("APHT", cmd);//通知下面线程服务器收到指令
                 break;
             case BPHP:
                 ICLogger.i("服务器收到上传的心率血压血氧APHP");
-                mConnection.DeliverCMDMessageToSystem("APHP",cmd);//通知下面线程服务器收到指令
+                mConnection.DeliverCMDMessageToSystem("APHP", cmd);//通知下面线程服务器收到指令
                 break;
 
             case BP50:
                 ICLogger.i("服务器收到体温AP50");
-                mConnection.DeliverCMDMessageToSystem("AP50",cmd);//通知下面线程服务器收到指令
+                mConnection.DeliverCMDMessageToSystem("AP50", cmd);//通知下面线程服务器收到指令
                 break;
             case BP84:
-                handleBP84(cmd,mConnection);
+                handleBP84(cmd, mConnection);
                 ICLogger.i("收到服务器白名单命令");
                 break;
 
             case BP86:
                 //心率血压周期设置
-                handleBP86(cmd,mConnection,mRuntime);
+                handleBP86(cmd, mConnection, mRuntime);
 
                 break;
             case BP89:
                 //心率/血压阀值
-                handleBP89(cmd,mConnection);
+                handleBP89(cmd, mConnection);
                 break;
 
             case BP94:
                 handleBP94();
-                mConnection.DeliverCMDMessageToSystem("AP94",cmd);//通知下面线程状态变化
+                mConnection.DeliverCMDMessageToSystem("AP94", cmd);//通知下面线程状态变化
                 break;
             case BP93:
                 //服务器下发文版
-                handleBP93(mConnection,mRuntime,cmd);
+                handleBP93(mConnection, mRuntime, cmd);
                 break;
 
             case BPWT:
                 //心率/血压阀值
-                handleBPWT(mConnection,mRuntime,cmd);
+                handleBPWT(mConnection, mRuntime, cmd);
                 break;
 
             case BPLA:
                 //changeLaunguag
-                handleBPLA(mConnection,mRuntime,cmd);
+                handleBPLA(mConnection, mRuntime, cmd);
                 break;
         }
 
@@ -2045,12 +2049,12 @@ public static StringMessage AP50(Runtime ds){
 
         //只有需要传递二级制数据的才需要这个函数,目前只有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 502436f..db2b09d 100644 (file)
@@ -21,6 +21,7 @@ import java.util.Date;
 import java.util.HashMap;
 
 import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;
+import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
 import static java.lang.Math.abs;
 
@@ -552,18 +553,18 @@ public class protocol_mqtt {
 
     public void handleWdstart(Connection connection, Runtime runtime, String data) {
 
-/***
- * 设置体温上传频率(wdstart)
- * 平台向“WBG100/v1/ID_手表IMEI/wdstart”的主题发布 [LEN, x]
- * x 为上传间隔时间,单位秒,连续上传时最小时间不小于300 秒,最大不超过65535.
- * x 为1 则代表终端心率单次上传,上传完后自动关闭。
- * x 为0 则代表终端心率上传关闭。
- * 终端订阅“WBG100/v1/ID_手表IMEI/+”的主题列表,判断子主题是否为wdstart
- *
- * 终端发布(平台订阅):
- * 终端收到数据,向“WBG100/v1/ID_手表IMEI/ wdstart”的主题发布回应
- * [LEN,区域id]
- */
+        /***
+         * 设置体温上传频率(wdstart)
+         * 平台向“WBG100/v1/ID_手表IMEI/wdstart”的主题发布 [LEN, x]
+         * x 为上传间隔时间,单位秒,连续上传时最小时间不小于300 秒,最大不超过65535.
+         * x 为1 则代表终端心率单次上传,上传完后自动关闭。
+         * x 为0 则代表终端心率上传关闭。
+         * 终端订阅“WBG100/v1/ID_手表IMEI/+”的主题列表,判断子主题是否为wdstart
+         *
+         * 终端发布(平台订阅):
+         * 终端收到数据,向“WBG100/v1/ID_手表IMEI/ wdstart”的主题发布回应
+         * [LEN,区域id]
+         */
         connection.send(wdstart(runtime));
         String[] list = data.split(CMDSPLIT);
         if (list.length == 2) {
@@ -575,7 +576,8 @@ public class protocol_mqtt {
 
                     Config.setTemperatureTestCycle(runtime, cycle_int);
                     CoreService.getInstance().setTempAlarm();
-                    if (runtime.check_stat_do_temp_test()) TemperatureUtil.doTempTestInThread();
+                    if (runtime.check_stat_do_temp_test())
+                        TemperatureUtil.getInstance().doTempTestInThread(FROM_SERVER);
                 } catch (Exception e) {
                     ICLogger.e(e.getMessage(), e);
                 }
@@ -1001,7 +1003,8 @@ public class protocol_mqtt {
             case hrtstart:
                 handleHrtstart(mConnection, mRuntime, data);
                 ICLogger.i("收到服务器心率检测命令");
-                if (mRuntime.check_stat_do_ppg_test()) HeartRateManager.triggerPPGtest();
+                if (mRuntime.check_stat_do_ppg_test())
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
                 break;
 
             case wdstart:
@@ -1010,19 +1013,23 @@ public class protocol_mqtt {
                 break;
             case blood:
                 ICLogger.i("服务器收到上传的血压");
-                mConnection.DeliverCMDMessageToSystem("blood", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                //通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("blood", cmd);
                 break;
             case oxygen:
                 ICLogger.i("服务器收到上传的血氧");
-                mConnection.DeliverCMDMessageToSystem("oxygen", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                //通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("oxygen", cmd);
                 break;
             case temp:
                 ICLogger.i("服务器收到上传的体温");
-                mConnection.DeliverCMDMessageToSystem("temp", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                //通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("temp", cmd);
                 break;
             case heart:
                 ICLogger.i("服务器收到上传的心率heart");
-                mConnection.DeliverCMDMessageToSystem("heart", cmd);//通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                //通知下面线程状态变化,用Deliver发送的话必须发,表示服务器响应了
+                mConnection.DeliverCMDMessageToSystem("heart", cmd);
                 break;
 //            case BP84:
 //                handleBP84(cmd,mConnection);
diff --git a/app/src/main/java/com/ic/work/domain/HeartRate.java b/app/src/main/java/com/ic/work/domain/HeartRate.java
new file mode 100644 (file)
index 0000000..389575c
--- /dev/null
@@ -0,0 +1,113 @@
+package com.ic.work.domain;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class HeartRate implements Parcelable {
+    //From,有时候是用户测试,主动通知服务器的
+    private int from;
+    //血压高值
+    private int bloodHeight;
+    //血压低值
+    private int bloodLow;
+    //心跳
+    private int heartRate;
+    //血氧值
+    private int oxygen;
+
+    public HeartRate(int bloodHeight, int bloodLow, int heartRate, int oxygen) {
+        this.bloodHeight = bloodHeight;
+        this.bloodLow = bloodLow;
+        this.heartRate = heartRate;
+        this.oxygen = oxygen;
+    }
+
+    public int getFrom() {
+        return from;
+    }
+
+    public void setFrom(int from) {
+        this.from = from;
+    }
+
+    public int getBloodHeight() {
+        return bloodHeight;
+    }
+
+    public void setBloodHeight(int bloodHeight) {
+        this.bloodHeight = bloodHeight;
+    }
+
+    public int getBloodLow() {
+        return bloodLow;
+    }
+
+    public void setBloodLow(int bloodLow) {
+        this.bloodLow = bloodLow;
+    }
+
+    public int getHeartRate() {
+        return heartRate;
+    }
+
+    public void setHeartRate(int heartRate) {
+        this.heartRate = heartRate;
+    }
+
+    public int getOxygen() {
+        return oxygen;
+    }
+
+    public void setOxygen(int oxygen) {
+        this.oxygen = oxygen;
+    }
+
+    public static Creator<HeartRate> getCREATOR() {
+        return CREATOR;
+    }
+
+    protected HeartRate(Parcel in) {
+        from = in.readInt();
+        bloodHeight = in.readInt();
+        bloodLow = in.readInt();
+        heartRate = in.readInt();
+        oxygen = in.readInt();
+    }
+
+    public static final Creator<HeartRate> CREATOR = new Creator<HeartRate>() {
+        @Override
+        public HeartRate createFromParcel(Parcel in) {
+            return new HeartRate(in);
+        }
+
+        @Override
+        public HeartRate[] newArray(int size) {
+            return new HeartRate[size];
+        }
+    };
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(from);
+        dest.writeInt(bloodHeight);
+        dest.writeInt(bloodLow);
+        dest.writeInt(heartRate);
+        dest.writeInt(oxygen);
+    }
+
+    @Override
+    public String toString() {
+        return "HeartRate{" +
+                "from=" + from +
+                ", bloodHeight=" + bloodHeight +
+                ", bloodLow=" + bloodLow +
+                ", heartRate=" + heartRate +
+                ", oxygen=" + oxygen +
+                '}';
+    }
+}
diff --git a/app/src/main/java/com/ic/work/domain/Temperature.java b/app/src/main/java/com/ic/work/domain/Temperature.java
new file mode 100644 (file)
index 0000000..99d8776
--- /dev/null
@@ -0,0 +1,83 @@
+package com.ic.work.domain;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * bean类:体温,腕温,环境温度
+ */
+public class Temperature implements Parcelable {
+    private double bodyTemp;
+    private double wristTemp;
+    private double envTemp;
+
+
+    public Temperature(double bodyTemp, double wristTemp, double envTemp) {
+        this.bodyTemp = bodyTemp;
+        this.wristTemp = wristTemp;
+        this.envTemp = envTemp;
+    }
+
+    protected Temperature(Parcel in) {
+        bodyTemp = in.readFloat();
+        wristTemp = in.readFloat();
+        envTemp = in.readFloat();
+    }
+
+    public static final Creator<Temperature> CREATOR = new Creator<Temperature>() {
+        @Override
+        public Temperature createFromParcel(Parcel in) {
+            return new Temperature(in);
+        }
+
+        @Override
+        public Temperature[] newArray(int size) {
+            return new Temperature[size];
+        }
+    };
+
+    public double getBodyTemp() {
+        return bodyTemp;
+    }
+
+    public void setBodyTemp(float bodyTemp) {
+        this.bodyTemp = bodyTemp;
+    }
+
+    public double getWristTemp() {
+        return wristTemp;
+    }
+
+    public void setWristTemp(float wristTemp) {
+        this.wristTemp = wristTemp;
+    }
+
+    public double getEnvTemp() {
+        return envTemp;
+    }
+
+    public void setEnvTemp(float envTemp) {
+        this.envTemp = envTemp;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeDouble(bodyTemp);
+        dest.writeDouble(wristTemp);
+        dest.writeDouble(envTemp);
+    }
+
+    @Override
+    public String toString() {
+        return "Temperature{" +
+                "bodyTemp=" + bodyTemp +
+                ", wristTemp=" + wristTemp +
+                ", envTemp=" + envTemp +
+                '}';
+    }
+}
index 542c6a1..eb7cd42 100644 (file)
@@ -33,5 +33,5 @@ dependencies {
 
 ### Acknowledgements
 
-Based on the work by [Andreas Göransson](https://github.com/agoransson) and [David Cuartielles](https://github.com/dcuartielles) in the book ["Professional Android Open Accessory programming with Arduino"](https://github.com/aoabook) and later [mqtt4processing](https://github.com/agoransson/mqtt4processing) and [mqtt4android](https://github.com/agoransson/mqtt4android).
+Based on the com.ic.work by [Andreas Göransson](https://github.com/agoransson) and [David Cuartielles](https://github.com/dcuartielles) in the book ["Professional Android Open Accessory programming with Arduino"](https://github.com/aoabook) and later [mqtt4processing](https://github.com/agoransson/mqtt4processing) and [mqtt4android](https://github.com/agoransson/mqtt4android).
 
index a202436..9860085 100644 (file)
@@ -5,4 +5,4 @@
 # For customization when using a Version Control System, please read the
 # header note.
 #Tue Dec 29 14:56:41 CST 2020
-sdk.dir=C\:\\Users\\incar\\AppData\\Local\\Android\\Sdk
+sdk.dir=D\:\\Android\\Sdk
index f1d193c..9cc66b6 100644 (file)
@@ -599,7 +599,7 @@ instanceKlass com/google/wireless/android/sdk/stats/CppHeadersViewEventOrBuilder
 instanceKlass com/google/wireless/android/sdk/stats/LintActionOrBuilder\r
 instanceKlass com/google/wireless/android/sdk/stats/OomDialogEventOrBuilder\r
 instanceKlass com/google/wireless/android/sdk/stats/JniInspectionEventOrBuilder\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$1\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$1\r
 instanceKlass com/google/wireless/android/sdk/stats/CMakeEditingEventOrBuilder\r
 instanceKlass com/google/wireless/android/sdk/stats/DataBindingEventOrBuilder\r
 instanceKlass com/google/wireless/android/sdk/stats/UserSentimentOrBuilder\r
@@ -2196,7 +2196,7 @@ instanceKlass com/android/builder/dexing/D8DiagnosticsHandler
 instanceKlass com/android/tools/r8/DiagnosticsHandler\r
 instanceKlass com/android/builder/multidex/D8MainDexList\r
 instanceKlass com/android/build/gradle/internal/tasks/D8MainDexListTaskKt\r
-instanceKlass org/gradle/internal/work/DefaultAsyncWorkTracker$2\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultAsyncWorkTracker$2\r
 instanceKlass com/google/common/collect/ImmutableSet$SerializedForm\r
 instanceKlass com/android/build/gradle/internal/tasks/D8MainDexListTask$MainDexListRunnable$Params\r
 instanceKlass com/android/build/gradle/internal/tasks/D8MainDexListTask$MainDexListRunnable\r
@@ -2798,12 +2798,12 @@ instanceKlass org/gradle/workers/internal/ExecuteWorkItemBuildOperationType$Resu
 instanceKlass org/gradle/workers/internal/AbstractWorker$Work\r
 instanceKlass org/gradle/workers/internal/AbstractWorker\r
 instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor$3\r
-instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueue$ExecutionRunner$1\r
-instanceKlass org/gradle/internal/work/DefaultAsyncWorkTracker$1\r
-instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueue$ExecutionRunner\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueue$ExecutionRunner$1\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultAsyncWorkTracker$1\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueue$ExecutionRunner\r
 instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor$LazyChildWorkerLeaseLock\r
 instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor$1\r
-instanceKlass org/gradle/internal/work/AbstractConditionalExecution\r
+instanceKlass org/gradle/internal/com.ic.work/AbstractConditionalExecution\r
 instanceKlass org/gradle/process/internal/DefaultExecActionFactory$ImmutableJavaForkOptions\r
 instanceKlass org/gradle/workers/internal/DaemonForkOptionsBuilder\r
 instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor$2\r
@@ -2927,7 +2927,7 @@ instanceKlass com/google/gson/internal/$Gson$Types$WildcardTypeImpl
 instanceKlass com/android/build/gradle/internal/api/artifact/BuildableArtifactUtil\r
 instanceKlass com/android/build/gradle/internal/tasks/IncrementalTask$taskAction$$inlined$recordTaskAction$1\r
 instanceKlass org/gradle/internal/execution/history/changes/NonIncrementalInputChanges$$Lambda$360\r
-instanceKlass org/gradle/work/FileChange\r
+instanceKlass org/gradle/com.ic.work/FileChange\r
 instanceKlass org/gradle/internal/execution/history/changes/NonIncrementalInputChanges\r
 instanceKlass com/android/build/gradle/tasks/ProcessApplicationManifest$$Lambda$359\r
 instanceKlass com/android/build/gradle/tasks/ProcessApplicationManifest$$Lambda$358\r
@@ -3995,17 +3995,17 @@ instanceKlass com/android/build/gradle/tasks/ProcessLibraryManifest$CreationActi
 instanceKlass com/android/build/gradle/tasks/ProcessLibraryManifest$CreationAction$$Lambda$240\r
 instanceKlass com/android/build/gradle/tasks/ProcessLibraryManifest$CreationAction$$Lambda$239\r
 instanceKlass com/android/build/gradle/internal/tasks/Workers$WorkerExecutorAdapter\r
-instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueue\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueue\r
 instanceKlass org/gradle/workers/internal/DaemonForkOptions\r
-instanceKlass org/gradle/internal/work/AsyncWorkCompletion\r
-instanceKlass org/gradle/internal/work/ConditionalExecution\r
+instanceKlass org/gradle/internal/com.ic.work/AsyncWorkCompletion\r
+instanceKlass org/gradle/internal/com.ic.work/ConditionalExecution\r
 instanceKlass org/gradle/workers/internal/ActionExecutionSpec\r
 instanceKlass org/gradle/workers/WorkerConfiguration\r
 instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor\r
 instanceKlass org/gradle/workers/internal/NoIsolationWorkerFactory\r
-instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueueFactory\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueueFactory\r
 instanceKlass org/gradle/process/internal/worker/child/DefaultWorkerDirectoryProvider\r
-instanceKlass org/gradle/internal/work/DefaultAsyncWorkTracker\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultAsyncWorkTracker\r
 instanceKlass org/gradle/api/internal/classloading/NoOpGroovySystemLoader\r
 instanceKlass org/gradle/api/internal/classloading/GroovySystemLoader\r
 instanceKlass org/gradle/api/internal/classloading/GroovySystemLoaderFactory\r
@@ -5098,7 +5098,7 @@ instanceKlass com/android/build/gradle/internal/VariantManager$$Lambda$101
 instanceKlass com/android/build/gradle/internal/publishing/AndroidArtifacts\r
 instanceKlass com/android/build/gradle/internal/VariantManager$$Lambda$100\r
 instanceKlass org/gradle/api/internal/artifacts/transform/TransformationStep$1\r
-instanceKlass org/gradle/work/InputChanges\r
+instanceKlass org/gradle/com.ic.work/InputChanges\r
 instanceKlass org/gradle/internal/instantiation/DependencyInjectingInstantiator$1\r
 instanceKlass org/gradle/api/internal/tasks/properties/FileParameterUtils\r
 instanceKlass org/gradle/api/internal/tasks/properties/ValidationAction\r
@@ -6351,8 +6351,8 @@ instanceKlass org/gradle/api/tasks/CompatibilityAdapterForTaskInputs
 instanceKlass org/gradle/api/internal/project/taskfactory/TaskFactory$1\r
 instanceKlass org/gradle/api/internal/tasks/DefaultTaskContainer$1\r
 instanceKlass org/codehaus/groovy/runtime/ScriptBytecodeAdapter\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$5$1\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$5\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$5$1\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$5\r
 instanceKlass org/gradle/api/internal/project/DefaultProjectStateRegistry$ProjectStateImpl$1\r
 instanceKlass org/gradle/configuration/internal/DefaultListenerBuildOperationDecorator$BuildOperationEmittingInvocationHandler\r
 instanceKlass org/gradle/configuration/internal/DefaultListenerBuildOperationDecorator$1\r
@@ -7411,7 +7411,7 @@ instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationServi
 instanceKlass org/gradle/internal/operations/notify/BuildOperationNotificationBridge$2$1$1\r
 instanceKlass org/gradle/api/internal/DefaultMutationGuard$2\r
 instanceKlass org/gradle/api/internal/project/BuildOperationCrossProjectConfigurator$CrossConfigureProjectBuildOperation\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$2\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$2\r
 instanceKlass org/gradle/api/internal/project/BuildOperationCrossProjectConfigurator$2\r
 instanceKlass org/gradle/api/internal/project/BuildOperationCrossProjectConfigurator$BlockConfigureBuildOperation\r
 instanceKlass org/gradle/initialization/NotifyingBuildLoader$3$1\r
@@ -7461,7 +7461,7 @@ instanceKlass org/apache/commons/lang/builder/HashCodeBuilder
 instanceKlass com/google/common/base/Equivalence$Wrapper\r
 instanceKlass org/gradle/internal/reflect/Methods\r
 instanceKlass org/gradle/internal/reflect/PropertyExtractor\r
-instanceKlass org/gradle/work/Incremental\r
+instanceKlass org/gradle/com.ic.work/Incremental\r
 instanceKlass org/gradle/api/tasks/PathSensitive\r
 instanceKlass org/gradle/api/tasks/SkipWhenEmpty\r
 instanceKlass org/gradle/api/tasks/Optional\r
@@ -7681,7 +7681,7 @@ instanceKlass org/gradle/initialization/DefaultGradleLauncher$ConfigureBuild
 instanceKlass com/google/common/collect/AbstractMapBasedMultimap$KeySet$1\r
 instanceKlass com/google/common/collect/CompactHashMap$Itr\r
 instanceKlass org/gradle/internal/Pair\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$ProjectLockRegistry$1\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$ProjectLockRegistry$1\r
 instanceKlass org/gradle/api/internal/project/DefaultProjectStateRegistry$ProjectStateImpl\r
 instanceKlass org/gradle/api/internal/artifacts/DefaultProjectComponentIdentifier\r
 instanceKlass org/gradle/initialization/AbstractProjectSpec\r
@@ -8283,19 +8283,19 @@ instanceKlass org/gradle/internal/Actions$NullAction
 instanceKlass org/gradle/internal/Actions\r
 instanceKlass org/gradle/internal/operations/notify/BuildOperationNotificationBridge$2$1\r
 instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationService$AcquireLocks\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$3\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$3\r
 instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationService$2\r
 instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationService$DefaultResourceLockState\r
 instanceKlass org/gradle/internal/resources/ResourceLockState\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$4\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$4\r
 instanceKlass com/google/common/collect/Iterables\r
 instanceKlass org/gradle/internal/invocation/GradleBuildController$3\r
 instanceKlass org/gradle/internal/resources/AbstractTrackedResourceLock\r
-instanceKlass org/gradle/internal/work/WorkerLeaseRegistry$WorkerLeaseCompletion\r
+instanceKlass org/gradle/internal/com.ic.work/WorkerLeaseRegistry$WorkerLeaseCompletion\r
 instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry$3\r
 instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry$2\r
 instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry$1\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$WorkerLeaseLockRegistry$1\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$WorkerLeaseLockRegistry$1\r
 instanceKlass org/gradle/internal/invocation/GradleBuildController$1\r
 instanceKlass org/gradle/util/GradleVersion\r
 instanceKlass com/google/common/base/Preconditions\r
@@ -8902,7 +8902,7 @@ instanceKlass org/gradle/api/initialization/dsl/ScriptHandler
 instanceKlass org/gradle/api/internal/initialization/DefaultScriptHandlerFactory\r
 instanceKlass org/gradle/workers/internal/DefaultWorkResult\r
 instanceKlass org/gradle/api/tasks/WorkResult\r
-instanceKlass org/gradle/internal/work/ConditionalExecutionQueue\r
+instanceKlass org/gradle/internal/com.ic.work/ConditionalExecutionQueue\r
 instanceKlass org/gradle/groovy/scripts/ScriptRunner\r
 instanceKlass org/gradle/groovy/scripts/internal/DefaultScriptRunnerFactory\r
 instanceKlass org/gradle/groovy/scripts/internal/BuildScopeInMemoryCachingScriptClassCompiler\r
@@ -9460,15 +9460,15 @@ instanceKlass com/google/common/cache/CacheBuilder
 instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry$ResourceLockProducer\r
 instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry\r
 instanceKlass org/gradle/internal/resources/ResourceLockRegistry\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$ProjectLockStatisticsImpl\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$ProjectLockStatisticsImpl\r
 instanceKlass org/gradle/internal/resources/ProjectLockStatistics\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$Root\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$LeaseHolder\r
-instanceKlass org/gradle/internal/work/WorkerLeaseRegistry$WorkerLease\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$Root\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$LeaseHolder\r
+instanceKlass org/gradle/internal/com.ic.work/WorkerLeaseRegistry$WorkerLease\r
 instanceKlass org/gradle/internal/resources/ResourceLock\r
-instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService\r
 instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationService\r
-instanceKlass org/gradle/internal/work/StopShieldingWorkerLeaseService\r
+instanceKlass org/gradle/internal/com.ic.work/StopShieldingWorkerLeaseService\r
 instanceKlass org/gradle/composite/internal/DefaultBuildableCompositeBuildContext\r
 instanceKlass com/google/common/collect/ListMultimap\r
 instanceKlass org/gradle/plugins/ide/internal/IdeArtifactStore\r
@@ -9573,7 +9573,7 @@ instanceKlass org/gradle/workers/internal/WorkerExecutionQueueFactory
 instanceKlass org/gradle/workers/internal/IsolatedClassloaderWorkerFactory\r
 instanceKlass org/gradle/workers/internal/WorkerDaemonFactory\r
 instanceKlass org/gradle/workers/internal/WorkerFactory\r
-instanceKlass org/gradle/internal/work/ConditionalExecutionQueueFactory\r
+instanceKlass org/gradle/internal/com.ic.work/ConditionalExecutionQueueFactory\r
 instanceKlass org/gradle/process/internal/worker/child/WorkerDirectoryProvider\r
 instanceKlass org/gradle/workers/internal/WorkersServices$BuildSessionScopeServices\r
 instanceKlass org/gradle/internal/service/scopes/BuildSessionScopeServices$1\r
@@ -9593,7 +9593,7 @@ instanceKlass org/gradle/cache/internal/CleanupActionFactory
 instanceKlass org/gradle/internal/filewatch/PendingChangesManager\r
 instanceKlass org/gradle/internal/fingerprint/FileCollectionFingerprinterRegistry\r
 instanceKlass org/gradle/internal/fingerprint/classpath/CompileClasspathFingerprinter\r
-instanceKlass org/gradle/internal/work/AsyncWorkTracker\r
+instanceKlass org/gradle/internal/com.ic.work/AsyncWorkTracker\r
 instanceKlass org/gradle/api/internal/project/CrossProjectConfigurator\r
 instanceKlass org/gradle/internal/operations/logging/LoggingBuildOperationProgressBroadcaster\r
 instanceKlass org/gradle/internal/operations/notify/BuildOperationNotificationBridge$3\r
@@ -9610,9 +9610,9 @@ instanceKlass org/gradle/api/internal/CollectionCallbackActionDecorator
 instanceKlass org/gradle/internal/operations/BuildOperationQueueFactory\r
 instanceKlass org/gradle/configuration/internal/UserCodeApplicationContext\r
 instanceKlass org/gradle/initialization/GradleLauncherFactory\r
-instanceKlass org/gradle/internal/work/WorkerLeaseService\r
+instanceKlass org/gradle/internal/com.ic.work/WorkerLeaseService\r
 instanceKlass org/gradle/internal/resources/ProjectLeaseRegistry\r
-instanceKlass org/gradle/internal/work/WorkerLeaseRegistry\r
+instanceKlass org/gradle/internal/com.ic.work/WorkerLeaseRegistry\r
 instanceKlass org/gradle/internal/operations/BuildOperationExecutor\r
 instanceKlass org/gradle/internal/service/scopes/CrossBuildSessionScopeServices\r
 instanceKlass org/gradle/internal/service/scopes/DefaultGradleUserHomeScopeServiceRegistry$Services\r
@@ -11578,7 +11578,7 @@ instanceKlass org/apache/tools/ant/BuildException
 instanceKlass org/gradle/internal/typeconversion/TypeConversionException\r
 instanceKlass com/google/common/util/concurrent/UncheckedExecutionException\r
 instanceKlass com/google/common/cache/CacheLoader$InvalidCacheLoadException\r
-instanceKlass org/gradle/internal/work/NoAvailableWorkerLeaseException\r
+instanceKlass org/gradle/internal/com.ic.work/NoAvailableWorkerLeaseException\r
 instanceKlass org/gradle/launcher/daemon/server/BadlyFormedRequestException\r
 instanceKlass org/gradle/internal/remote/internal/MessageIOException\r
 instanceKlass org/gradle/cache/InsufficientLockModeException\r
@@ -12918,7 +12918,7 @@ instanceKlass com/android/ide/common/workers/WorkerExecutorFacade$IsolationMode
 instanceKlass java/nio/file/AccessMode\r
 instanceKlass com/google/common/collect/Iterators$EmptyModifiableIterator\r
 instanceKlass com/google/common/collect/MultimapBuilder$LinkedListSupplier\r
-instanceKlass org/gradle/work/ChangeType\r
+instanceKlass org/gradle/com.ic.work/ChangeType\r
 instanceKlass org/gradle/internal/change/ChangeTypeInternal\r
 instanceKlass com/android/ide/common/xml/XmlFormatStyle\r
 instanceKlass com/android/ide/common/xml/XmlAttributeSortOrder\r
@@ -12974,7 +12974,7 @@ instanceKlass org/gradle/execution/taskgraph/DefaultTaskExecutionGraph$GraphStat
 instanceKlass groovy/lang/MetaClassImpl$InvokeMethodResult\r
 instanceKlass com/google/wireless/android/sdk/stats/GradleBuildProject$GradlePlugin\r
 instanceKlass com/android/ide/common/resources/FileValidity$FileStatus\r
-instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueue$QueueState\r
+instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueue$QueueState\r
 instanceKlass org/gradle/workers/IsolationMode\r
 instanceKlass org/gradle/external/javadoc/JavadocOutputLevel\r
 instanceKlass org/gradle/api/tasks/bundling/ZipEntryCompression\r