-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":689,"versionName":"2011061556","enabled":true,"outputFile":"ICSer_V689_2011061556_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V689_2011061556_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":692,"versionName":"2011112333","enabled":true,"outputFile":"ICSer_V692_2011112333_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V692_2011112333_release.apk","properties":{}}]
\ No newline at end of file
\r
import com.enqualcomm.support.bean.ICLocation;\r
import com.enqualcomm.support.bean.Runtime;\r
+import com.enqualcomm.support.utils.ICAudioManager;\r
import com.enqualcomm.support.utils.ICLogger;\r
import com.enqualcomm.support.utils.SharPreferenceUtil;\r
import com.enqualcomm.support.utils.TimeUtil;\r
import com.enqualcomm.support.utils.Util;\r
+import com.enqualcomm.support.utils.VibrateUtil;\r
import com.ic.jni.ICJniUtils;\r
import com.ic.protocols.protocolAPIHelper;\r
\r
public static boolean forceMoveCheck=true;\r
public static boolean forceWearCheck=true;\r
\r
+ private static int DurationOfVibration = 10;\r
+ private static int MasterVolume = 10;\r
+\r
+ private static final String KEYDurationOfVibration = "DurationVib";\r
+ private static final String KeyMasterVolume = "MasterVolume";\r
\r
public static final String DefaultLogFtpServer="icfota.snicker.com.cn";\r
public static final String DefaultLogFtpUser="ftpuser";\r
public static String c43_branch_name="none";\r
public static String custom_name="none";\r
\r
+ //配置是否广播提示框信息给外部应用显示\r
+ public static boolean noBroadCastSMSNotify=false;\r
+ public static boolean noBroadCastPushTxtNotify=false;\r
+\r
+\r
+ //protocol内部Dialog配置,true表示用外部提示窗,false表示用协议内部提示窗\r
public static boolean noSMSNotifyDialog=false;\r
public static boolean noPushTxtNotifyDialog=false;\r
public static boolean noVoiceNotifyDialog=false;\r
+\r
+ //是否SOS拨号的开关,false表示只发送系统sosalarm,不发起SOS拨号\r
public static boolean SOSNoNeedDial=false;\r
\r
+ //ic68只有体温没有腕温,它开启代表原来的腕温函数取出的就是体温,不需要再进行换算了。\r
public static boolean disableWristTemp=false;\r
+ //配置是否有温度传感器\r
public static boolean noTempSensor=false;\r
+ //配置是否有心率传感器\r
public static boolean noPPGSensor=false;\r
+ //配置脱腕报警是否需要弹出脱腕提示\r
public static boolean needBroadcastAntiAlarm=true;\r
+ //定位是否使用wifi的配置。\r
public static boolean disableWiFiScan=false;\r
+\r
public static int BLEScanProtocol=0; /** 0 代表扫描beacon后 自行判断是否在指定区域,需要协议绑定beacon地址。\r
* 1 代表扫描beacon后,直接把扫描结果上报即可。\r
- **/\r
+ **/\r
+\r
public static boolean UsePolingCheckWeared=false;\r
\r
static {\r
final static String KeyPolingCycleCheckAnti="PolingCycleCheckAnti";\r
final static String KeyBleScanCycle="BleScanCycle";\r
\r
+\r
+ final static String KeyLastUnReadMessage="UnreadMsg";\r
+\r
+\r
+ public static void setDurationOfVibration(Context context, int cycle){\r
+ SharPreferenceUtil.setPrefInt(context,KEYDurationOfVibration,cycle);\r
+ }\r
+\r
+ public static int getDurationOfVibration(Context context){\r
+ return SharPreferenceUtil.getPrefInt(context,KEYDurationOfVibration,1000);\r
+ }\r
+\r
+ public static void setMasterVolume(Context context, int cycle){\r
+ SharPreferenceUtil.setPrefInt(context,KeyMasterVolume,cycle);\r
+ }\r
+\r
+ public static int getMasterVolume(Context context){\r
+ return SharPreferenceUtil.getPrefInt(context,KeyMasterVolume,0);\r
+ }\r
+\r
+\r
public static void setCheckAntiPolingCycle(Context context, int cycle){\r
SharPreferenceUtil.setPrefInt(context,KeyPolingCycleCheckAnti,cycle);\r
}\r
return SharPreferenceUtil.getPrefInt(context,KeyBleScanCycle,0);\r
}\r
\r
+ public static String getLastUnReadMessage(Context context){\r
+ return SharPreferenceUtil.getPrefString(context,KeyLastUnReadMessage,"");\r
+ }\r
+\r
+ public static void setLastUnReadMessage(Context context,String smsPWD){\r
+ SharPreferenceUtil.setPrefString(context,KeyLastUnReadMessage,smsPWD);\r
+ }\r
+\r
public static String getSMSPwd(Context context){\r
return SharPreferenceUtil.getPrefString(context,KeySMSPassword,DefaultSMSPassword);\r
}\r
// }\r
\r
public static void loadModCycleSettings(Runtime runtime){\r
+ Context context=runtime.getContextProxy().context;\r
ICLogger.i("current Cycles PPG "+ runtime.getPpgTestCycle()+" , LocationCycle "+runtime.getLocationInstance().getLocation_cycle()+" LocationMode "+runtime.getLocationInstance().getWorkingMod());\r
- runtime.setPpgTestCycle(Config.getPPGTestCycle(runtime.getContextProxy().context));\r
- runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));\r
- runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));\r
+ runtime.setPpgTestCycle(Config.getPPGTestCycle(context));\r
+ runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(context));\r
+ runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(context));\r
ICLogger.i("current Cycles PPG "+ runtime.getPpgTestCycle()+" , LocationCycle "+runtime.getLocationInstance().getLocation_cycle()+" LocationMode "+runtime.getLocationInstance().getWorkingMod());\r
\r
+ int mastervolume = getMasterVolume(context);\r
+ ICAudioManager.setMasterVolumn(context,mastervolume);\r
+\r
+ int duration= getDurationOfVibration(context);\r
+ VibrateUtil.setVibPattern(duration*1000);\r
+\r
}\r
\r
public static void loadHearBeatSetting(Runtime runtime){\r
noTempSensor=false;\r
L004_BroadCastActionStrip=true;\r
}else if (custom_name.equals("YQ") ||custom_name.equals("YQ_EN") ) { //A9-YQ\r
- noPushTxtNotifyDialog=true;\r
+ noPushTxtNotifyDialog=false;\r
noSMSNotifyDialog=true;\r
noVoiceNotifyDialog=true;\r
+ noBroadCastPushTxtNotify=true;\r
+ noBroadCastSMSNotify=true;\r
needBroadcastAntiAlarm=true;\r
needAllwaysAlarmCutOff=true;\r
needAllwaysAlarmFenceOut=true;\r
public Connection getConnection(){\r
return connection;\r
}\r
-\r
+ private static boolean server_starting=true;\r
@Override\r
public void onCreate() {\r
\r
+ server_starting=true;\r
log("初始化网络协议服务");\r
mProtocolServer=this;\r
-\r
+ java.lang.Runtime.getRuntime().addShutdownHook(new Thread(){\r
+ @Override\r
+ public void run() {\r
+ super.run();\r
+ //设置断网状态\r
+ ICLogger.i("shutdown !");\r
+ Util.setSystemProperties("persist.sys.server_connected","false");\r
+ }\r
+ });\r
this.runtime = new Runtime();\r
this.runtime.setFileDir(getFilesDir());\r
this.runtime.setCacheDir(getExternalCacheDir());\r
Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH,true);\r
Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED,true);\r
Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF,true);\r
+ Config.ConfigAlarm(Runtime.AlarmType.ALARM_UNREADMSG,true);\r
+ Config.ConfigAlarm(Runtime.AlarmType.ALARM_MSGREAD,true);\r
+\r
if (Config.getConfigInitFlag(this) == 0) {\r
Config.setLocationMode(this, NORMAL_MOD);\r
Config.setLocationCycle(this, 15*60);\r
//初始化佩戴检测\r
runtime.anti_test_cycle=Config.getCheckAntiPolingCycle(this);\r
if( runtime.anti_test_cycle>0){\r
- setAntiAlarm();\r
+ // setAntiAlarm();\r
}\r
\r
//初始化蓝牙检测\r
//更新IMEI\r
DeviceInfoUtil.updateImei(runtime);\r
\r
+ //设置断网状态\r
+ Util.setSystemProperties("persist.sys.server_connected","false");\r
+\r
+ //启动结束设置标志位,让心率和体温检测可以正常执行。\r
+ server_starting=false;\r
ReConnectToServer();\r
}\r
\r
runtime.getDbHelper().deleteSleepData();\r
}\r
\r
+ //检查是否有未读消息需要提醒\r
+ private void checkUnreadMessage(){\r
+\r
+ String msg=Config.getLastUnReadMessage(this);\r
+ Util.checkMesageNeedNotifi(msg,runtime);\r
+\r
+\r
+ }\r
+\r
+ //内部广播StringMessage\r
public static void DevliverStringMessage(String cmd){\r
CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd,"");\r
}\r
+ //内部广播StringMessage\r
public static void DevliverStringMessage(String cmd,String str){\r
CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd,str);\r
}\r
\r
+ //表带剪断检测报警,此处只是设备本地提醒,并不发送报警信息给服务器。\r
public void checkAlarmMessage(){\r
\r
\r
}\r
\r
}\r
+\r
+ //检测久坐提醒\r
public void checkKeepSitting(){\r
String dateyyyyMMDDhhmmss=TimeUtil.getSystemTime3();\r
//为了更新 isInSleepRange, 下面的语句必须执行\r
updateSleepDate(); //检查睡眠\r
checkKeepSitting();//检查久坐\r
checkAlarmMessage();//检测是否有报警消息需要显示\r
+ checkUnreadMessage();//检查未读消息\r
if (this.mKeepAlive != null) {\r
if (connection.isServerConnected() && runtime.isServerProtocolConnected()) {\r
this.mKeepAlive.onHeartAlarm(this.connection, this.runtime);\r
ICLogger.i("triggerBLEProcess ");\r
locationClient.triggerBLEProcess();//每次心跳检测一次BLE\r
+ Deliver.triggerSendThread();\r
} else {\r
// if (this.mKeepAlive.is_retry_time_above_limit()) {\r
ICLogger.i("check 发送心跳包时,如果发现服务器没有响应,或者socket连接,则重新尝试连接服务器!");\r
ICLogger.i("自由锻炼中,跳过原有的循环心率检测!");\r
} else {\r
sb.append("setHeartRateDetectAlarm " + heartRateDetectAlarmCycle);\r
- HeartRateManager.triggerPPGtest();\r
+ if(!server_starting)\r
+ HeartRateManager.triggerPPGtest();\r
}\r
}\r
if (Config.LOG_TOFILE)ICLogger.logToFile("alarmCycle",sb.toString());\r
if (Runtime.practising == true) {\r
ICLogger.i("自由锻炼中,跳过原有的循环温度检测!");\r
} else {\r
- TemperatureUtil.doTempTestInThread();\r
+ if(!server_starting)\r
+ TemperatureUtil.doTempTestInThread();\r
}\r
}\r
\r
this.connection.close();\r
}\r
\r
+\r
}\r
collectDeviceInfo(mContext);\r
// 保存日志文件\r
saveCrashInfo2File(ex);\r
+ //设置断网状态\r
+ Util.setSystemProperties("persist.sys.server_connected","false");\r
return true;\r
}\r
\r
import com.enqualcomm.support.bean.Contact;\r
import com.enqualcomm.support.bean.ICLocation;\r
import com.enqualcomm.support.bean.Runtime;\r
+import com.enqualcomm.support.service.AudioService;\r
import com.enqualcomm.support.service.Deliver;\r
import com.enqualcomm.support.service.SmsDatabaseChaneObserver;\r
import com.enqualcomm.support.utils.APNUtil;\r
import com.enqualcomm.support.utils.SimSignalUtil;\r
import com.enqualcomm.support.utils.TimeUtil;\r
import com.enqualcomm.support.utils.Util;\r
+import com.enqualcomm.support.utils.VibrateUtil;\r
import com.enqualcomm.support.utils.ftpUtils;\r
import com.ic.protocols.protocolAPIHelper;\r
\r
try {\r
msgtype = Integer.parseInt(list[1]);\r
}catch ( Exception e){}\r
+ if(CoreService.getInstance()!=null)\r
CoreService.getInstance().getRuntime().getContextProxy().sendMsgBroadcast(arg, msgtype);\r
+ }else if(cmd.startsWith("playnotifiy")) {\r
+\r
+ AudioService.getInstance().play(runtime.getContextProxy().context.getAssets(), "ring_msg.mp3");\r
+ VibrateUtil.getInstance(runtime.getContextProxy().context).VibrateOn(true);\r
+\r
+ }else if(cmd.startsWith("DeliverSMS")) {\r
+\r
+ if(CoreService.getInstance()!=null){\r
+ Deliver.sendLocationMSG(protocolAPIHelper.getLBSLocationMSG(runtime));\r
+ }\r
+\r
}\r
}\r
}
\ No newline at end of file
public int Cut_off_flag=0;\r
\r
public enum AlarmType{\r
- ALARM_SOS,\r
- ALARM_LOWBATTERY,\r
- ALARM_ANTIOFF,\r
- ALARM_WEARED,\r
+ ALARM_SOS, //sos\r
+ ALARM_LOWBATTERY, //低电\r
+ ALARM_ANTIOFF, //脱腕报警\r
+ ALARM_WEARED, //佩戴\r
ALARM_CUTOFF,//剪断报警\r
- ALARM_FALL,\r
- ALARM_ABNORMAL_HEART_RATE,\r
- ALARM_HEART_RATE_HIGH,\r
- ALARM_HEART_RATE_LOW,\r
- ALARM_BPH_HIGH,\r
- ALARM_BPH_LOW,\r
- ALARM_BPL_HIGH,\r
- ALARM_BPL_LOW,\r
+ ALARM_FALL, //跌倒\r
+ ALARM_ABNORMAL_HEART_RATE, //心率异常\r
+ ALARM_HEART_RATE_HIGH, //心率高\r
+ ALARM_HEART_RATE_LOW, //心率低\r
+ ALARM_BPH_HIGH, //高压高\r
+ ALARM_BPH_LOW, //高压低\r
+ ALARM_BPL_HIGH, //低压高\r
+ ALARM_BPL_LOW, //低压低\r
ALARM_SEDENTARY, //久坐提醒\r
- ALARM_ILLEGAL_CUTOFF,\r
- ALARM_LOCK_WATCH,\r
- ALARM_TEMP_HIGH,\r
- ALARM_TEMP_LOW,\r
- ALARM_POWER_OFF,\r
- ALARM_ESCAPE,\r
+ ALARM_ILLEGAL_CUTOFF, //剪断\r
+ ALARM_LOCK_WATCH, //锁定\r
+ ALARM_TEMP_HIGH, //体温高\r
+ ALARM_TEMP_LOW, //体温低\r
+ ALARM_POWER_OFF, //关机\r
+ ALARM_ESCAPE, //逃逸\r
+ ALARM_UNREADMSG, //消息未读\r
+ ALARM_MSGREAD, //消息已读\r
ALARM_NONE,\r
};\r
\r
* 00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05:剪断报警,06:跌倒报警,\r
* 07:心率异常, 08:心率过高, 09:心率过低,10:收缩压过高,11:收缩压过低,12:舒张压过高,13:舒张压过低,\r
* 14:久坐提醒,15:非法解锁(剪断报警),16:锁定提醒(佩戴提醒),17:体温过高,18体温过低) 19 关机事件(非服务器指令关机), 20,escape逃跑事件(离开蓝牙管控范围)\r
+ * 21, 消息未读 , 22消息已读\r
*/\r
public boolean setAlarmType(AlarmType alarm){\r
// if ( !fall && !lowbattery && !sos && antioff)\r
case ALARM_POWER_OFF:\r
alarmType="19";\r
break;\r
- case ALARM_NONE:\r
+ case ALARM_ESCAPE:\r
alarmType="20";\r
break;\r
+ case ALARM_UNREADMSG:\r
+ alarmType="21";\r
+ break;\r
+ case ALARM_MSGREAD:\r
+ alarmType="22";\r
+ break;\r
default:\r
alarmType="00";\r
break;\r
delaySendMSG = new Runnable() {\r
@Override\r
public void run() {\r
+ mSendMSGHandler.removeCallbacks(delaySendMSG);\r
if (getAndSendMsgFromQueue()==true){\r
mSendMSGHandler.postDelayed(delaySendMSG,5000L);\r
}\r
return ret;\r
}\r
public static void triggerSendThread() {\r
+\r
+ mSendMSGHandler.removeCallbacks(delaySendMSG);\r
mSendMSGHandler.post(delaySendMSG);\r
ICLogger.i("triggerSendThread ");\r
// delaySendMSG.run();\r
ICLogger.logToFile("APILog", "response failed retry ! " +CheckCount+" " + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
}\r
CheckCount++;\r
- }else{ //否则 可能是还没有发送过数据,或者超过重试次数,继续提取queue中数据进行发送\r
- ICLogger.i("checkSrvResponse CheckCount="+CheckCount+" Timeout or cmd is null, skip ");\r
- if (Config.LOG_TOFILE)\r
- ICLogger.logToFile("APILog", "response timeout skip! " );\r
- CheckCount=0;\r
+ //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送\r
+ if (CheckCount>5){\r
+ ICLogger.i("checkSrvResponse CheckCount="+CheckCount+" Timeout or cmd is null, skip ");\r
+ if (Config.LOG_TOFILE)\r
+ ICLogger.logToFile("APILog", "response timeout skip! " );\r
+ CheckCount=0;\r
+ if(mLock!=null && mLock.isLocked())\r
+ mLock.unlock();\r
+ return false;\r
+ }\r
}\r
}\r
\r
if (NeedCheckServerResponse==true){\r
\r
if(needCheckResponseCMD!=null) {\r
- ICLogger.i("mqtt ====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD));\r
+ ICLogger.i("====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD));\r
if( cmd.equals(protocolAPIHelper.isCmdStr (needCheckResponseCMD))){\r
ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)+" is responsed!");\r
ServerResponsed=true;\r
VibrateUtil.getInstance(_context).VibrateOnOnce(true);\r
Util.mSleep(2000);\r
}\r
- Intent intent = new Intent(ActionSrvPushTxt);\r
- intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息\r
- intent.putExtra("txtMsg", msg);\r
- intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
- _context.sendBroadcast(intent);\r
+ if(Config.noBroadCastPushTxtNotify==false) {\r
+ Intent intent = new Intent(ActionSrvPushTxt);\r
+ intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息\r
+ intent.putExtra("txtMsg", msg);\r
+ intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
+ _context.sendBroadcast(intent);\r
+ }\r
}\r
},50);\r
\r
VibrateUtil.getInstance(_context).VibrateOnOnce(true);\r
Util.mSleep(2000);\r
}\r
- Intent intent = new Intent(ActionSrvPushTxt);\r
- intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息\r
- intent.putExtra("txtMsg", msg);\r
- intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
- _context.sendBroadcast(intent);\r
+ if(Config.noBroadCastPushTxtNotify==false) {\r
+ Intent intent = new Intent(ActionSrvPushTxt);\r
+ intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息\r
+ intent.putExtra("txtMsg", msg);\r
+ intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
+ _context.sendBroadcast(intent);\r
+ }\r
}\r
},50);\r
\r
VibrateUtil.getInstance(_context).VibrateOnOnce(true);\r
Util.mSleep(2000);\r
}\r
-\r
- Intent intent = new Intent(ActionSrvPushTxt);\r
- intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息\r
- intent.putExtra("txtMsg", msg);\r
- intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
- _context.sendBroadcast(intent);\r
+ if(Config.noBroadCastPushTxtNotify==false) {\r
+ Intent intent = new Intent(ActionSrvPushTxt);\r
+ intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息\r
+ intent.putExtra("txtMsg", msg);\r
+ intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
+ _context.sendBroadcast(intent);\r
+ }\r
}\r
},50);\r
}\r
private static int saved_volumn = 0;
public static boolean needMute = false;
+ public static void setMasterVolumn(Context context,int volume) {
+ AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ int maxvolume=audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
+ ICLogger.i("======setVolumn "+volume +" maxvolmun "+maxvolume);
+ if( volume>maxvolume) {
+ volume = maxvolume;
+ }
+ if(volume<0){
+ volume=0;
+ }
+ if (audioManager != null) {
+ audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,volume,AudioManager.FLAG_PLAY_SOUND);
+ audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION,volume,AudioManager.FLAG_PLAY_SOUND);
+ audioManager.setStreamVolume(AudioManager.STREAM_ALARM,volume,AudioManager.FLAG_PLAY_SOUND);
+ audioManager.setStreamVolume(AudioManager.STREAM_RING,volume,AudioManager.FLAG_PLAY_SOUND);
+ }
+// SimSignalUtil.SetRingMode(context, AudioManager.RINGER_MODE_SILENT, false);
+// CloseSpeaker(context);//
+ }
+
public static void setVolumnMute(Context context) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
ICLogger.i("======setVolumnMute");
public void onClick(DialogInterface var1, int var2) {\r
var1.dismiss();\r
VibrateUtil.getInstance(context).VibrateOn(false);\r
+\r
+\r
if(CoreService.getInstance()!=null) {\r
- CoreService.getInstance().getConnection().send(protocolAPIHelper.getPushTxtReadFlagToSrvMSG(CoreService.getInstance().getRuntime()));\r
+ Runtime runtime=CoreService.getInstance().getRuntime();\r
+ if(Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN"))\r
+ {\r
+ runtime.setAlarmType(Runtime.AlarmType.ALARM_MSGREAD);\r
+ Config.setLastUnReadMessage(CoreService.getInstance(),"");\r
+ Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));\r
+ }else{\r
+ CoreService.getInstance().getConnection().send(protocolAPIHelper.getPushTxtReadFlagToSrvMSG(runtime));\r
+ }\r
+\r
}\r
}\r
}).create();\r
import java.util.zip.ZipOutputStream;\r
\r
\r
+import com.enqualcomm.support.Config;\r
import com.enqualcomm.support.CoreService;\r
import com.enqualcomm.support.bean.Runtime;\r
import com.enqualcomm.support.bean.VoiceContent;\r
import com.enqualcomm.support.bean.voicePacket;\r
+import com.enqualcomm.support.service.Deliver;\r
+import com.ic.protocols.protocolAPIHelper;\r
\r
import static android.content.Context.CONNECTIVITY_SERVICE;\r
import static android.content.Context.WIFI_SERVICE;\r
}catch ( Exception e){}\r
}\r
\r
+ public static void checkMesageNeedNotifi(String msg,Runtime runtime){\r
+\r
+ if(msg!=null ) {\r
+ //msg 格式 index,20201111182000,003f99302994\r
+ String list[]= msg.split(",");\r
+ if(list.length==3) {\r
+ String index=list[0];\r
+ String datetime=list[1];\r
+ String txtmsg=list[2];\r
+\r
+ long lasttime_inms=System.currentTimeMillis()-TimeUtil.parseDatetiime(datetime).getTime();\r
+ ICLogger.i("有消息"+lasttime_inms/1000 +"秒未读!");\r
+ if ((lasttime_inms>=8*60*1000 && lasttime_inms<=13*60*1000) //在10分钟,20分钟时都提醒一次。\r
+ ||(lasttime_inms>18*60*1000 && lasttime_inms<=23*60*1000))\r
+ {\r
+\r
+ if (!Config.custom_name.equals("VitracK")){\r
+ txtmsg = Util.UrlGB2312ToUTF8(txtmsg);\r
+ }\r
+ if(Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN"))\r
+ {\r
+ runtime.setAlarmType(Runtime.AlarmType.ALARM_UNREADMSG);\r
+ // Config.setLastUnReadMessage(CoreService.getInstance(),"");\r
+ Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime));\r
+ }\r
+ runtime.getContextProxy().sendMsgBroadcast(txtmsg, 0);\r
+ }\r
+\r
+\r
+ }else{\r
+ ICLogger.i("UnreadMsg format error !");\r
+ }\r
+ }\r
+ }\r
\r
public static boolean installed(Context context,String appPackageName) {\r
PackageManager packageManager = context.getPackageManager();// 获取packagemanager\r
private static Vibrator vibrator = null;\r
private static VibrateUtil vibrateUtil=null;\r
\r
- private final long[] patter = {1000, 1000, 1000, 1000}; //1秒开,1秒关,2秒开,50ms关\r
- private final long[] patterOnce = {1000, 1000}; //1秒开,1秒关,2秒开,50ms关\r
+ private static long patter_item= 1000;\r
+ private long[] patter = {patter_item, 1000, patter_item, 1000}; //1秒开,1秒关,2秒开,50ms关\r
+ private long[] patterOnce = {patter_item, 1000}; //1秒开,1秒关,2秒开,50ms关\r
\r
+ /**\r
+ * 设置震动时长\r
+ * @param l 单位ms\r
+ */\r
+ public static void setVibPattern(int l){\r
+ patter_item=l;\r
+ }\r
public void VibrateOn(boolean on){\r
- if(vibrator!=null) {\r
- if (on)\r
+ if (patter_item>0) {\r
+ if (vibrator != null) {\r
+ if (on)\r
// vibrator.vibrate(patter, 0);//一直循环\r
- vibrator.vibrate(patter, -1);//不循环\r
- else\r
- vibrator.cancel();\r
+ vibrator.vibrate(patter, -1);//不循环\r
+ else\r
+ vibrator.cancel();\r
+ }\r
}\r
}\r
public void VibrateOnOnce(boolean on){\r
- if(vibrator!=null) {\r
- if (on)\r
+ if (patter_item>0) {\r
+ if (vibrator != null) {\r
+ if (on)\r
// vibrator.vibrate(patter, 0);//一直循环\r
- vibrator.vibrate(patterOnce, -1);//不循环\r
- else\r
- vibrator.cancel();\r
+ vibrator.vibrate(patterOnce, -1);//不循环\r
+ else\r
+ vibrator.cancel();\r
+ }\r
}\r
}\r
}\r
import com.enqualcomm.support.service.HeartRateManager;\r
import com.enqualcomm.support.utils.CameraUtil;\r
import com.enqualcomm.support.utils.Connection;\r
+import com.enqualcomm.support.utils.ICAudioManager;\r
import com.enqualcomm.support.utils.ICLogger;\r
import com.enqualcomm.support.utils.TemperatureUtil;\r
import com.enqualcomm.support.utils.TimeUtil;\r
import com.enqualcomm.support.utils.Util;\r
+import com.enqualcomm.support.utils.VibrateUtil;\r
import com.enqualcomm.support.utils.WakeLockUtil;\r
\r
import java.io.File;\r
BPTQ,\r
APAT,//剪断消息开关\r
BPAT,\r
- APBT, //设置蓝牙扫描间隔\r
- BPBT,\r
+ APBT,\r
+ BPBT,//设置蓝牙扫描间隔\r
+ APWL,\r
+ BPWL,//设置白名单\r
+ AP65,\r
+ BP65,//设置音量\r
+ AP47,\r
+ BP47,//设置震动\r
UNKNOWN_CMD,\r
}\r
\r
cmdMap.put(CMD_TYPE.BPAT, "BPAT");\r
cmdMap.put(CMD_TYPE.APBT, "APBT");\r
cmdMap.put(CMD_TYPE.BPBT, "BPBT");\r
-\r
+ cmdMap.put(CMD_TYPE.APWL, "APWL");\r
+ cmdMap.put(CMD_TYPE.BPWL, "BPWL");\r
+ cmdMap.put(CMD_TYPE.AP65, "AP65");\r
+ cmdMap.put(CMD_TYPE.BP65, "BP65");\r
+ cmdMap.put(CMD_TYPE.AP47, "AP47");\r
+ cmdMap.put(CMD_TYPE.BP47, "BP47");\r
}\r
\r
\r
if (cmdlist.length == 4){\r
String cmdindex=cmdlist[2];\r
String txtmsg=cmdlist[3];\r
+ StringBuilder sb=new StringBuilder();\r
+ runtime.PushtxtMsg_srv_index=cmdindex;//给回复AP94用\r
+ sb.append(cmdindex).append(CMDSPLIT).append(TimeUtil.getSystemTimeyyyyMMddHHmmss()).append(CMDSPLIT).append(txtmsg);\r
if (Config.custom_name.equals("VitracK")){\r
\r
}else{\r
//设定当前工作模式及循环频率\r
connection.send(msg);\r
ICLogger.i("received Txt Msg "+txtmsg);\r
+ Config.setLastUnReadMessage(runtime.getContextProxy().context,sb.toString());\r
runtime.getContextProxy().sendMsgBroadcast(txtmsg,0);\r
runtime.getContextProxy().saveMstToSMSDB(txtmsg);\r
}else{\r
}\r
}\r
\r
+ /**\r
+ * 85.设置联系人白名单(10个)(下行协议:BPWL,响应:APWL)\r
+ * 示例:\r
+ * IWBPWL,353456789012345,080835,D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx #\r
+ * 说明:\r
+ * IW:标识符\r
+ * BPWL : 命令字符\r
+ * 353456789012345:IMEI号,设备唯一ID\r
+ * 080835 :指令流水号\r
+ * D3590D54|135xxxxxxxxxx|9507xxxxxxxx : 一组联系人,使用|分隔名称和电话号码和绑定号码,名称使用UNICODE编码直接下发byte,多组之间使用逗号分隔,未填写的可为空,但位置仍需保留\r
+ * 设备响应: IWAPWL,080835, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx#\r
+ * 080835: 设备响应的时候带上响应流水号\r
+ * D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx回复设备当前设置的主控号码供平台同步使用\r
+ * 说明: 本消息适用所有终端\r
+ */\r
+ public static StringMessage APWL(String index,String[] phnumbs){\r
+ return genStringMessage("APWL",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APWL))\r
+ .append(CMDSPLIT).append(index)\r
+ .append(CMDSPLIT).append(phnumbs[0])\r
+ .append(CMDSPLIT).append(phnumbs[1])\r
+ .append(CMDSPLIT).append(phnumbs[2])\r
+ .append(CMDSPLIT).append(phnumbs[3])\r
+ .append(CMDSPLIT).append(phnumbs[4])\r
+ .append(CMDSPLIT).append(phnumbs[5])\r
+ .append(CMDSPLIT).append(phnumbs[6])\r
+ .append(CMDSPLIT).append(phnumbs[7])\r
+ .append(CMDSPLIT).append(phnumbs[8])\r
+ .append(CMDSPLIT).append(phnumbs[9])\r
+ .append(CMDEND).toString());\r
+ }\r
+ //设置通讯录,白名单(10个)\r
+ public void handleBPWL(Connection connection,String cmd , Runtime runtime){\r
+// IWBPWL,867155030001063,357444,9b44529b|13554820016,,,,,,,,,\r
+/**\r
+ * IWBPWL,353456789012345,080835,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx#\r
+ */\r
+ String[] cmdlist=cmd.split(CMDSPLIT);\r
+ String[] phnums=new String[]{"","","","","","","","","",""};\r
+ StringBuffer sb=new StringBuffer().append("recv phone Numbs ");\r
+ if (cmdlist.length>=3){\r
+ switch (cmdlist.length){\r
+ case 13:\r
+ phnums[9]=cmdlist[12];\r
+ sb.append(phnums[9]).append(",");\r
+ case 12:\r
+ phnums[8]=cmdlist[11];\r
+ sb.append(phnums[8]).append(",");\r
+ case 11:\r
+ phnums[7]=cmdlist[10];\r
+ sb.append(phnums[7]).append(",");\r
+ case 10:\r
+ phnums[6]=cmdlist[9];\r
+ sb.append(phnums[6]).append(",");\r
+ case 9:\r
+ phnums[5]=cmdlist[8];\r
+ sb.append(phnums[5]).append(",");\r
+ case 8:\r
+ phnums[4]=cmdlist[7];\r
+ sb.append(phnums[4]).append(",");\r
+ case 7:\r
+ phnums[3]=cmdlist[6];\r
+ sb.append(phnums[3]).append(",");\r
+ case 6:\r
+ phnums[2]=cmdlist[5];\r
+ sb.append(phnums[2]).append(",");\r
+ case 5:\r
+ phnums[1]=cmdlist[4];\r
+ sb.append(phnums[1]).append(",");\r
+ case 4:\r
+ phnums[0]=cmdlist[3];\r
+ sb.append(phnums[0]).append(",");\r
+\r
+ }\r
+\r
+ String index=cmdlist[2];\r
+ ICLogger.i(sb.toString());\r
+ connection.send(AP14(index,phnums));\r
+ ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
+\r
+ if(Config.custom_name.equals("YT")) {\r
+ ICLogger.i("=====add hotline 96885 ");\r
+ contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));\r
+ }\r
+ for (int i=0; i< phnums.length;i++){\r
+ String[] tmp= phnums[i].split("\\|");\r
+ if (tmp.length==2){\r
+ String name= Util.decodeUnicode2Utf8(tmp[0]);\r
+ String phonem=tmp[1];\r
+ ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem);\r
+ contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));\r
+ }else{\r
+ ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length);\r
+\r
+ }\r
+ }\r
+// contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));\r
+// contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));\r
+// contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));\r
+// contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));\r
+\r
+ runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false);\r
+\r
+ }else{\r
+ ICLogger.i(" BPWL format error!");\r
+ }\r
+\r
+ }\r
+\r
+\r
+\r
+\r
+ public static StringMessage AP65(String id,String cy)\r
+ {\r
+ return genStringMessage("AP65",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP65))\r
+ .append(CMDSPLIT).append(id)\r
+ .append(CMDSPLIT).append(cy)\r
+ .append(CMDEND).toString());\r
+ }\r
+\r
+ public void handleBP65( Connection connection,Runtime runtime,String cmd) {\r
+/***\r
+ * 36.音量设置(下行协议:BP65,响应:AP65)\r
+ * 示例:\r
+ * IWBP65,353456789012345,080835,1#\r
+ * 说明:\r
+ * IW:标识符\r
+ * BP65: 命令字符\r
+ * 353456789012345:IMEI号,设备唯一ID\r
+ * 080835 :指令流水号\r
+ * 1 : 表示音量等级为1\r
+ * 设备响应: IWAP65,080835, 1#\r
+ * 080835: 设备响应的时候带上响应流水号\r
+ * 1: 表示指令执行成功,音量等级为1\r
+ */\r
+\r
+ log("BP65 "+cmd);\r
+ String[] cmdlist=cmd.split(CMDSPLIT);\r
+ if (cmdlist.length==4){\r
+ String id=cmdlist[2];\r
+ String cycle=cmdlist[3].replace("#","");\r
+ connection.send(AP65(id,cycle));\r
+\r
+ if(Util.isNumeric(cycle)){\r
+ int mastervolume=Integer.parseInt(cycle);\r
+\r
+ ICLogger.i("设置音量 "+mastervolume);\r
+ //实际设备音量 0~15 协议音量0~7需要转换\r
+ int volume=mastervolume*2;\r
+ if (volume<0)volume=0;\r
+ if(volume>=14) volume=15;\r
+ Config.setMasterVolume(runtime.getContextProxy().context,mastervolume*2);\r
+ ICAudioManager.setMasterVolumn(runtime.getContextProxy().context,mastervolume*2);\r
+\r
+ }else{\r
+ ICLogger.i(" BP65 Format error!");\r
+ }\r
+\r
+ }else{\r
+ ICLogger.i(" BP65 Format error!");\r
+ }\r
+ }\r
+\r
+ public static StringMessage AP47(String id,String cycle)\r
+ {\r
+ return genStringMessage("AP47",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP47))\r
+ .append(CMDSPLIT).append(id)\r
+ .append(CMDSPLIT).append(cycle)\r
+ .append(CMDEND).toString());\r
+ }\r
+\r
+\r
+ public void handleBP47( Connection connection,Runtime runtime,String cmd) {\r
+/***\r
+ * 37.震动设置(下行协议号:BP47,响应:AP47)\r
+ * 示例:\r
+ * IWBP47,353456789012345,080835,10#\r
+ * 说明:\r
+ * IW:标识符\r
+ * BP47 : 命令字符\r
+ * 353456789012345:IMEI号,设备唯一ID\r
+ * 080835 :指令流水号\r
+ * 10: 表示震动时长,此处单位为称,表示震动10秒钟\r
+ * 设备响应: IWAP47,080835,1#\r
+ * 080835:指令流水号\r
+ * 1:表示设备执行成功,0 表示设备执行失败\r
+ */\r
+\r
+ log("BP47 "+cmd);\r
+ String[] cmdlist=cmd.split(CMDSPLIT);\r
+ if (cmdlist.length==4){\r
+ String id=cmdlist[2];\r
+ String cycle=cmdlist[3].replace("#","");\r
+ connection.send(AP47(id,cycle));\r
+\r
+ if(Util.isNumeric(cycle)){\r
+ int vibduration=Integer.parseInt(cycle);\r
+ ICLogger.i("设置震动时长 "+vibduration+" 秒");\r
+ Config.setDurationOfVibration(runtime.getContextProxy().context,vibduration);\r
+ VibrateUtil.setVibPattern(vibduration*1000);\r
+\r
+ }else{\r
+ ICLogger.i(" BP47 Format error!");\r
+ }\r
+\r
+ }else{\r
+ ICLogger.i(" BP47 Format error!");\r
+ }\r
+ }\r
public boolean handleCmd(CMD_TYPE type, String cmd) {\r
\r
//普通非二进制命令用此函数处理\r
handleBP14(mConnection,cmd,mRuntime);\r
ICLogger.i("收到服务器设置白名单号码命令BP14");\r
break;\r
+ case BPWL:\r
+ //收到设置白名单号码\r
+ handleBPWL(mConnection,cmd,mRuntime);\r
+ ICLogger.i("收到服务器设置白名单号码命令BPWL");\r
+ break;\r
case BP15:\r
handleBP15(cmd,mConnection,mRuntime);\r
ICLogger.i("收到服务器设置定位命令BP15");\r
handleBPBT(mConnection,mRuntime,cmd);\r
break;\r
\r
+ case BP65://声音设置\r
+ handleBP65(mConnection,mRuntime,cmd);\r
+ break;\r
+ case BP47://震动设置\r
+ handleBP47(mConnection,mRuntime,cmd);\r
+ break;\r
+\r
}\r
\r
return ret;\r
android:text="@string/title_alert"\r
style="@style/text_18_ffffff"\r
android:textSize="30sp" />\r
+ <ScrollView\r
+ style="@android:style/Widget.DeviceDefault.Light.HorizontalScrollView"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:scrollbars="vertical">\r
<LinearLayout\r
android:gravity="center"\r
android:id="@id/noticeContent"\r
- android:layout_width="fill_parent"\r
+ android:orientation="vertical"\r
+ android:layout_width="wrap_content"\r
android:layout_height="wrap_content">\r
<TextView\r
android:gravity="center|left"\r
android:lineSpacingMultiplier="1.5"\r
style="@style/text_16_666666"\r
android:textSize="25sp"/>\r
- </LinearLayout>\r
- <View\r
- android:background="#ffd0d0d0"\r
- android:layout_width="fill_parent"\r
- android:layout_height="1.0px" />\r
- <LinearLayout\r
- android:gravity="center"\r
- android:layout_gravity="bottom"\r
- android:orientation="horizontal"\r
- android:background="@drawable/bg_bombbox"\r
- android:layout_width="fill_parent"\r
- android:layout_height="60.0dip">\r
- <ImageButton\r
- android:gravity="center"\r
- android:id="@id/positiveButton"\r
- android:background="#00000000"\r
- android:layout_width="0.0dip"\r
- android:layout_height="wrap_content"\r
- android:src="@drawable/btn_ok_selector"\r
- android:text="@string/ok"\r
- android:layout_weight="1.0" style="@style/text_15_ffffff_sdw" />\r
- <ImageButton\r
+ <View\r
+ android:background="#ffd0d0d0"\r
+ android:layout_width="fill_parent"\r
+ android:layout_height="1.0px" />\r
+ <LinearLayout\r
android:gravity="center"\r
- android:id="@id/negativeButton"\r
- android:background="#00000000"\r
- android:layout_width="0.0dip"\r
- android:layout_height="wrap_content"\r
- android:layout_marginLeft="20.0dip"\r
- android:src="@drawable/btn_cancel_selector"\r
- android:text="@string/cancel"\r
- android:layout_weight="1.0"\r
- style="@style/text_15_666666_sdw" />\r
+ android:layout_gravity="bottom"\r
+ android:orientation="horizontal"\r
+ android:background="@drawable/bg_bombbox"\r
+ android:layout_width="fill_parent"\r
+ android:layout_height="60.0dip">\r
+ <ImageButton\r
+ android:gravity="center"\r
+ android:id="@id/positiveButton"\r
+ android:background="#00000000"\r
+ android:layout_width="0.0dip"\r
+ android:layout_height="wrap_content"\r
+ android:src="@drawable/btn_ok_selector"\r
+ android:text="@string/ok"\r
+ android:layout_weight="1.0" style="@style/text_15_ffffff_sdw" />\r
+ <ImageButton\r
+ android:gravity="center"\r
+ android:id="@id/negativeButton"\r
+ android:background="#00000000"\r
+ android:layout_width="0.0dip"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginLeft="20.0dip"\r
+ android:src="@drawable/btn_cancel_selector"\r
+ android:text="@string/cancel"\r
+ android:layout_weight="1.0"\r
+ style="@style/text_15_666666_sdw" />\r
+ </LinearLayout>\r
</LinearLayout>\r
+ </ScrollView>\r
+\r
</LinearLayout>\r
</FrameLayout>
\ No newline at end of file
-#Fri Nov 06 15:56:55 CST 2020\r
-VERSION_CODE=689\r
+#Wed Nov 11 23:33:52 CST 2020\r
+VERSION_CODE=692\r