From: kfl_614 Date: Wed, 30 Dec 2020 08:59:24 +0000 (+0800) Subject: get temperature and heart rate data from ic work service. X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=788e5a9ca943d14efd8c8e164ed6e97ae62a79d3;p=protocol_srv.git get temperature and heart rate data from ic work service. --- diff --git a/app/release/ICSer_V740_2012291044_release.apk b/app/release/ICSer_V740_2012291044_release.apk new file mode 100644 index 00000000..786da5f0 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 index 00000000..0a3b01fe --- /dev/null +++ b/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl @@ -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 index 00000000..bc1f7f93 --- /dev/null +++ b/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl @@ -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 index 00000000..411f5213 --- /dev/null +++ b/app/src/main/aidl/com/ic/work/ITempSensorCallback.aidl @@ -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 index 00000000..f71b99c7 --- /dev/null +++ b/app/src/main/aidl/com/ic/work/ITempSensorService.aidl @@ -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 index 00000000..522b4800 --- /dev/null +++ b/app/src/main/aidl/com/ic/work/domain/HeartRate.aidl @@ -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 index 00000000..a820f778 --- /dev/null +++ b/app/src/main/aidl/com/ic/work/domain/Temperature.aidl @@ -0,0 +1,4 @@ +// Temperature.aidl +package com.ic.work.domain; + +parcelable Temperature; \ No newline at end of file diff --git a/app/src/main/java/com/enqualcomm/support/Constants.java b/app/src/main/java/com/enqualcomm/support/Constants.java index cd2d7abf..e3e8727a 100644 --- a/app/src/main/java/com/enqualcomm/support/Constants.java +++ b/app/src/main/java/com/enqualcomm/support/Constants.java @@ -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; } diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index 361084bc..885f2fe5 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -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 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(); } diff --git a/app/src/main/java/com/enqualcomm/support/ICApplication.java b/app/src/main/java/com/enqualcomm/support/ICApplication.java index 7847a9a5..a5354790 100644 --- a/app/src/main/java/com/enqualcomm/support/ICApplication.java +++ b/app/src/main/java/com/enqualcomm/support/ICApplication.java @@ -6,55 +6,35 @@ import android.content.res.Configuration; import android.os.Handler; import android.support.multidex.MultiDex; import android.util.SparseArray; -import com.enqualcomm.support.utils.ICLogger; -import java.util.HashMap; - +import com.enqualcomm.support.utils.ICLogger; -import de.mindpipe.android.logging.log4j.LogConfigurator; +import java.util.HashMap; public class ICApplication extends Application { private static final String TAG = "protocol." + ICApplication.class.getSimpleName(); // private static final boolean DEBUG = BuildConfig.DEBUG; - private static ICApplication instance=null; + private static ICApplication instance = null; + + public static Context sContext = null; - private static HashMap> mConfigurationChangedHandlerHashMap = new HashMap<>(); + private final static HashMap> mConfigurationChangedHandlerHashMap = new HashMap<>(); -// private static void log(String msg) { -// if (DEBUG) { -// Log.i(TAG, msg); -//// FileLoger.log(TAG, "", msg); -// } -// } -// -// private static void log(String funcName, String msg) { -// if (DEBUG) { -// Log.i(TAG, "[" + funcName + "]" + msg); -//// FileLoger.log(TAG, funcName, msg); -// } -// } @Override public void onCreate() { super.onCreate(); - ICLogger.setContext(this.getApplicationContext()); - String info = String.format("VERSION_CODE:%s, VERSION_NAME:%s", BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME); -// log("onCreate", info); - ICLogger.i(TAG+"[onCreate]" + info); - + ICLogger.i(TAG + "[onCreate]" + info); CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(getApplicationContext()); instance = this; - - // String softwareVersion = SystemProperties.get("ro.eqc.software_version"); - // log("softwareVersion:" + softwareVersion); - + sContext = getApplicationContext(); } @@ -80,7 +60,7 @@ public class ICApplication extends Application { for (Object keyObj : mConfigurationChangedHandlerHashMap.keySet()) { String key = (String) keyObj; - ICLogger.i("WatchApplication"+ " onConfigurationChanged, " + key); + ICLogger.i("WatchApplication" + " onConfigurationChanged, " + key); SparseArray sparseArray = mConfigurationChangedHandlerHashMap.get(key); if (sparseArray != null) { Handler handler = sparseArray.valueAt(0); diff --git a/app/src/main/java/com/enqualcomm/support/bean/ICLocation.java b/app/src/main/java/com/enqualcomm/support/bean/ICLocation.java index 70b2873d..10d2f479 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/ICLocation.java +++ b/app/src/main/java/com/enqualcomm/support/bean/ICLocation.java @@ -80,7 +80,7 @@ public class ICLocation { public static final int NORMAL_MOD=1; //location rate 1 time per 15 minutes public static final int LOWPOWER_MOD=2; // location rate 1 time per hour public static final int REALTIME_MOD=3; //location rate 1 time per minutes - public static final int EMERGNECY_MOD=4; //location rate 1 time per minutes work 5 minutes + public static final int EMERGNECY_MOD=4; //location rate 1 time per minutes com.ic.work 5 minutes public static final int CUSTOM_MOD=5; //location rate 1 time per minutes public static final int CUSTOM_MOD8_GPS=8; //location rate 1 time per minutes public static final int CUSTOM_MOD8_WIFI=9; //location rate 1 time per minutes diff --git a/app/src/main/java/com/enqualcomm/support/bean/heartRateStatus.java b/app/src/main/java/com/enqualcomm/support/bean/heartRateStatus.java index 6881146a..cb3550ff 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/heartRateStatus.java +++ b/app/src/main/java/com/enqualcomm/support/bean/heartRateStatus.java @@ -8,40 +8,41 @@ public class heartRateStatus { private String lastTestTime; private int lastBPH; private int lastBPL; - private int lastSpo2=0; - - private int BPH_ref=0; - private int BPL_ref=0; - private int Age=0; - private int Sex=0; - private int sp02_adjust=0; - private int ppg_adjust=0; - private int bph_adjust=0; - private int bpl_adjust=0; - - public int ppg_threshold_max=0; - public int ppg_threshold_min=0; - public int bph_threshold_max=0; - public int bph_threshold_min=0; - public int bpl_threshold_max=0; - public int bpl_threshold_min=0; - - public void setXY_Ref(int refBPH,int refBPL,int refSex,int refAge){ - BPH_ref=refBPH; - BPL_ref=refBPL; - Age=refAge; - Sex=refSex; + private int lastSpo2 = 0; + + private int BPH_ref = 0; + private int BPL_ref = 0; + private int Age = 0; + private int Sex = 0; + private int sp02_adjust = 0; + private int ppg_adjust = 0; + private int bph_adjust = 0; + private int bpl_adjust = 0; + + public int ppg_threshold_max = 0; + public int ppg_threshold_min = 0; + public int bph_threshold_max = 0; + public int bph_threshold_min = 0; + public int bpl_threshold_max = 0; + public int bpl_threshold_min = 0; + + public void setXY_Ref(int refBPH, int refBPL, int refSex, int refAge) { + BPH_ref = refBPH; + BPL_ref = refBPL; + Age = refAge; + Sex = refSex; } - public void setAdjust(int _ppg_adjust,int _bph_adjust,int _bpl_adjust ,int _sp02_adjust){ - ppg_adjust=_ppg_adjust; - bph_adjust=_bph_adjust; - bpl_adjust=_bpl_adjust; - sp02_adjust=_sp02_adjust; + public void setAdjust(int _ppg_adjust, int _bph_adjust, int _bpl_adjust, int _sp02_adjust) { + ppg_adjust = _ppg_adjust; + bph_adjust = _bph_adjust; + bpl_adjust = _bpl_adjust; + sp02_adjust = _sp02_adjust; } private HEARTRATE_WORKINGSTAT currentStat; + public enum HEARTRATE_WORKINGSTAT { HEARTRATE_CLOSED, HEARTRATE_OPEN, @@ -49,99 +50,103 @@ public class heartRateStatus { HEARTRATE_WARED_AND_TESTING, HEARTRATE_TEST_SUCCESS, HEARTRATE_TEST_FAILED, - } ; - - public boolean isHeartrRateExists(){ - return ICJniUtils.isPPGavailable()==1; } - public HEARTRATE_WORKINGSTAT getHeartrateWorkingStat(){ + ; + + public boolean isHeartrRateExists() { + return ICJniUtils.isPPGavailable() == 1; + } + public HEARTRATE_WORKINGSTAT getHeartrateWorkingStat() { return currentStat; } - public void setHeartrateStat(HEARTRATE_WORKINGSTAT stat){ + public void setHeartrateStat(HEARTRATE_WORKINGSTAT stat) { currentStat = stat; } - public int getPPG(){ - int ppg=lastHeartrate; - if(ppg_adjust!=0) - ppg+=ppg_adjust; + + public int getPPG() { + int ppg = lastHeartrate; + if (ppg_adjust != 0) + ppg += ppg_adjust; return ppg; } public int getBPH() { - int BPH=lastBPH; - if (BPH_ref>=35 && BPH_ref<200) { + int BPH = lastBPH; + if (BPH_ref >= 35 && BPH_ref < 200) { if (lastBPH > BPH_ref + 20) BPH = BPH_ref + 20; if (lastBPH < BPH_ref - 20) BPH = BPH_ref - 20; } - if (bph_adjust!=0){ - BPH+=bph_adjust; + if (bph_adjust != 0) { + BPH += bph_adjust; } return BPH; } + public int getBPL() { - int BPL=lastBPL; - if(BPL_ref>=35 && BPL_ref<200) { + int BPL = lastBPL; + if (BPL_ref >= 35 && BPL_ref < 200) { if (lastBPL > BPL_ref + 20) BPL = BPL_ref + 20; if (lastBPL < BPL_ref - 20) BPL = BPL_ref - 20; } - if (bpl_adjust!=0){ - BPL+=bpl_adjust; + if (bpl_adjust != 0) { + BPL += bpl_adjust; } return BPL; } - public int getSpo2(){ - int sp02=lastSpo2; - if (sp02_adjust!=0) - sp02+=sp02_adjust; + public int getSpo2() { + int sp02 = lastSpo2; + if (sp02_adjust != 0) + sp02 += sp02_adjust; return sp02; } - public String getTestTime(){ + public String getTestTime() { return lastTestTime; } - public void setLastTestTime(String testtime){ - lastTestTime=testtime; + + public void setLastTestTime(String testtime) { + lastTestTime = testtime; } - public void setLastHeartrate(int value,int bph,int bpl){ - lastHeartrate=value; - lastBPH=bph; - lastBPL=bpl; + public void setLastHeartrate(int value, int bph, int bpl) { + lastHeartrate = value; + lastBPH = bph; + lastBPL = bpl; } - public void setLastHeartrate(int value,int bph,int bpl,int sp02){ - lastHeartrate=value; - lastBPH=bph; - lastBPL=bpl; - lastSpo2=sp02; + public void setLastHeartrate(int value, int bph, int bpl, int sp02) { + lastHeartrate = value; + lastBPH = bph; + lastBPL = bpl; + lastSpo2 = sp02; } -//心率低阀值,低于该阀值上传心率,如果未设置,则留空 + //心率低阀值,低于该阀值上传心率,如果未设置,则留空 //心率高阀值,高于该阀值上传心率,如果未设置,则留空 //低压阀值,低压低于该阀值上传血压,如果未设置,则留空 //低压阀值,低压高于该阀值上传血压,如果未设置,则留空 //高压阀值,高压低于该阀值上传血压,如果未设置,则留空 //高压阀值,高压高于该阀值上传血压,如果未设置,则留空 - 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){ - ppg_threshold_max=_ppg_threshold_max; - ppg_threshold_min=_ppg_threshold_min; - bph_threshold_max=_bph_threshold_max; - bph_threshold_min=_bph_threshold_min; - bpl_threshold_max=_bpl_threshold_max; - bpl_threshold_min=_bpl_threshold_min; + 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) { + ppg_threshold_max = _ppg_threshold_max; + ppg_threshold_min = _ppg_threshold_min; + bph_threshold_max = _bph_threshold_max; + bph_threshold_min = _bph_threshold_min; + bpl_threshold_max = _bpl_threshold_max; + bpl_threshold_min = _bpl_threshold_min; } } diff --git a/app/src/main/java/com/enqualcomm/support/service/Deliver.java b/app/src/main/java/com/enqualcomm/support/service/Deliver.java index 316e998a..bf109ce9 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -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); } } diff --git a/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java b/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java index fa75ad6c..10f70b8e 100644 --- a/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java +++ b/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java @@ -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; } } diff --git a/app/src/main/java/com/enqualcomm/support/utils/AlarmHelper.java b/app/src/main/java/com/enqualcomm/support/utils/AlarmHelper.java index d4e63b24..de3136ea 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/AlarmHelper.java +++ b/app/src/main/java/com/enqualcomm/support/utils/AlarmHelper.java @@ -11,31 +11,30 @@ import java.lang.reflect.Method; import java.util.Calendar; public class AlarmHelper { - private static final String ACTION_STEP_COUNT_ALARM = "com.enqualcomm.support.ACTION_STEP_COUNT_ALARM"; - - private static final long ONE_DAY = 86400000L; - - private static final long ONE_WEEK = 604800000L; - - private static Method setImpl; - - - - static { - try { - setImpl = AlarmManager.class.getDeclaredMethod("setImpl", new Class[] { int.class, long.class, long.class, long.class, PendingIntent.class, android.os.WorkSource.class }); - setImpl.setAccessible(true); - - } catch (Exception e) { - e.printStackTrace(); - ICLogger.e(e.getMessage(),e); - } - } - - //设置闹铃 - public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis, long intervalMillis, PendingIntent paramPendingIntent) { - - paramAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, paramPendingIntent); + private static final String ACTION_STEP_COUNT_ALARM = "com.enqualcomm.support.ACTION_STEP_COUNT_ALARM"; + + private static final long ONE_DAY = 86400000L; + + private static final long ONE_WEEK = 604800000L; + + private static Method setImpl; + + + static { + try { + setImpl = AlarmManager.class.getDeclaredMethod("setImpl", new Class[]{int.class, long.class, long.class, long.class, PendingIntent.class, android.os.WorkSource.class}); + setImpl.setAccessible(true); + + } catch (Exception e) { + e.printStackTrace(); + ICLogger.e(e.getMessage(), e); + } + } + + //设置闹铃 + public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis, long intervalMillis, PendingIntent paramPendingIntent) { + + paramAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, paramPendingIntent); // try { // setImpl.invoke(paramAlarmManager, new Object[] { Integer.valueOf(0), Long.valueOf(triggerAtMillis), Long.valueOf(0L), Long.valueOf(intervalMillis), paramPendingIntent, null }); @@ -47,91 +46,95 @@ public class AlarmHelper { // exception.printStackTrace(); // } - } - - //以周为单位设置循环闹铃 - public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis, PendingIntent paramPendingIntent) { - ICLogger.i("setAlarm triggerAtMillis "+triggerAtMillis); - setAlarm(paramAlarmManager, triggerAtMillis, ONE_WEEK, paramPendingIntent); - } - public static void setAlarmOnce(AlarmManager paramAlarmManager, long triggerAtMillis, PendingIntent paramPendingIntent) { - ICLogger.i("setAlarmOnce triggerAtMillis "+triggerAtMillis); - setAlarm(paramAlarmManager, triggerAtMillis, 0, paramPendingIntent); - } - public static void setCleanStepCountAlarm(Context context, int hour, int minutes, String paramString) { - AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); - Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); - intent.setAction(paramString); - PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - alarmManager.cancel(pendingIntent); - long currentMS = System.currentTimeMillis(); - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.HOUR_OF_DAY, hour); - calendar.set(Calendar.MINUTE, minutes); - calendar.set(Calendar.SECOND, 0); - long targetMStmp = calendar.getTimeInMillis(); - long targetMS = targetMStmp; - if (targetMStmp < currentMS) - targetMS = targetMStmp + ONE_DAY; - alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetMS, pendingIntent); - } - - public static void setRealTimeAlarm(Context context, int minutes, String actionname) { - AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); - Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); - intent.setAction(actionname); - PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - alarmManager.cancel(pendingIntent); - long l = SystemClock.elapsedRealtime(); - if (Build.VERSION.SDK_INT >= 19) { - alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (minutes * 60 * 1000), pendingIntent); - return; } - alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (minutes * 60 * 1000), pendingIntent); - } - public static void setRealTimeAlarmInMicorSeconds(Context context, int ms, String actionname) { - AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); - Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); - intent.setAction(actionname); - PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - alarmManager.cancel(pendingIntent); - long l = SystemClock.elapsedRealtime(); - if (Build.VERSION.SDK_INT >= 19) { - alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (ms ), pendingIntent); - return; + + //以周为单位设置循环闹铃 + public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis, PendingIntent paramPendingIntent) { + ICLogger.i("setAlarm triggerAtMillis " + triggerAtMillis); + setAlarm(paramAlarmManager, triggerAtMillis, ONE_WEEK, paramPendingIntent); } - alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (ms ), pendingIntent); - } - public static void setRealTimeAlarmInSeconds(Context context, int seconds, String actionname) { - AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); - Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); - intent.setAction(actionname); - PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - alarmManager.cancel(pendingIntent); - long l = SystemClock.elapsedRealtime(); - if (Build.VERSION.SDK_INT >= 19) { - alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds * 1000), pendingIntent); - return; + + public static void setAlarmOnce(AlarmManager paramAlarmManager, long triggerAtMillis, PendingIntent paramPendingIntent) { + ICLogger.i("setAlarmOnce triggerAtMillis " + triggerAtMillis); + setAlarm(paramAlarmManager, triggerAtMillis, 0, paramPendingIntent); + } + + public static void setCleanStepCountAlarm(Context context, int hour, int minutes, String paramString) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); + intent.setAction(paramString); + PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + alarmManager.cancel(pendingIntent); + long currentMS = System.currentTimeMillis(); + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY, hour); + calendar.set(Calendar.MINUTE, minutes); + calendar.set(Calendar.SECOND, 0); + long targetMStmp = calendar.getTimeInMillis(); + long targetMS = targetMStmp; + if (targetMStmp < currentMS) + targetMS = targetMStmp + ONE_DAY; + alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetMS, pendingIntent); + } + + public static void setRealTimeAlarm(Context context, int minutes, String actionname) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); + intent.setAction(actionname); + PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + alarmManager.cancel(pendingIntent); + long l = SystemClock.elapsedRealtime(); + if (Build.VERSION.SDK_INT >= 19) { + alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (minutes * 60 * 1000), pendingIntent); + return; + } + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (minutes * 60 * 1000), pendingIntent); + } + + public static void setRealTimeAlarmInMicorSeconds(Context context, int ms, String actionname) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); + intent.setAction(actionname); + PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + alarmManager.cancel(pendingIntent); + long l = SystemClock.elapsedRealtime(); + if (Build.VERSION.SDK_INT >= 19) { + alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (ms), pendingIntent); + return; + } + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (ms), pendingIntent); + } + + public static void setRealTimeAlarmInSeconds(Context context, int seconds, String actionname) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); + intent.setAction(actionname); + PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + alarmManager.cancel(pendingIntent); + long l = SystemClock.elapsedRealtime(); + if (Build.VERSION.SDK_INT >= 19) { + alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds * 1000), pendingIntent); + return; + } + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds * 1000), pendingIntent); + } + + public static void setTimeAlarm(Context context, int hour, int minutes, String paramString) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); + intent.setAction(paramString); + PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + long l3 = System.currentTimeMillis(); + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY, hour); + calendar.set(Calendar.MINUTE, minutes); + calendar.set(Calendar.SECOND, 0); + long l2 = calendar.getTimeInMillis(); + long l1 = l2; + if (l2 < l3) + l1 = l2 + ONE_DAY; + alarmManager.cancel(pendingIntent); + alarmManager.setExact(AlarmManager.RTC_WAKEUP, l1, pendingIntent); } - alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + (seconds * 1000), pendingIntent); - } - - public static void setTimeAlarm(Context context, int hour, int minutes, String paramString) { - AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); - Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class); - intent.setAction(paramString); - PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - long l3 = System.currentTimeMillis(); - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.HOUR_OF_DAY, hour); - calendar.set(Calendar.MINUTE, minutes); - calendar.set(Calendar.SECOND, 0); - long l2 = calendar.getTimeInMillis(); - long l1 = l2; - if (l2 < l3) - l1 = l2 + ONE_DAY; - alarmManager.cancel(pendingIntent); - alarmManager.setExact(AlarmManager.RTC_WAKEUP, l1, pendingIntent); - } } diff --git a/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java b/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java index d13dbc31..1451c1c4 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java @@ -306,7 +306,7 @@ public class DeviceInfoUtil { {"com.enqualcomm.support","Protocol"}, {"com.ic.blood","BLood"}, {"com.ic.launcher","Launcher"}, - {"com.ic.work","Work"}, + {"com.ic.com.ic.work","Work"}, {"com.ic.weather","Weather"}, {"com.ic.hardware","Hardware"}, {"mobile.miki","FactoryMode"}, diff --git a/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java b/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java index 660951a5..314a4e3b 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java +++ b/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java @@ -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", ""); diff --git a/app/src/main/java/com/enqualcomm/support/utils/TemperatureUtil.java b/app/src/main/java/com/enqualcomm/support/utils/TemperatureUtil.java index 5fec64df..370a5163 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/TemperatureUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/TemperatureUtil.java @@ -1,71 +1,156 @@ 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(); } } } diff --git a/app/src/main/java/com/ic/protocols/protocol_beehome.java b/app/src/main/java/com/ic/protocols/protocol_beehome.java index 89434b10..804c8cb4 100644 --- a/app/src/main/java/com/ic/protocols/protocol_beehome.java +++ b/app/src/main/java/com/ic/protocols/protocol_beehome.java @@ -28,8 +28,8 @@ 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.LocationClient.getInstance; import static com.enqualcomm.support.bean.Contact.GROUP_ALL; import static java.lang.Math.abs; @@ -39,8 +39,9 @@ public class protocol_beehome { private static final String CMDHEADER = "IW"; private static final String CMDEND = "#"; private static final String CMDSPLIT = ","; - public static final String defaultServerIP="en.beehome360.com"; - public static final int defaultServerPort=5018; + public static final String defaultServerIP = "en.beehome360.com"; + public static final int defaultServerPort = 5018; + public enum CMD_TYPE { /*终端发起*/ AP00,//登录包 @@ -203,14 +204,14 @@ public class protocol_beehome { } - private Connection mConnection=null; - private Runtime mRuntime=null; + private Connection mConnection = null; + private Runtime mRuntime = null; - public protocol_beehome(Connection connect,Runtime runtime) { - mConnection=connect; - mRuntime=runtime; + public protocol_beehome(Connection connect, Runtime runtime) { + mConnection = connect; + mRuntime = runtime; - } + } private StringBuffer cmdbuf = new StringBuffer(); @@ -227,7 +228,7 @@ public class protocol_beehome { return ""; } - }else{ + } else { return ""; } @@ -250,14 +251,14 @@ public class protocol_beehome { } - /**/ - 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,下一次识别接着使用 @@ -268,11 +269,11 @@ public class protocol_beehome { 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()); /* 如果不是 #结尾,就认为 接收数据不全,置位。 */ @@ -281,7 +282,7 @@ public class protocol_beehome { } String[] cmdlist = cmd_msgbuf.split(CMDEND); int listlen = cmdlist.length; - log("listlen "+listlen); + log("listlen " + listlen); /* 如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd */ @@ -297,12 +298,12 @@ public class protocol_beehome { if (key == CMD_TYPE.BP28) { //如果是BP28则 后面的数据是音频,需要保留 byte[] amrBuf; - int amrLen = getBP28Amrlen(cmdlist[i] ); + int amrLen = getBP28Amrlen(cmdlist[i]); if (bytes.length > amrLen) { handleCmd(key, cmdlist[i], bytes); } } else { - handleCmd(key, cmdlist[i]); + handleCmd(key, cmdlist[i]); } } } @@ -311,6 +312,7 @@ public class protocol_beehome { cmdbuf = new StringBuffer().append(last_inCompletecmd); return ret; } + public int getBP28Amrlen(String cmd) { String Name; @@ -320,8 +322,8 @@ public class protocol_beehome { int packetLen; - String[] msg=cmd.split(CMDSPLIT); - if (msg.length>=6){ + String[] msg = cmd.split(CMDSPLIT); + if (msg.length >= 6) { try { Name = msg[1]; @@ -340,28 +342,29 @@ public class protocol_beehome { 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]); @@ -380,11 +383,11 @@ public class protocol_beehome { } // 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"); } } @@ -405,19 +408,20 @@ public class protocol_beehome { //02为工作模式 ,(设防,工作模式如果为00,则代表无或未设置) //5555: 计步步数,每次到达 9999 后重 0 开始计 (此处 9999 为示例,可以为2字节int 然后溢出归零) //30: 翻滚次数 - return genStringMessage(cmdMap.get(CMD_TYPE.AP03),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP03)).append(CMDSPLIT).append(String.format("%03d",abs(ds.getSignalStrength()))) + 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.1061830323.8706000908000502, @@ -429,9 +433,9 @@ public class protocol_beehome { * 00:第一个0:是否需要回复地址信息,0:不回复,1回复. * HOME|74-DE-2B-44-88-8C|97&HOME1|74-DE-2B-44-88-8C|97&HOME2|74-DE-2B-44-88-8C|97&HOME3|74-DE-2B-44-88-8C|97# */ - return genStringMessage(cmdMap.get(CMD_TYPE.AP10),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate()) + return genStringMessage(cmdMap.get(CMD_TYPE.AP10), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate()) .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()) - .append(String.format("%03d",abs(ds.getSignalStrength()))) + .append(String.format("%03d", abs(ds.getSignalStrength()))) .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0") .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT) .append(ds.getLBSData()).append(CMDSPLIT) @@ -448,20 +452,19 @@ public class protocol_beehome { // 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, @@ -483,15 +486,15 @@ public class protocol_beehome { // 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) //基站信息数据 @@ -499,26 +502,26 @@ public class protocol_beehome { } //处理 定位 BP01 - public void handleBP02(String cmd){ + public void handleBP02(String cmd) { log("BP02定位接收成功"); } - - public static StringMessage APXL(String id){ + public static StringMessage APXL(String id) { //设备响应: IWAPXL,080835# //080835:指令流水号 - return genStringMessage(cmdMap.get(CMD_TYPE.APXL),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL)) + return genStringMessage(cmdMap.get(CMD_TYPE.APXL), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL)) .append(CMDSPLIT).append(id) .append(CMDEND).toString()); } /** * 测量心率 + * * @param cmd * @param connection */ - public void handleBPXL(String cmd, Connection connection){ + public void handleBPXL(String cmd, Connection connection) { //IWBPXL,353456789012345,080835# //说明: //IW:标识符 @@ -527,32 +530,33 @@ public class protocol_beehome { //080835 :指令流水号 //设备响应: IWAPXL,080835# //080835:指令流水号 - String[] list=cmd.split(CMDSPLIT); - if (list.length==3){ - String index=list[2]; - String imei=list[1]; - ICLogger.i("Handle BPXL IMEI "+imei+",index "+index); + String[] list = cmd.split(CMDSPLIT); + if (list.length == 3) { + String index = list[2]; + String imei = list[1]; + ICLogger.i("Handle BPXL IMEI " + imei + ",index " + index); connection.send(APXL(index)); - }else{ + } else { ICLogger.i("BPXL format error!"); } } - public static StringMessage APXY(String id){ + public static StringMessage APXY(String id) { //设备响应: IWAPXY,080835# //080835:指令流水号 - return genStringMessage(cmdMap.get(CMD_TYPE.APXY),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY)) + return genStringMessage(cmdMap.get(CMD_TYPE.APXY), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY)) .append(CMDSPLIT).append(id) .append(CMDEND).toString()); } /** * 测量血压 + * * @param cmd * @param connection */ - public void handleBPXY(String cmd,Connection connection){ + public void handleBPXY(String cmd, Connection connection) { //IWBPXY,353456789012345,080835# //说明: //IW:标识符 @@ -561,25 +565,24 @@ public class protocol_beehome { //080835 :指令流水号 //设备响应: IWAPXY,080835# //080835:指令流水号 - String[] list=cmd.split(CMDSPLIT); - if (list.length==3){ - String index=list[2]; - String imei=list[1]; - ICLogger.i("Handle BPXY IMEI "+imei+",index "+index); + String[] list = cmd.split(CMDSPLIT); + if (list.length == 3) { + String index = list[2]; + String imei = list[1]; + ICLogger.i("Handle BPXY IMEI " + imei + ",index " + index); connection.send(APXY(index)); - }else{ + } else { ICLogger.i("BPXY format error!"); } } - - public static StringMessage APJZ(String id,String BPH,String BPL,String Age,String Sex){ + public static StringMessage APJZ(String id, String BPH, String BPL, String Age, String Sex) { //设备响应: IWAPJZ,792997,120,85,42,1# //792997:指令流水号 // 高压120,低压85,年龄42,1 男性 - return genStringMessage(cmdMap.get(CMD_TYPE.APJZ),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ)) + return genStringMessage(cmdMap.get(CMD_TYPE.APJZ), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ)) .append(CMDSPLIT).append(id) .append(CMDSPLIT).append(BPH) .append(CMDSPLIT).append(BPL) @@ -589,12 +592,11 @@ public class protocol_beehome { } /** - * * @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# @@ -607,43 +609,42 @@ public class protocol_beehome { //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(cmdMap.get(CMD_TYPE.AP18),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18)) + public static StringMessage AP18(String index) { + return genStringMessage(cmdMap.get(CMD_TYPE.AP18), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18)) .append(CMDSPLIT).append(index) .append(CMDEND).toString()); } - public void handleBP18(Connection connection,String cmd) { + public void handleBP18(Connection connection, String cmd) { // IWBP18,867155030001063,161723 - String[] cmdlist=cmd.split(CMDSPLIT); - if (cmdlist.length==3) { + String[] cmdlist = cmd.split(CMDSPLIT); + if (cmdlist.length == 3) { connection.send(AP18(cmdlist[2])); @@ -651,16 +652,17 @@ public class protocol_beehome { } //恢复出厂设置 - public static StringMessage AP17(String index){ - return genStringMessage(cmdMap.get(CMD_TYPE.AP17),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17)) + public static StringMessage AP17(String index) { + return genStringMessage(cmdMap.get(CMD_TYPE.AP17), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17)) .append(CMDSPLIT).append(index) .append(CMDEND).toString()); } - public void handleBP17(Connection connection,String cmd) { + + public void handleBP17(Connection connection, String cmd) { // IWBP17,867155030001063,161723 - String[] cmdlist=cmd.split(CMDSPLIT); - if (cmdlist.length==3) { + String[] cmdlist = cmd.split(CMDSPLIT); + if (cmdlist.length == 3) { connection.send(AP17(cmdlist[2])); @@ -670,16 +672,17 @@ public class protocol_beehome { //关机 - public static StringMessage AP31(String index){ - return genStringMessage(cmdMap.get(CMD_TYPE.AP31),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP31)) + public static StringMessage AP31(String index) { + return genStringMessage(cmdMap.get(CMD_TYPE.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])); @@ -687,8 +690,8 @@ public class protocol_beehome { } //设置SOS号码 - public static StringMessage AP12(String index,String phNum1,String phNum2,String phNum3){ - return genStringMessage(cmdMap.get(CMD_TYPE.AP12),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12)) + public static StringMessage AP12(String index, String phNum1, String phNum2, String phNum3) { + return genStringMessage(cmdMap.get(CMD_TYPE.AP12), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12)) .append(CMDSPLIT).append(index) .append(CMDSPLIT).append(phNum1) .append(CMDSPLIT).append(phNum2) @@ -697,32 +700,35 @@ public class protocol_beehome { } //设置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 contactArray=new ArrayList(); - 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 contactArray = new ArrayList(); + 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(cmdMap.get(CMD_TYPE.AP14),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14)) + public static StringMessage AP14(String index, String[] phnumbs) { + return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14)) .append(CMDSPLIT).append(index) .append(CMDSPLIT).append(phnumbs[0]) .append(CMDSPLIT).append(phnumbs[1]) @@ -736,8 +742,9 @@ public class protocol_beehome { .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, @@ -752,57 +759,57 @@ public class protocol_beehome { * 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 contactArray=new ArrayList(); - 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 contactArray = new ArrayList(); + 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); } } @@ -811,25 +818,25 @@ public class protocol_beehome { // 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(cmdMap.get(CMD_TYPE.AP85),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85)) + return genStringMessage(cmdMap.get(CMD_TYPE.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 @@ -845,16 +852,16 @@ public class protocol_beehome { //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 alarmlist=new ArrayList<>(); - if (datalist.length >0){ + 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 alarmlist = new ArrayList<>(); + if (datalist.length > 0) { try { for (int i = 0; i < datalist.length; i++) { String[] cmdarglist = datalist[i].split(","); @@ -917,16 +924,16 @@ public class protocol_beehome { runtime.getDbHelper().saveAlarm(alarmlist); //do clean and set alarm things - }catch (Exception e){ - ICLogger.e(e.getMessage(),e); + } catch (Exception e) { + ICLogger.e(e.getMessage(), e); } } //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)); } @@ -950,9 +957,7 @@ public class protocol_beehome { // } - - - 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:标识符 @@ -968,31 +973,31 @@ public class protocol_beehome { //如果设备回复确认数据包接收失败状态,则重复发送上一个数据包 - 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]); @@ -1005,17 +1010,16 @@ public class protocol_beehome { } //发送消息,再次检查要发送的语音包,确认其发送完毕 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:设置信息,供服务器同步 @@ -1026,7 +1030,7 @@ public class protocol_beehome { } //设置工作模式 - public void handleBP33(Connection connection,Runtime runtime,String cmd){ + public void handleBP33(Connection connection, Runtime runtime, String cmd) { // IWBP33,867155030001063,560555,1 // IW:标识符 @@ -1035,9 +1039,9 @@ public class protocol_beehome { // 080835:指令流水号 // 1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式 - String[] cmdlist=cmd.split(","); - if (cmdlist.length == 4){ - log("work mode "+cmdlist[3]); + String[] cmdlist = cmd.split(","); + if (cmdlist.length == 4) { + log("com.ic.work mode " + cmdlist[3]); try { int mod = Integer.parseInt(cmdlist[3]); int Cycle = 900; @@ -1066,26 +1070,26 @@ public class protocol_beehome { 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(cmdMap.get(CMD_TYPE.AP34),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP34)) + return genStringMessage(cmdMap.get(CMD_TYPE.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:标识符 @@ -1094,11 +1098,11 @@ public class protocol_beehome { // 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]); @@ -1121,13 +1125,14 @@ public class protocol_beehome { runtime.getLocationInstance().setWorkingMod(mod); // CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod()); //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。 - }catch (Exception e){ - ICLogger.e(e.getMessage(),e); + } catch (Exception e) { + ICLogger.e(e.getMessage(), e); } } } - public void handleBP40(Connection connection,Runtime runtime,String cmd){ + + public void handleBP40(Connection connection, Runtime runtime, String cmd) { // IWBP40,353456789012345,080835,XXXXXXXXXXXXXX# // IW:标识符 @@ -1137,28 +1142,29 @@ public class protocol_beehome { // XXXXXXXXXXXX : 表示文字内容GB2312编码 - String[] cmdlist=cmd.split(","); - if (cmdlist.length == 4){ - String cmdindex=cmdlist[2]; - String txtmsg=cmdlist[3]; + String[] cmdlist = cmd.split(","); + if (cmdlist.length == 4) { + String cmdindex = cmdlist[2]; + String txtmsg = cmdlist[3]; - txtmsg=Util.UrlGB2312ToUTF8(txtmsg); - StringMessage msg=AP40(cmdindex,1); + txtmsg = Util.UrlGB2312ToUTF8(txtmsg); + StringMessage msg = AP40(cmdindex, 1); //设定当前工作模式及循环频率 connection.send(msg); - ICLogger.i("received Txt Msg "+txtmsg); - runtime.getContextProxy().sendMsgBroadcast(txtmsg,0); + ICLogger.i("received Txt Msg " + txtmsg); + runtime.getContextProxy().sendMsgBroadcast(txtmsg, 0); runtime.getContextProxy().saveMstToSMSDB(txtmsg); - }else{ + } else { ICLogger.i("BP40 format error!"); } } - public static StringMessage AP40(String cmdindex,int success){ + + public static StringMessage AP40(String cmdindex, int success) { // IWAP40,080835,1# // 080835:指令流水号 // 1:表示设备接受数据成功,0表示设备接受数据失败 - return genStringMessage(cmdMap.get(CMD_TYPE.AP40),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP40)) + return genStringMessage(cmdMap.get(CMD_TYPE.AP40), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP40)) .append(CMDSPLIT).append(cmdindex) .append(CMDSPLIT).append(success) .append(CMDEND).toString()); @@ -1167,26 +1173,26 @@ public class protocol_beehome { /** * 心率上传,返回协议字串 + * * @param ds * @return */ - public static StringMessage AP49(Runtime ds){ + public static StringMessage AP49(Runtime ds) { //示例数据:IWAP49,68## - return genStringMessage(cmdMap.get(CMD_TYPE.AP49),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49)) + return genStringMessage(cmdMap.get(CMD_TYPE.AP49), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49)) .append(CMDSPLIT).append(ds.getHRS().getPPG()) .append(CMDEND).toString()); } - - /** * 返回上传心率血压的协议字串 + * * @param ds * @return */ - public static StringMessage APHT(Runtime ds){ + public static StringMessage APHT(Runtime ds) { //IWAPHT,60,130,85# //说明: //IW:标识符 @@ -1196,13 +1202,14 @@ public class protocol_beehome { //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:标识符 @@ -1212,7 +1219,7 @@ public class protocol_beehome { //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) @@ -1221,15 +1228,16 @@ public class protocol_beehome { //立即定位反馈 - public static StringMessage AP16(String cmdindex){ + public static StringMessage AP16(String cmdindex) { //IWAP16,080835# //080835:指令流水号 - return genStringMessage(cmdMap.get(CMD_TYPE.AP16),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16)) + return genStringMessage(cmdMap.get(CMD_TYPE.AP16), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16)) .append(CMDSPLIT).append(cmdindex) .append(CMDEND).toString()); } + // 立即定位指令(长链接有效) - public void handleBP16(Connection connection,Runtime runtime,String cmd){ + public void handleBP16(Connection connection, Runtime runtime, String cmd) { //示例数据:IWBP16,867155030001063,335386 // IWBP16,353456789012345,080835# // 说明: @@ -1238,18 +1246,18 @@ public class protocol_beehome { // 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:标识符 @@ -1259,7 +1267,7 @@ public class protocol_beehome { //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()) @@ -1268,43 +1276,43 @@ public class protocol_beehome { } - 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(cmdMap.get(CMD_TYPE.AP15),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15)) + return genStringMessage(cmdMap.get(CMD_TYPE.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]; @@ -1317,24 +1325,20 @@ public class protocol_beehome { 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(cmdMap.get(CMD_TYPE.AP28),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28)) + return genStringMessage(cmdMap.get(CMD_TYPE.AP28), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28)) .append(CMDSPLIT).append(name) .append(CMDSPLIT).append(msg) .append(CMDSPLIT).append(packagecount) @@ -1344,7 +1348,7 @@ public class protocol_beehome { } //处理 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# @@ -1375,8 +1379,8 @@ public class protocol_beehome { 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]; @@ -1419,12 +1423,12 @@ public class protocol_beehome { 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))); } @@ -1443,18 +1447,18 @@ public class protocol_beehome { } //白名单开关(下行协议号: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(cmdMap.get(CMD_TYPE.AP84),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84)) + return genStringMessage(cmdMap.get(CMD_TYPE.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# //说明: @@ -1463,21 +1467,21 @@ public class protocol_beehome { //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!"); } @@ -1485,16 +1489,16 @@ public class protocol_beehome { } //17.绑定解绑(下行协议号:BP68,响应:AP68) - public static StringMessage AP68(String index){ + public static StringMessage AP68(String index) { //设备响应: IWAP86, 080835# //080835:指令流水号 - return genStringMessage(cmdMap.get(CMD_TYPE.AP68),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP68)) + return genStringMessage(cmdMap.get(CMD_TYPE.AP68), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP68)) .append(CMDSPLIT).append(index) .append(CMDEND).toString()); } - public void handleBP68(String cmd,Connection connection,Runtime runtime){ + public void handleBP68(String cmd, Connection connection, Runtime runtime) { //示例: //IWBP68,353456789012345,080835,1# @@ -1505,30 +1509,31 @@ public class protocol_beehome { //080835 :指令流水号 //1 : 表示设备为激活状态(绑定成功) 0:表示设备为未激活状态(解绑成功) - String[] list=cmd.split(CMDSPLIT); + String[] list = cmd.split(CMDSPLIT); - if (list.length==4){ - String index=list[2]; - String type=list[3]; + if (list.length == 4) { + String index = list[2]; + String type = list[3]; connection.send(AP68(index)); - ICLogger.i("收到服务器消息:"+(type.equals("1")?"绑定成功 ":"未激活或者解绑")); + ICLogger.i("收到服务器消息:" + (type.equals("1") ? "绑定成功 " : "未激活或者解绑")); - }else{ + } else { ICLogger.i("BP86 format error!"); } } + //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86) - public static StringMessage AP86(String index){ + public static StringMessage AP86(String index) { //设备响应: IWAP86, 080835# //080835:指令流水号 - return genStringMessage(cmdMap.get(CMD_TYPE.AP86),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP86)) + return genStringMessage(cmdMap.get(CMD_TYPE.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# @@ -1540,9 +1545,9 @@ public class protocol_beehome { //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]; @@ -1554,47 +1559,48 @@ public class protocol_beehome { 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!"); } } - public static StringMessage AP88(String index){ + + public static StringMessage AP88(String index) { //设备响应: IWAP88, 080835# //080835:指令流水号 - return genStringMessage(cmdMap.get(CMD_TYPE.AP88),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88)) + return genStringMessage(cmdMap.get(CMD_TYPE.AP88), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88)) .append(CMDSPLIT).append(index) .append(CMDEND).toString()); } - public static void handleBP88(String cmd,Connection connection){ + public static void handleBP88(String cmd, Connection connection) { // IWBP88,080835# - String[] list=cmd.split(CMDSPLIT); + String[] list = cmd.split(CMDSPLIT); - if (list.length==2){ - String index=list[1]; + if (list.length == 2) { + String index = list[1]; connection.send(AP88(index)); ICLogger.i("收到服务器消息:查询设备"); - }else{ + } else { ICLogger.i("BP88 format error!"); } } //18.18.设置心率/血压阀值(下行协议号:BP89,响应:AP89) - public static StringMessage AP89(String index){ + public static StringMessage AP89(String index) { //设备响应: IWAP89, 080835# //080835:指令流水号 - return genStringMessage(cmdMap.get(CMD_TYPE.AP89),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP89)) + return genStringMessage(cmdMap.get(CMD_TYPE.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# @@ -1609,36 +1615,36 @@ public class protocol_beehome { //90: 低压阀值,低压高于该阀值上传血压,如果未设置,则留空 //110: 高压阀值,高压低于该阀值上传血压,如果未设置,则留空 //140: 高压阀值,高压高于该阀值上传血压,如果未设置,则留空 - String[] list=cmd.split(CMDSPLIT); - if (list.length==9){ - String index=list[2]; - String PPGH=list[3]; - String PPGL=list[4]; - String BPH_H=list[5]; - String BPH_L=list[6]; - String BPL_H=list[7]; - String BPL_L=list[8]; + String[] list = cmd.split(CMDSPLIT); + if (list.length == 9) { + String index = list[2]; + String PPGH = list[3]; + String PPGL = list[4]; + String BPH_H = list[5]; + String BPH_L = list[6]; + String BPL_H = list[7]; + String BPL_L = list[8]; connection.send(AP89(index)); - ICLogger.i("收到服务器指令:心率/血压阀值 "+PPGH+","+PPGL+","+BPH_H+","+BPH_L+","+BPL_H+","+BPL_L); - }else{ + ICLogger.i("收到服务器指令:心率/血压阀值 " + PPGH + "," + PPGL + "," + BPH_H + "," + BPH_L + "," + BPL_H + "," + BPL_L); + } else { ICLogger.i("BP89 format error!"); } } //体温间隔测量 (后台测试体温)(下行协议号:BPTE,响应:APTE) - public static StringMessage APTE(String index,int freq){ + public static StringMessage APTE(String index, int freq) { //设备响应: IWAPTE,080835,60# //080835:指令流水号 //1:表示设备接受数据成功,0表示设备接受数据失败 - return genStringMessage(cmdMap.get(CMD_TYPE.APTE),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTE)) + return genStringMessage(cmdMap.get(CMD_TYPE.APTE), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTE)) .append(CMDSPLIT).append(index) .append(CMDSPLIT).append(freq) .append(CMDEND).toString()); } - public void handleBPTE(String cmd,Connection connection,Runtime runtime){ + public void handleBPTE(String cmd, Connection connection, Runtime runtime) { //示例: //IWBPTE,353456789012345,080835,60# @@ -1648,8 +1654,8 @@ public class protocol_beehome { //353456789012345:IMEI号,设备唯一ID //080835 :指令流水号 //60 : 上传间隔,单位分钟(60分钟上传一次体温,终端收到后立即开始测量一次并重置定时器) - String[] list=cmd.split(CMDSPLIT); - if (list.length==4){ + String[] list = cmd.split(CMDSPLIT); + if (list.length == 4) { try { String index = list[2]; String freqstr = list[3]; @@ -1659,9 +1665,10 @@ public class protocol_beehome { Config.setTemperatureTestCycle(runtime, freq * 60); 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; // wrist_temp=TemperatureUtil.get_temp_value_adjusted(); @@ -1669,49 +1676,48 @@ public class protocol_beehome { // String temperatureMsg=APTP(wrist_temp,body_temp); // connection.send(genStringMessage("APTP",temperatureMsg)); // ICLogger.i("发送体温测量值 "+temperatureMsg); - }else{ + } else { ICLogger.i("BP89 format error!"); } } //体温上行(上行协议号:APTP,响应:BPTP) - public static StringMessage APTP(double wrist_temp,double body_temp){ + public static StringMessage APTP(double wrist_temp, double body_temp) { //设备: IWAPTP,36.3,33,132# //IW:标识符 //APTP : 命令字符 //35.3:测量体温 (摄氏度) //33,132:温补用的参数,此处不用,可以用0 来代替。 - return genStringMessage(cmdMap.get(CMD_TYPE.APTP),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTP)) - .append(CMDSPLIT).append(String.format("%1$.2f",wrist_temp)) - .append(CMDSPLIT).append(String.format("%1$.2f",body_temp)) + return genStringMessage(cmdMap.get(CMD_TYPE.APTP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTP)) + .append(CMDSPLIT).append(String.format("%1$.2f", wrist_temp)) + .append(CMDSPLIT).append(String.format("%1$.2f", body_temp)) .append(CMDSPLIT).append(0) .append(CMDEND).toString()); } - public void handleBPTP(){ + public void handleBPTP() { ICLogger.d("BPTP 服务器收到体温数据!"); } - public static StringMessage APX1(String id){ + public static StringMessage APX1(String id) { //设备响应: IWAPX1, 080835# //080835:指令流水号 - return genStringMessage(cmdMap.get(CMD_TYPE.APX1),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APX1)) + return genStringMessage(cmdMap.get(CMD_TYPE.APX1), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APX1)) .append(CMDSPLIT).append(id) .append(CMDEND).toString()); } /** - * * @param cmd * @param connection * @param runtime */ - public void handleBPX1(String cmd,Connection connection,Runtime runtime){ + public void handleBPX1(String cmd, Connection connection, Runtime runtime) { //IWBPX1,353456789012345,080835,2,1,-3,0# //说明: // IW:标识符 @@ -1722,14 +1728,14 @@ public class protocol_beehome { // 1:高压修正值 // -3:低压修正值 // 0:血氧修正值 - String[] list=cmd.split(CMDSPLIT); - if (list.length==7){ - String index=list[2]; - String imei=list[1]; - String strXL=list[3]; - String strBPH=list[4]; - String strBPL=list[5]; - String strSpO2=list[6]; + String[] list = cmd.split(CMDSPLIT); + if (list.length == 7) { + String index = list[2]; + String imei = list[1]; + String strXL = list[3]; + String strBPH = list[4]; + String strBPL = list[5]; + String strSpO2 = list[6]; connection.send(APX1(index)); @@ -1747,31 +1753,31 @@ public class protocol_beehome { Config.setSPo2Adjust(mRuntime.getContextProxy().context, spo2_adjust); ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", BPH " + strBPH + ", BPL " + strBPL + ", PPG " + strXL + ", Sp02 " + strSpO2); - }catch (Exception e){ - ICLogger.e(e.getMessage(),e); + } catch (Exception e) { + ICLogger.e(e.getMessage(), e); } - }else{ + } else { ICLogger.i("BPX1 format error!"); } } - - public static StringMessage APS4(String id){ + public static StringMessage APS4(String id) { //设备响应: IWAPS4,080835# //080835:指令流水号 - return genStringMessage(cmdMap.get(CMD_TYPE.APS4),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4)) + return genStringMessage(cmdMap.get(CMD_TYPE.APS4), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4)) .append(CMDSPLIT).append(id) .append(CMDEND).toString()); } /** * 主要为久坐设置提醒时长。 + * * @param cmd * @param connection * @param runtime */ - public void handleBPS4(String cmd,Connection connection,Runtime runtime){ + public void handleBPS4(String cmd, Connection connection, Runtime runtime) { //IWBPS4,353456789012345,080835,1|1234567|0900|1100|180, 2|1234567|0900|1100|180, 1|1234567|0900|1100|180# //说明: // IW:标识符 @@ -1781,46 +1787,46 @@ public class protocol_beehome { // 1|1234567|0900|1100|180:类型(1久坐,2喝水)|重复周期|开始时间|结束时间|时间间隔(单位秒) // 重复周期、开始结束时间格式 参考BP85闹钟设置, //#:结尾标识符 - String[] list=cmd.split(CMDSPLIT); - if (list.length>=4){ + String[] list = cmd.split(CMDSPLIT); + if (list.length >= 4) { - String index=list[2]; - String imei=list[1]; + String index = list[2]; + String imei = list[1]; connection.send(APS4(index)); String setting1; - switch(list.length){ + switch (list.length) { case 10: - setting1=list[9]; - ICLogger.i("set 7th alarm "+setting1); + setting1 = list[9]; + ICLogger.i("set 7th alarm " + setting1); case 9: - setting1=list[8]; - ICLogger.i("set 6th alarm "+setting1); + setting1 = list[8]; + ICLogger.i("set 6th alarm " + setting1); case 8: - setting1=list[7]; - ICLogger.i("set 5th alarm "+setting1); + setting1 = list[7]; + ICLogger.i("set 5th alarm " + setting1); case 7: - setting1=list[6]; - ICLogger.i("set 4th alarm "+setting1); + setting1 = list[6]; + ICLogger.i("set 4th alarm " + setting1); case 6: - setting1=list[5]; - ICLogger.i("set 3rd alarm "+setting1); + setting1 = list[5]; + ICLogger.i("set 3rd alarm " + setting1); case 5: - setting1=list[4]; - ICLogger.i("set 2nt alarm "+setting1); + setting1 = list[4]; + ICLogger.i("set 2nt alarm " + setting1); case 4: - setting1=list[3]; - ICLogger.i("set 1st alarm "+setting1); + setting1 = list[3]; + ICLogger.i("set 1st alarm " + setting1); break; } - ICLogger.i("Handle BPX1 IMEI "+imei+",index "+index+", get "+(list.length-3) +" settings"); - }else{ + ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", get " + (list.length - 3) + " settings"); + } else { ICLogger.i("BPX1 format error!"); } } - public static StringMessage APHP(Runtime ds){ + public static StringMessage APHP(Runtime ds) { //IWAPHP,60,130,85,95,90, , , , , , , , # //IW:标识符 //APHT : 命令字符 @@ -1830,7 +1836,7 @@ public class protocol_beehome { //95:血氧 //90:血糖 // 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空 - return genStringMessage( cmdMap.get(CMD_TYPE.APHP),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP)) + return genStringMessage(cmdMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP)) .append(CMDSPLIT).append(ds.getHRS().getPPG()) .append(CMDSPLIT).append(ds.getHRS().getBPH()) .append(CMDSPLIT).append(ds.getHRS().getBPL()) @@ -1846,7 +1852,8 @@ public class protocol_beehome { .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 : 命令字符 @@ -1856,7 +1863,7 @@ public class protocol_beehome { //95:血氧 //90:血糖 // 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空 - return genStringMessage(cmdMap.get(CMD_TYPE.APHP),new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP)) + return genStringMessage(cmdMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP)) .append(CMDSPLIT).append(ppg) .append(CMDSPLIT).append(bph) .append(CMDSPLIT).append(bpl) @@ -1873,7 +1880,7 @@ public class protocol_beehome { .append(CMDEND).toString()); } - public void handleBPHP(){ + public void handleBPHP() { ICLogger.i("服务器收到APHP 心率血压血氧 !"); @@ -1882,66 +1889,66 @@ public class protocol_beehome { 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服务器不适用 @@ -1951,111 +1958,111 @@ public class protocol_beehome { 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 BP40: //服务器推送文本 - handleBP40(mConnection,mRuntime,cmd); + handleBP40(mConnection, mRuntime, cmd); ICLogger.i("收到服务器推送文本消息"); - mConnection.DeliverCMDMessageToSystem("showTxt",cmd);//通知下面线程状态变化 + mConnection.DeliverCMDMessageToSystem("showTxt", cmd);//通知下面线程状态变化 break; case BPXL: - handleBPXL(cmd,mConnection); + handleBPXL(cmd, mConnection); ICLogger.i("收到服务器心率检测命令"); - if(mRuntime.check_stat_do_ppg_test()) - HeartRateManager.triggerPPGtest(); + if (mRuntime.check_stat_do_ppg_test()) + HeartRateManager.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("服务器收到上传的心率血压"); - mConnection.DeliverCMDMessageToSystem("APHT",cmd);//通知下面线程状态变化 + mConnection.DeliverCMDMessageToSystem("APHT", cmd);//通知下面线程状态变化 break; case BP84: - handleBP84(cmd,mConnection); + handleBP84(cmd, mConnection); ICLogger.i("收到服务器白名单命令"); break; case BP86: //绑定解绑消息 - handleBP86(cmd,mConnection,mRuntime); - mConnection.DeliverCMDMessageToSystem("AP86",cmd);//通知下面线程状态变化 + handleBP86(cmd, mConnection, mRuntime); + mConnection.DeliverCMDMessageToSystem("AP86", cmd);//通知下面线程状态变化 break; case BP88: //收到查找设备消息 - handleBP88(cmd,mConnection); - mConnection.DeliverCMDMessageToSystem("findDev",cmd);//通知下面线程状态变化 + handleBP88(cmd, mConnection); + mConnection.DeliverCMDMessageToSystem("findDev", cmd);//通知下面线程状态变化 break; case BP89: //心率/血压阀值 - handleBP89(cmd,mConnection); - mConnection.DeliverCMDMessageToSystem("AP89",cmd);//通知下面线程状态变化 + handleBP89(cmd, mConnection); + mConnection.DeliverCMDMessageToSystem("AP89", cmd);//通知下面线程状态变化 break; case BPTE: //设置测试体温 - handleBPTE(cmd,mConnection,mRuntime); - mConnection.DeliverCMDMessageToSystem("APTE",cmd);//通知下面线程状态变化 + handleBPTE(cmd, mConnection, mRuntime); + mConnection.DeliverCMDMessageToSystem("APTE", cmd);//通知下面线程状态变化 break; case BPTP: handleBPTP(); - mConnection.DeliverCMDMessageToSystem("APTP",cmd);//通知下面线程状态变化 + mConnection.DeliverCMDMessageToSystem("APTP", cmd);//通知下面线程状态变化 break; case BPHP: handleBPHP(); - mConnection.DeliverCMDMessageToSystem("APHP",cmd);//通知下面线程状态变化 + mConnection.DeliverCMDMessageToSystem("APHP", cmd);//通知下面线程状态变化 break; case BPX1://设置 心率血压血氧修正值 - handleBPX1(cmd,mConnection,mRuntime); + handleBPX1(cmd, mConnection, mRuntime); ICLogger.i("收到服务器设置 心率血压血氧修正值BPX1"); - mConnection.DeliverCMDMessageToSystem("APX1",cmd);//通知下面线程状态变化 + mConnection.DeliverCMDMessageToSystem("APX1", cmd);//通知下面线程状态变化 break; case BPS4: //提醒设置(时间段) 主要为久坐设置提醒时长。 - handleBPS4(cmd,mConnection,mRuntime); + handleBPS4(cmd, mConnection, mRuntime); ICLogger.i("收到 提醒设置(时间段)"); - mConnection.DeliverCMDMessageToSystem("APS4",cmd);//通知下面线程状态变化 + mConnection.DeliverCMDMessageToSystem("APS4", cmd);//通知下面线程状态变化 break; } @@ -2067,12 +2074,12 @@ public class protocol_beehome { public boolean handleCmd(CMD_TYPE type, String cmd, byte[] bytes) { //只有需要传递二级制数据的才需要这个函数,目前只有BP28需要 - boolean ret=true; - ICLogger.i("handleCmd "+type.name() + " "+cmd+" bytelen="+bytes.length ); - if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " +new String(bytes)); + boolean ret = true; + ICLogger.i("handleCmd " + type.name() + " " + cmd + " bytelen=" + bytes.length); + if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + new String(bytes)); switch (type) { case BP28: - handleBP28(mConnection,cmd, mRuntime,bytes); + handleBP28(mConnection, cmd, mRuntime, bytes); ICLogger.i("收到服务器语音BP28"); mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化 break; diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java index ad66aace..e3e2aea3 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -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 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 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 contactArray=new ArrayList(); - 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 contactArray=new ArrayList(); - 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 contactArray = new ArrayList(); + 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 contactArray = new ArrayList(); + 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 contactArray=new ArrayList(); - for(int i=0; i= 0) && (listlen % 2 == 0)); + if (ispared) { + ArrayList contactArray = new ArrayList(); + 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; diff --git a/app/src/main/java/com/ic/protocols/protocol_ic.java b/app/src/main/java/com/ic/protocols/protocol_ic.java index 49944788..3b970173 100644 --- a/app/src/main/java/com/ic/protocols/protocol_ic.java +++ b/app/src/main/java/com/ic/protocols/protocol_ic.java @@ -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); diff --git a/app/src/main/java/com/ic/protocols/protocol_jiai.java b/app/src/main/java/com/ic/protocols/protocol_jiai.java index 243f0565..ad82be43 100644 --- a/app/src/main/java/com/ic/protocols/protocol_jiai.java +++ b/app/src/main/java/com/ic/protocols/protocol_jiai.java @@ -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 contactArray=new ArrayList(); - 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 contactArray = new ArrayList(); + 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 contactArray=new ArrayList(); - 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 contactArray = new ArrayList(); + 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 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 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; diff --git a/app/src/main/java/com/ic/protocols/protocol_mqtt.java b/app/src/main/java/com/ic/protocols/protocol_mqtt.java index 502436f8..db2b09d1 100644 --- a/app/src/main/java/com/ic/protocols/protocol_mqtt.java +++ b/app/src/main/java/com/ic/protocols/protocol_mqtt.java @@ -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 index 00000000..389575c8 --- /dev/null +++ b/app/src/main/java/com/ic/work/domain/HeartRate.java @@ -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 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 CREATOR = new Creator() { + @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 index 00000000..99d8776b --- /dev/null +++ b/app/src/main/java/com/ic/work/domain/Temperature.java @@ -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 CREATOR = new Creator() { + @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 + + '}'; + } +} diff --git a/core/README.md b/core/README.md index 542c6a15..eb7cd42f 100644 --- a/core/README.md +++ b/core/README.md @@ -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). diff --git a/local.properties b/local.properties index a202436a..98600856 100644 --- a/local.properties +++ b/local.properties @@ -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 diff --git a/replay_pid451856.log b/replay_pid451856.log index f1d193ca..9cc66b6d 100644 --- a/replay_pid451856.log +++ b/replay_pid451856.log @@ -599,7 +599,7 @@ instanceKlass com/google/wireless/android/sdk/stats/CppHeadersViewEventOrBuilder instanceKlass com/google/wireless/android/sdk/stats/LintActionOrBuilder instanceKlass com/google/wireless/android/sdk/stats/OomDialogEventOrBuilder instanceKlass com/google/wireless/android/sdk/stats/JniInspectionEventOrBuilder -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$1 +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$1 instanceKlass com/google/wireless/android/sdk/stats/CMakeEditingEventOrBuilder instanceKlass com/google/wireless/android/sdk/stats/DataBindingEventOrBuilder instanceKlass com/google/wireless/android/sdk/stats/UserSentimentOrBuilder @@ -2196,7 +2196,7 @@ instanceKlass com/android/builder/dexing/D8DiagnosticsHandler instanceKlass com/android/tools/r8/DiagnosticsHandler instanceKlass com/android/builder/multidex/D8MainDexList instanceKlass com/android/build/gradle/internal/tasks/D8MainDexListTaskKt -instanceKlass org/gradle/internal/work/DefaultAsyncWorkTracker$2 +instanceKlass org/gradle/internal/com.ic.work/DefaultAsyncWorkTracker$2 instanceKlass com/google/common/collect/ImmutableSet$SerializedForm instanceKlass com/android/build/gradle/internal/tasks/D8MainDexListTask$MainDexListRunnable$Params instanceKlass com/android/build/gradle/internal/tasks/D8MainDexListTask$MainDexListRunnable @@ -2798,12 +2798,12 @@ instanceKlass org/gradle/workers/internal/ExecuteWorkItemBuildOperationType$Resu instanceKlass org/gradle/workers/internal/AbstractWorker$Work instanceKlass org/gradle/workers/internal/AbstractWorker instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor$3 -instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueue$ExecutionRunner$1 -instanceKlass org/gradle/internal/work/DefaultAsyncWorkTracker$1 -instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueue$ExecutionRunner +instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueue$ExecutionRunner$1 +instanceKlass org/gradle/internal/com.ic.work/DefaultAsyncWorkTracker$1 +instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueue$ExecutionRunner instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor$LazyChildWorkerLeaseLock instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor$1 -instanceKlass org/gradle/internal/work/AbstractConditionalExecution +instanceKlass org/gradle/internal/com.ic.work/AbstractConditionalExecution instanceKlass org/gradle/process/internal/DefaultExecActionFactory$ImmutableJavaForkOptions instanceKlass org/gradle/workers/internal/DaemonForkOptionsBuilder instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor$2 @@ -2927,7 +2927,7 @@ instanceKlass com/google/gson/internal/$Gson$Types$WildcardTypeImpl instanceKlass com/android/build/gradle/internal/api/artifact/BuildableArtifactUtil instanceKlass com/android/build/gradle/internal/tasks/IncrementalTask$taskAction$$inlined$recordTaskAction$1 instanceKlass org/gradle/internal/execution/history/changes/NonIncrementalInputChanges$$Lambda$360 -instanceKlass org/gradle/work/FileChange +instanceKlass org/gradle/com.ic.work/FileChange instanceKlass org/gradle/internal/execution/history/changes/NonIncrementalInputChanges instanceKlass com/android/build/gradle/tasks/ProcessApplicationManifest$$Lambda$359 instanceKlass com/android/build/gradle/tasks/ProcessApplicationManifest$$Lambda$358 @@ -3995,17 +3995,17 @@ instanceKlass com/android/build/gradle/tasks/ProcessLibraryManifest$CreationActi instanceKlass com/android/build/gradle/tasks/ProcessLibraryManifest$CreationAction$$Lambda$240 instanceKlass com/android/build/gradle/tasks/ProcessLibraryManifest$CreationAction$$Lambda$239 instanceKlass com/android/build/gradle/internal/tasks/Workers$WorkerExecutorAdapter -instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueue +instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueue instanceKlass org/gradle/workers/internal/DaemonForkOptions -instanceKlass org/gradle/internal/work/AsyncWorkCompletion -instanceKlass org/gradle/internal/work/ConditionalExecution +instanceKlass org/gradle/internal/com.ic.work/AsyncWorkCompletion +instanceKlass org/gradle/internal/com.ic.work/ConditionalExecution instanceKlass org/gradle/workers/internal/ActionExecutionSpec instanceKlass org/gradle/workers/WorkerConfiguration instanceKlass org/gradle/workers/internal/DefaultWorkerExecutor instanceKlass org/gradle/workers/internal/NoIsolationWorkerFactory -instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueueFactory +instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueueFactory instanceKlass org/gradle/process/internal/worker/child/DefaultWorkerDirectoryProvider -instanceKlass org/gradle/internal/work/DefaultAsyncWorkTracker +instanceKlass org/gradle/internal/com.ic.work/DefaultAsyncWorkTracker instanceKlass org/gradle/api/internal/classloading/NoOpGroovySystemLoader instanceKlass org/gradle/api/internal/classloading/GroovySystemLoader instanceKlass org/gradle/api/internal/classloading/GroovySystemLoaderFactory @@ -5098,7 +5098,7 @@ instanceKlass com/android/build/gradle/internal/VariantManager$$Lambda$101 instanceKlass com/android/build/gradle/internal/publishing/AndroidArtifacts instanceKlass com/android/build/gradle/internal/VariantManager$$Lambda$100 instanceKlass org/gradle/api/internal/artifacts/transform/TransformationStep$1 -instanceKlass org/gradle/work/InputChanges +instanceKlass org/gradle/com.ic.work/InputChanges instanceKlass org/gradle/internal/instantiation/DependencyInjectingInstantiator$1 instanceKlass org/gradle/api/internal/tasks/properties/FileParameterUtils instanceKlass org/gradle/api/internal/tasks/properties/ValidationAction @@ -6351,8 +6351,8 @@ instanceKlass org/gradle/api/tasks/CompatibilityAdapterForTaskInputs instanceKlass org/gradle/api/internal/project/taskfactory/TaskFactory$1 instanceKlass org/gradle/api/internal/tasks/DefaultTaskContainer$1 instanceKlass org/codehaus/groovy/runtime/ScriptBytecodeAdapter -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$5$1 -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$5 +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$5$1 +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$5 instanceKlass org/gradle/api/internal/project/DefaultProjectStateRegistry$ProjectStateImpl$1 instanceKlass org/gradle/configuration/internal/DefaultListenerBuildOperationDecorator$BuildOperationEmittingInvocationHandler instanceKlass org/gradle/configuration/internal/DefaultListenerBuildOperationDecorator$1 @@ -7411,7 +7411,7 @@ instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationServi instanceKlass org/gradle/internal/operations/notify/BuildOperationNotificationBridge$2$1$1 instanceKlass org/gradle/api/internal/DefaultMutationGuard$2 instanceKlass org/gradle/api/internal/project/BuildOperationCrossProjectConfigurator$CrossConfigureProjectBuildOperation -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$2 +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$2 instanceKlass org/gradle/api/internal/project/BuildOperationCrossProjectConfigurator$2 instanceKlass org/gradle/api/internal/project/BuildOperationCrossProjectConfigurator$BlockConfigureBuildOperation instanceKlass org/gradle/initialization/NotifyingBuildLoader$3$1 @@ -7461,7 +7461,7 @@ instanceKlass org/apache/commons/lang/builder/HashCodeBuilder instanceKlass com/google/common/base/Equivalence$Wrapper instanceKlass org/gradle/internal/reflect/Methods instanceKlass org/gradle/internal/reflect/PropertyExtractor -instanceKlass org/gradle/work/Incremental +instanceKlass org/gradle/com.ic.work/Incremental instanceKlass org/gradle/api/tasks/PathSensitive instanceKlass org/gradle/api/tasks/SkipWhenEmpty instanceKlass org/gradle/api/tasks/Optional @@ -7681,7 +7681,7 @@ instanceKlass org/gradle/initialization/DefaultGradleLauncher$ConfigureBuild instanceKlass com/google/common/collect/AbstractMapBasedMultimap$KeySet$1 instanceKlass com/google/common/collect/CompactHashMap$Itr instanceKlass org/gradle/internal/Pair -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$ProjectLockRegistry$1 +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$ProjectLockRegistry$1 instanceKlass org/gradle/api/internal/project/DefaultProjectStateRegistry$ProjectStateImpl instanceKlass org/gradle/api/internal/artifacts/DefaultProjectComponentIdentifier instanceKlass org/gradle/initialization/AbstractProjectSpec @@ -8283,19 +8283,19 @@ instanceKlass org/gradle/internal/Actions$NullAction instanceKlass org/gradle/internal/Actions instanceKlass org/gradle/internal/operations/notify/BuildOperationNotificationBridge$2$1 instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationService$AcquireLocks -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$3 +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$3 instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationService$2 instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationService$DefaultResourceLockState instanceKlass org/gradle/internal/resources/ResourceLockState -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$4 +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$4 instanceKlass com/google/common/collect/Iterables instanceKlass org/gradle/internal/invocation/GradleBuildController$3 instanceKlass org/gradle/internal/resources/AbstractTrackedResourceLock -instanceKlass org/gradle/internal/work/WorkerLeaseRegistry$WorkerLeaseCompletion +instanceKlass org/gradle/internal/com.ic.work/WorkerLeaseRegistry$WorkerLeaseCompletion instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry$3 instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry$2 instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry$1 -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$WorkerLeaseLockRegistry$1 +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$WorkerLeaseLockRegistry$1 instanceKlass org/gradle/internal/invocation/GradleBuildController$1 instanceKlass org/gradle/util/GradleVersion instanceKlass com/google/common/base/Preconditions @@ -8902,7 +8902,7 @@ instanceKlass org/gradle/api/initialization/dsl/ScriptHandler instanceKlass org/gradle/api/internal/initialization/DefaultScriptHandlerFactory instanceKlass org/gradle/workers/internal/DefaultWorkResult instanceKlass org/gradle/api/tasks/WorkResult -instanceKlass org/gradle/internal/work/ConditionalExecutionQueue +instanceKlass org/gradle/internal/com.ic.work/ConditionalExecutionQueue instanceKlass org/gradle/groovy/scripts/ScriptRunner instanceKlass org/gradle/groovy/scripts/internal/DefaultScriptRunnerFactory instanceKlass org/gradle/groovy/scripts/internal/BuildScopeInMemoryCachingScriptClassCompiler @@ -9460,15 +9460,15 @@ instanceKlass com/google/common/cache/CacheBuilder instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry$ResourceLockProducer instanceKlass org/gradle/internal/resources/AbstractResourceLockRegistry instanceKlass org/gradle/internal/resources/ResourceLockRegistry -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$ProjectLockStatisticsImpl +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$ProjectLockStatisticsImpl instanceKlass org/gradle/internal/resources/ProjectLockStatistics -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$Root -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService$LeaseHolder -instanceKlass org/gradle/internal/work/WorkerLeaseRegistry$WorkerLease +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$Root +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService$LeaseHolder +instanceKlass org/gradle/internal/com.ic.work/WorkerLeaseRegistry$WorkerLease instanceKlass org/gradle/internal/resources/ResourceLock -instanceKlass org/gradle/internal/work/DefaultWorkerLeaseService +instanceKlass org/gradle/internal/com.ic.work/DefaultWorkerLeaseService instanceKlass org/gradle/internal/resources/DefaultResourceLockCoordinationService -instanceKlass org/gradle/internal/work/StopShieldingWorkerLeaseService +instanceKlass org/gradle/internal/com.ic.work/StopShieldingWorkerLeaseService instanceKlass org/gradle/composite/internal/DefaultBuildableCompositeBuildContext instanceKlass com/google/common/collect/ListMultimap instanceKlass org/gradle/plugins/ide/internal/IdeArtifactStore @@ -9573,7 +9573,7 @@ instanceKlass org/gradle/workers/internal/WorkerExecutionQueueFactory instanceKlass org/gradle/workers/internal/IsolatedClassloaderWorkerFactory instanceKlass org/gradle/workers/internal/WorkerDaemonFactory instanceKlass org/gradle/workers/internal/WorkerFactory -instanceKlass org/gradle/internal/work/ConditionalExecutionQueueFactory +instanceKlass org/gradle/internal/com.ic.work/ConditionalExecutionQueueFactory instanceKlass org/gradle/process/internal/worker/child/WorkerDirectoryProvider instanceKlass org/gradle/workers/internal/WorkersServices$BuildSessionScopeServices instanceKlass org/gradle/internal/service/scopes/BuildSessionScopeServices$1 @@ -9593,7 +9593,7 @@ instanceKlass org/gradle/cache/internal/CleanupActionFactory instanceKlass org/gradle/internal/filewatch/PendingChangesManager instanceKlass org/gradle/internal/fingerprint/FileCollectionFingerprinterRegistry instanceKlass org/gradle/internal/fingerprint/classpath/CompileClasspathFingerprinter -instanceKlass org/gradle/internal/work/AsyncWorkTracker +instanceKlass org/gradle/internal/com.ic.work/AsyncWorkTracker instanceKlass org/gradle/api/internal/project/CrossProjectConfigurator instanceKlass org/gradle/internal/operations/logging/LoggingBuildOperationProgressBroadcaster instanceKlass org/gradle/internal/operations/notify/BuildOperationNotificationBridge$3 @@ -9610,9 +9610,9 @@ instanceKlass org/gradle/api/internal/CollectionCallbackActionDecorator instanceKlass org/gradle/internal/operations/BuildOperationQueueFactory instanceKlass org/gradle/configuration/internal/UserCodeApplicationContext instanceKlass org/gradle/initialization/GradleLauncherFactory -instanceKlass org/gradle/internal/work/WorkerLeaseService +instanceKlass org/gradle/internal/com.ic.work/WorkerLeaseService instanceKlass org/gradle/internal/resources/ProjectLeaseRegistry -instanceKlass org/gradle/internal/work/WorkerLeaseRegistry +instanceKlass org/gradle/internal/com.ic.work/WorkerLeaseRegistry instanceKlass org/gradle/internal/operations/BuildOperationExecutor instanceKlass org/gradle/internal/service/scopes/CrossBuildSessionScopeServices instanceKlass org/gradle/internal/service/scopes/DefaultGradleUserHomeScopeServiceRegistry$Services @@ -11578,7 +11578,7 @@ instanceKlass org/apache/tools/ant/BuildException instanceKlass org/gradle/internal/typeconversion/TypeConversionException instanceKlass com/google/common/util/concurrent/UncheckedExecutionException instanceKlass com/google/common/cache/CacheLoader$InvalidCacheLoadException -instanceKlass org/gradle/internal/work/NoAvailableWorkerLeaseException +instanceKlass org/gradle/internal/com.ic.work/NoAvailableWorkerLeaseException instanceKlass org/gradle/launcher/daemon/server/BadlyFormedRequestException instanceKlass org/gradle/internal/remote/internal/MessageIOException instanceKlass org/gradle/cache/InsufficientLockModeException @@ -12918,7 +12918,7 @@ instanceKlass com/android/ide/common/workers/WorkerExecutorFacade$IsolationMode instanceKlass java/nio/file/AccessMode instanceKlass com/google/common/collect/Iterators$EmptyModifiableIterator instanceKlass com/google/common/collect/MultimapBuilder$LinkedListSupplier -instanceKlass org/gradle/work/ChangeType +instanceKlass org/gradle/com.ic.work/ChangeType instanceKlass org/gradle/internal/change/ChangeTypeInternal instanceKlass com/android/ide/common/xml/XmlFormatStyle instanceKlass com/android/ide/common/xml/XmlAttributeSortOrder @@ -12974,7 +12974,7 @@ instanceKlass org/gradle/execution/taskgraph/DefaultTaskExecutionGraph$GraphStat instanceKlass groovy/lang/MetaClassImpl$InvokeMethodResult instanceKlass com/google/wireless/android/sdk/stats/GradleBuildProject$GradlePlugin instanceKlass com/android/ide/common/resources/FileValidity$FileStatus -instanceKlass org/gradle/internal/work/DefaultConditionalExecutionQueue$QueueState +instanceKlass org/gradle/internal/com.ic.work/DefaultConditionalExecutionQueue$QueueState instanceKlass org/gradle/workers/IsolationMode instanceKlass org/gradle/external/javadoc/JavadocOutputLevel instanceKlass org/gradle/api/tasks/bundling/ZipEntryCompression