From: snickersun Date: Wed, 11 Nov 2020 15:42:23 +0000 (+0800) Subject: release V692 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=859867f4270a07212c28f29f85c2e4bbcdd1451d;p=protocol_srv.git release V692 1、protocol_ic A9项目 添加 BP65设置音量 BP47设置震动时间,添加文字已读和未读报警。 2、修改消息提示窗口,可以支持滑动显示更多文字。 3、启动时设置心率和体温时钟跳过检测。 4、部分非法退出把网络设置为未连接,尽量减少协议死掉后造成的状态显示错误。 5、Deliver 发送重试机制修改为 保证有数据时每5秒发送一次,超过5次没有响应,就等下一个心跳再开始重试。 --- diff --git a/app/release/ICSer_V689_2011061556_release.apk b/app/release/ICSer_V692_2011112333_release.apk similarity index 78% rename from app/release/ICSer_V689_2011061556_release.apk rename to app/release/ICSer_V692_2011112333_release.apk index f93e814c..5975996b 100644 Binary files a/app/release/ICSer_V689_2011061556_release.apk and b/app/release/ICSer_V692_2011112333_release.apk differ diff --git a/app/release/output.json b/app/release/output.json index a9c2eeff..e7945365 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"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 diff --git a/app/src/main/java/com/enqualcomm/support/Config.java b/app/src/main/java/com/enqualcomm/support/Config.java index 7b7e7228..55afbbc5 100644 --- a/app/src/main/java/com/enqualcomm/support/Config.java +++ b/app/src/main/java/com/enqualcomm/support/Config.java @@ -6,10 +6,12 @@ import android.text.TextUtils; import com.enqualcomm.support.bean.ICLocation; import com.enqualcomm.support.bean.Runtime; +import com.enqualcomm.support.utils.ICAudioManager; import com.enqualcomm.support.utils.ICLogger; import com.enqualcomm.support.utils.SharPreferenceUtil; import com.enqualcomm.support.utils.TimeUtil; import com.enqualcomm.support.utils.Util; +import com.enqualcomm.support.utils.VibrateUtil; import com.ic.jni.ICJniUtils; import com.ic.protocols.protocolAPIHelper; @@ -31,6 +33,11 @@ public class Config { public static boolean forceMoveCheck=true; public static boolean forceWearCheck=true; + private static int DurationOfVibration = 10; + private static int MasterVolume = 10; + + private static final String KEYDurationOfVibration = "DurationVib"; + private static final String KeyMasterVolume = "MasterVolume"; public static final String DefaultLogFtpServer="icfota.snicker.com.cn"; public static final String DefaultLogFtpUser="ftpuser"; @@ -47,19 +54,34 @@ public class Config { public static String c43_branch_name="none"; public static String custom_name="none"; + //配置是否广播提示框信息给外部应用显示 + public static boolean noBroadCastSMSNotify=false; + public static boolean noBroadCastPushTxtNotify=false; + + + //protocol内部Dialog配置,true表示用外部提示窗,false表示用协议内部提示窗 public static boolean noSMSNotifyDialog=false; public static boolean noPushTxtNotifyDialog=false; public static boolean noVoiceNotifyDialog=false; + + //是否SOS拨号的开关,false表示只发送系统sosalarm,不发起SOS拨号 public static boolean SOSNoNeedDial=false; + //ic68只有体温没有腕温,它开启代表原来的腕温函数取出的就是体温,不需要再进行换算了。 public static boolean disableWristTemp=false; + //配置是否有温度传感器 public static boolean noTempSensor=false; + //配置是否有心率传感器 public static boolean noPPGSensor=false; + //配置脱腕报警是否需要弹出脱腕提示 public static boolean needBroadcastAntiAlarm=true; + //定位是否使用wifi的配置。 public static boolean disableWiFiScan=false; + public static int BLEScanProtocol=0; /** 0 代表扫描beacon后 自行判断是否在指定区域,需要协议绑定beacon地址。 * 1 代表扫描beacon后,直接把扫描结果上报即可。 - **/ + **/ + public static boolean UsePolingCheckWeared=false; static { @@ -141,6 +163,27 @@ public class Config { final static String KeyPolingCycleCheckAnti="PolingCycleCheckAnti"; final static String KeyBleScanCycle="BleScanCycle"; + + final static String KeyLastUnReadMessage="UnreadMsg"; + + + public static void setDurationOfVibration(Context context, int cycle){ + SharPreferenceUtil.setPrefInt(context,KEYDurationOfVibration,cycle); + } + + public static int getDurationOfVibration(Context context){ + return SharPreferenceUtil.getPrefInt(context,KEYDurationOfVibration,1000); + } + + public static void setMasterVolume(Context context, int cycle){ + SharPreferenceUtil.setPrefInt(context,KeyMasterVolume,cycle); + } + + public static int getMasterVolume(Context context){ + return SharPreferenceUtil.getPrefInt(context,KeyMasterVolume,0); + } + + public static void setCheckAntiPolingCycle(Context context, int cycle){ SharPreferenceUtil.setPrefInt(context,KeyPolingCycleCheckAnti,cycle); } @@ -157,6 +200,14 @@ public class Config { return SharPreferenceUtil.getPrefInt(context,KeyBleScanCycle,0); } + public static String getLastUnReadMessage(Context context){ + return SharPreferenceUtil.getPrefString(context,KeyLastUnReadMessage,""); + } + + public static void setLastUnReadMessage(Context context,String smsPWD){ + SharPreferenceUtil.setPrefString(context,KeyLastUnReadMessage,smsPWD); + } + public static String getSMSPwd(Context context){ return SharPreferenceUtil.getPrefString(context,KeySMSPassword,DefaultSMSPassword); } @@ -244,12 +295,19 @@ public class Config { // } public static void loadModCycleSettings(Runtime runtime){ + Context context=runtime.getContextProxy().context; ICLogger.i("current Cycles PPG "+ runtime.getPpgTestCycle()+" , LocationCycle "+runtime.getLocationInstance().getLocation_cycle()+" LocationMode "+runtime.getLocationInstance().getWorkingMod()); - runtime.setPpgTestCycle(Config.getPPGTestCycle(runtime.getContextProxy().context)); - runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context)); - runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context)); + runtime.setPpgTestCycle(Config.getPPGTestCycle(context)); + runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(context)); + runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(context)); ICLogger.i("current Cycles PPG "+ runtime.getPpgTestCycle()+" , LocationCycle "+runtime.getLocationInstance().getLocation_cycle()+" LocationMode "+runtime.getLocationInstance().getWorkingMod()); + int mastervolume = getMasterVolume(context); + ICAudioManager.setMasterVolumn(context,mastervolume); + + int duration= getDurationOfVibration(context); + VibrateUtil.setVibPattern(duration*1000); + } public static void loadHearBeatSetting(Runtime runtime){ @@ -462,9 +520,11 @@ public class Config { noTempSensor=false; L004_BroadCastActionStrip=true; }else if (custom_name.equals("YQ") ||custom_name.equals("YQ_EN") ) { //A9-YQ - noPushTxtNotifyDialog=true; + noPushTxtNotifyDialog=false; noSMSNotifyDialog=true; noVoiceNotifyDialog=true; + noBroadCastPushTxtNotify=true; + noBroadCastSMSNotify=true; needBroadcastAntiAlarm=true; needAllwaysAlarmCutOff=true; needAllwaysAlarmFenceOut=true; diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index 6763ff4f..45e0aa76 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -597,13 +597,22 @@ public class CoreService extends Service { public Connection getConnection(){ return connection; } - + private static boolean server_starting=true; @Override public void onCreate() { + server_starting=true; log("初始化网络协议服务"); mProtocolServer=this; - + java.lang.Runtime.getRuntime().addShutdownHook(new Thread(){ + @Override + public void run() { + super.run(); + //设置断网状态 + ICLogger.i("shutdown !"); + Util.setSystemProperties("persist.sys.server_connected","false"); + } + }); this.runtime = new Runtime(); this.runtime.setFileDir(getFilesDir()); this.runtime.setCacheDir(getExternalCacheDir()); @@ -671,6 +680,9 @@ public class CoreService extends Service { Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOCK_WATCH,true); Config.ConfigAlarm(Runtime.AlarmType.ALARM_WEARED,true); Config.ConfigAlarm(Runtime.AlarmType.ALARM_ANTIOFF,true); + Config.ConfigAlarm(Runtime.AlarmType.ALARM_UNREADMSG,true); + Config.ConfigAlarm(Runtime.AlarmType.ALARM_MSGREAD,true); + if (Config.getConfigInitFlag(this) == 0) { Config.setLocationMode(this, NORMAL_MOD); Config.setLocationCycle(this, 15*60); @@ -920,7 +932,7 @@ public class CoreService extends Service { //初始化佩戴检测 runtime.anti_test_cycle=Config.getCheckAntiPolingCycle(this); if( runtime.anti_test_cycle>0){ - setAntiAlarm(); + // setAntiAlarm(); } //初始化蓝牙检测 @@ -942,6 +954,11 @@ public class CoreService extends Service { //更新IMEI DeviceInfoUtil.updateImei(runtime); + //设置断网状态 + Util.setSystemProperties("persist.sys.server_connected","false"); + + //启动结束设置标志位,让心率和体温检测可以正常执行。 + server_starting=false; ReConnectToServer(); } @@ -951,13 +968,25 @@ public class CoreService extends Service { runtime.getDbHelper().deleteSleepData(); } + //检查是否有未读消息需要提醒 + private void checkUnreadMessage(){ + + String msg=Config.getLastUnReadMessage(this); + Util.checkMesageNeedNotifi(msg,runtime); + + + } + + //内部广播StringMessage public static void DevliverStringMessage(String cmd){ CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd,""); } + //内部广播StringMessage public static void DevliverStringMessage(String cmd,String str){ CoreService.getInstance().connection.DeliverCMDMessageToSystem(cmd,str); } + //表带剪断检测报警,此处只是设备本地提醒,并不发送报警信息给服务器。 public void checkAlarmMessage(){ @@ -979,6 +1008,8 @@ public class CoreService extends Service { } } + + //检测久坐提醒 public void checkKeepSitting(){ String dateyyyyMMDDhhmmss=TimeUtil.getSystemTime3(); //为了更新 isInSleepRange, 下面的语句必须执行 @@ -1208,11 +1239,13 @@ public class CoreService extends Service { updateSleepDate(); //检查睡眠 checkKeepSitting();//检查久坐 checkAlarmMessage();//检测是否有报警消息需要显示 + checkUnreadMessage();//检查未读消息 if (this.mKeepAlive != null) { if (connection.isServerConnected() && runtime.isServerProtocolConnected()) { this.mKeepAlive.onHeartAlarm(this.connection, this.runtime); ICLogger.i("triggerBLEProcess "); locationClient.triggerBLEProcess();//每次心跳检测一次BLE + Deliver.triggerSendThread(); } else { // if (this.mKeepAlive.is_retry_time_above_limit()) { ICLogger.i("check 发送心跳包时,如果发现服务器没有响应,或者socket连接,则重新尝试连接服务器!"); @@ -1296,7 +1329,8 @@ public class CoreService extends Service { ICLogger.i("自由锻炼中,跳过原有的循环心率检测!"); } else { sb.append("setHeartRateDetectAlarm " + heartRateDetectAlarmCycle); - HeartRateManager.triggerPPGtest(); + if(!server_starting) + HeartRateManager.triggerPPGtest(); } } if (Config.LOG_TOFILE)ICLogger.logToFile("alarmCycle",sb.toString()); @@ -1416,7 +1450,8 @@ public class CoreService extends Service { if (Runtime.practising == true) { ICLogger.i("自由锻炼中,跳过原有的循环温度检测!"); } else { - TemperatureUtil.doTempTestInThread(); + if(!server_starting) + TemperatureUtil.doTempTestInThread(); } } @@ -1591,4 +1626,5 @@ public class CoreService extends Service { this.connection.close(); } + } diff --git a/app/src/main/java/com/enqualcomm/support/CrashHandler.java b/app/src/main/java/com/enqualcomm/support/CrashHandler.java index bc5536a9..7b76c212 100644 --- a/app/src/main/java/com/enqualcomm/support/CrashHandler.java +++ b/app/src/main/java/com/enqualcomm/support/CrashHandler.java @@ -118,6 +118,8 @@ public class CrashHandler implements Thread.UncaughtExceptionHandler { collectDeviceInfo(mContext); // 保存日志文件 saveCrashInfo2File(ex); + //设置断网状态 + Util.setSystemProperties("persist.sys.server_connected","false"); return true; } diff --git a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java index dcd3240f..41c8bcb6 100644 --- a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -24,6 +24,7 @@ import android.widget.Toast; import com.enqualcomm.support.bean.Contact; import com.enqualcomm.support.bean.ICLocation; import com.enqualcomm.support.bean.Runtime; +import com.enqualcomm.support.service.AudioService; import com.enqualcomm.support.service.Deliver; import com.enqualcomm.support.service.SmsDatabaseChaneObserver; import com.enqualcomm.support.utils.APNUtil; @@ -39,6 +40,7 @@ import com.enqualcomm.support.utils.ServiceUtil; import com.enqualcomm.support.utils.SimSignalUtil; import com.enqualcomm.support.utils.TimeUtil; import com.enqualcomm.support.utils.Util; +import com.enqualcomm.support.utils.VibrateUtil; import com.enqualcomm.support.utils.ftpUtils; import com.ic.protocols.protocolAPIHelper; @@ -1193,7 +1195,19 @@ public class ICSmsManager extends BroadcastReceiver { try { msgtype = Integer.parseInt(list[1]); }catch ( Exception e){} + if(CoreService.getInstance()!=null) CoreService.getInstance().getRuntime().getContextProxy().sendMsgBroadcast(arg, msgtype); + }else if(cmd.startsWith("playnotifiy")) { + + AudioService.getInstance().play(runtime.getContextProxy().context.getAssets(), "ring_msg.mp3"); + VibrateUtil.getInstance(runtime.getContextProxy().context).VibrateOn(true); + + }else if(cmd.startsWith("DeliverSMS")) { + + if(CoreService.getInstance()!=null){ + Deliver.sendLocationMSG(protocolAPIHelper.getLBSLocationMSG(runtime)); + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java index dbce6d9b..237ff0df 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java +++ b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java @@ -180,26 +180,28 @@ public class Runtime { public int Cut_off_flag=0; public enum AlarmType{ - ALARM_SOS, - ALARM_LOWBATTERY, - ALARM_ANTIOFF, - ALARM_WEARED, + ALARM_SOS, //sos + ALARM_LOWBATTERY, //低电 + ALARM_ANTIOFF, //脱腕报警 + ALARM_WEARED, //佩戴 ALARM_CUTOFF,//剪断报警 - ALARM_FALL, - ALARM_ABNORMAL_HEART_RATE, - ALARM_HEART_RATE_HIGH, - ALARM_HEART_RATE_LOW, - ALARM_BPH_HIGH, - ALARM_BPH_LOW, - ALARM_BPL_HIGH, - ALARM_BPL_LOW, + ALARM_FALL, //跌倒 + ALARM_ABNORMAL_HEART_RATE, //心率异常 + ALARM_HEART_RATE_HIGH, //心率高 + ALARM_HEART_RATE_LOW, //心率低 + ALARM_BPH_HIGH, //高压高 + ALARM_BPH_LOW, //高压低 + ALARM_BPL_HIGH, //低压高 + ALARM_BPL_LOW, //低压低 ALARM_SEDENTARY, //久坐提醒 - ALARM_ILLEGAL_CUTOFF, - ALARM_LOCK_WATCH, - ALARM_TEMP_HIGH, - ALARM_TEMP_LOW, - ALARM_POWER_OFF, - ALARM_ESCAPE, + ALARM_ILLEGAL_CUTOFF, //剪断 + ALARM_LOCK_WATCH, //锁定 + ALARM_TEMP_HIGH, //体温高 + ALARM_TEMP_LOW, //体温低 + ALARM_POWER_OFF, //关机 + ALARM_ESCAPE, //逃逸 + ALARM_UNREADMSG, //消息未读 + ALARM_MSGREAD, //消息已读 ALARM_NONE, }; @@ -218,6 +220,7 @@ public class Runtime { * 00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05:剪断报警,06:跌倒报警, * 07:心率异常, 08:心率过高, 09:心率过低,10:收缩压过高,11:收缩压过低,12:舒张压过高,13:舒张压过低, * 14:久坐提醒,15:非法解锁(剪断报警),16:锁定提醒(佩戴提醒),17:体温过高,18体温过低) 19 关机事件(非服务器指令关机), 20,escape逃跑事件(离开蓝牙管控范围) + * 21, 消息未读 , 22消息已读 */ public boolean setAlarmType(AlarmType alarm){ // if ( !fall && !lowbattery && !sos && antioff) @@ -300,9 +303,15 @@ public class Runtime { case ALARM_POWER_OFF: alarmType="19"; break; - case ALARM_NONE: + case ALARM_ESCAPE: alarmType="20"; break; + case ALARM_UNREADMSG: + alarmType="21"; + break; + case ALARM_MSGREAD: + alarmType="22"; + break; default: alarmType="00"; break; 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 f19e757e..b43025de 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -103,6 +103,7 @@ public class Deliver extends AbstractConnectionService { delaySendMSG = new Runnable() { @Override public void run() { + mSendMSGHandler.removeCallbacks(delaySendMSG); if (getAndSendMsgFromQueue()==true){ mSendMSGHandler.postDelayed(delaySendMSG,5000L); } @@ -140,6 +141,8 @@ public class Deliver extends AbstractConnectionService { return ret; } public static void triggerSendThread() { + + mSendMSGHandler.removeCallbacks(delaySendMSG); mSendMSGHandler.post(delaySendMSG); ICLogger.i("triggerSendThread "); // delaySendMSG.run(); @@ -192,11 +195,16 @@ public class Deliver extends AbstractConnectionService { ICLogger.logToFile("APILog", "response failed retry ! " +CheckCount+" " + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache()); } CheckCount++; - }else{ //否则 可能是还没有发送过数据,或者超过重试次数,继续提取queue中数据进行发送 - ICLogger.i("checkSrvResponse CheckCount="+CheckCount+" Timeout or cmd is null, skip "); - if (Config.LOG_TOFILE) - ICLogger.logToFile("APILog", "response timeout skip! " ); - CheckCount=0; + //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送 + if (CheckCount>5){ + ICLogger.i("checkSrvResponse CheckCount="+CheckCount+" Timeout or cmd is null, skip "); + if (Config.LOG_TOFILE) + ICLogger.logToFile("APILog", "response timeout skip! " ); + CheckCount=0; + if(mLock!=null && mLock.isLocked()) + mLock.unlock(); + return false; + } } } @@ -347,7 +355,7 @@ public class Deliver extends AbstractConnectionService { if (NeedCheckServerResponse==true){ if(needCheckResponseCMD!=null) { - ICLogger.i("mqtt ====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)); + ICLogger.i("====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)); if( cmd.equals(protocolAPIHelper.isCmdStr (needCheckResponseCMD))){ ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)+" is responsed!"); ServerResponsed=true; diff --git a/app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java b/app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java index f4328943..980894e5 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java +++ b/app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java @@ -382,11 +382,13 @@ public class ContextProxy { VibrateUtil.getInstance(_context).VibrateOnOnce(true); Util.mSleep(2000); } - Intent intent = new Intent(ActionSrvPushTxt); - intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息 - intent.putExtra("txtMsg", msg); - intent.addFlags(FLAG_ACTIVITY_NEW_TASK); - _context.sendBroadcast(intent); + if(Config.noBroadCastPushTxtNotify==false) { + Intent intent = new Intent(ActionSrvPushTxt); + intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息 + intent.putExtra("txtMsg", msg); + intent.addFlags(FLAG_ACTIVITY_NEW_TASK); + _context.sendBroadcast(intent); + } } },50); @@ -405,11 +407,13 @@ public class ContextProxy { VibrateUtil.getInstance(_context).VibrateOnOnce(true); Util.mSleep(2000); } - Intent intent = new Intent(ActionSrvPushTxt); - intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息 - intent.putExtra("txtMsg", msg); - intent.addFlags(FLAG_ACTIVITY_NEW_TASK); - _context.sendBroadcast(intent); + if(Config.noBroadCastPushTxtNotify==false) { + Intent intent = new Intent(ActionSrvPushTxt); + intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息 + intent.putExtra("txtMsg", msg); + intent.addFlags(FLAG_ACTIVITY_NEW_TASK); + _context.sendBroadcast(intent); + } } },50); @@ -429,12 +433,13 @@ public class ContextProxy { VibrateUtil.getInstance(_context).VibrateOnOnce(true); Util.mSleep(2000); } - - Intent intent = new Intent(ActionSrvPushTxt); - intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息 - intent.putExtra("txtMsg", msg); - intent.addFlags(FLAG_ACTIVITY_NEW_TASK); - _context.sendBroadcast(intent); + if(Config.noBroadCastPushTxtNotify==false) { + Intent intent = new Intent(ActionSrvPushTxt); + intent.putExtra("msgType", msgType); //0 代表 server下发消息,1代表 SMS消息,2代表有提示音的消息 + intent.putExtra("txtMsg", msg); + intent.addFlags(FLAG_ACTIVITY_NEW_TASK); + _context.sendBroadcast(intent); + } } },50); } diff --git a/app/src/main/java/com/enqualcomm/support/utils/ICAudioManager.java b/app/src/main/java/com/enqualcomm/support/utils/ICAudioManager.java index 7e311820..49e09a25 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/ICAudioManager.java +++ b/app/src/main/java/com/enqualcomm/support/utils/ICAudioManager.java @@ -10,6 +10,26 @@ public class ICAudioManager { 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"); 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 5de3340b..1a3d0396 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java +++ b/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java @@ -192,8 +192,19 @@ public class ProcessReceiver extends BroadcastReceiver { public void onClick(DialogInterface var1, int var2) { var1.dismiss(); VibrateUtil.getInstance(context).VibrateOn(false); + + if(CoreService.getInstance()!=null) { - CoreService.getInstance().getConnection().send(protocolAPIHelper.getPushTxtReadFlagToSrvMSG(CoreService.getInstance().getRuntime())); + Runtime runtime=CoreService.getInstance().getRuntime(); + if(Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN")) + { + runtime.setAlarmType(Runtime.AlarmType.ALARM_MSGREAD); + Config.setLastUnReadMessage(CoreService.getInstance(),""); + Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime)); + }else{ + CoreService.getInstance().getConnection().send(protocolAPIHelper.getPushTxtReadFlagToSrvMSG(runtime)); + } + } } }).create(); diff --git a/app/src/main/java/com/enqualcomm/support/utils/Util.java b/app/src/main/java/com/enqualcomm/support/utils/Util.java index b2c50831..66e29b64 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/Util.java +++ b/app/src/main/java/com/enqualcomm/support/utils/Util.java @@ -50,10 +50,13 @@ import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; +import com.enqualcomm.support.Config; import com.enqualcomm.support.CoreService; import com.enqualcomm.support.bean.Runtime; import com.enqualcomm.support.bean.VoiceContent; import com.enqualcomm.support.bean.voicePacket; +import com.enqualcomm.support.service.Deliver; +import com.ic.protocols.protocolAPIHelper; import static android.content.Context.CONNECTIVITY_SERVICE; import static android.content.Context.WIFI_SERVICE; @@ -76,6 +79,40 @@ public class Util { }catch ( Exception e){} } + public static void checkMesageNeedNotifi(String msg,Runtime runtime){ + + if(msg!=null ) { + //msg 格式 index,20201111182000,003f99302994 + String list[]= msg.split(","); + if(list.length==3) { + String index=list[0]; + String datetime=list[1]; + String txtmsg=list[2]; + + long lasttime_inms=System.currentTimeMillis()-TimeUtil.parseDatetiime(datetime).getTime(); + ICLogger.i("有消息"+lasttime_inms/1000 +"秒未读!"); + if ((lasttime_inms>=8*60*1000 && lasttime_inms<=13*60*1000) //在10分钟,20分钟时都提醒一次。 + ||(lasttime_inms>18*60*1000 && lasttime_inms<=23*60*1000)) + { + + if (!Config.custom_name.equals("VitracK")){ + txtmsg = Util.UrlGB2312ToUTF8(txtmsg); + } + if(Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN")) + { + runtime.setAlarmType(Runtime.AlarmType.ALARM_UNREADMSG); + // Config.setLastUnReadMessage(CoreService.getInstance(),""); + Deliver.sendLocationMSG(protocolAPIHelper.getWarningMSG(runtime)); + } + runtime.getContextProxy().sendMsgBroadcast(txtmsg, 0); + } + + + }else{ + ICLogger.i("UnreadMsg format error !"); + } + } + } public static boolean installed(Context context,String appPackageName) { PackageManager packageManager = context.getPackageManager();// 获取packagemanager diff --git a/app/src/main/java/com/enqualcomm/support/utils/VibrateUtil.java b/app/src/main/java/com/enqualcomm/support/utils/VibrateUtil.java index f8f4153b..8baa2c7b 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/VibrateUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/VibrateUtil.java @@ -19,25 +19,37 @@ public class VibrateUtil { private static Vibrator vibrator = null; private static VibrateUtil vibrateUtil=null; - private final long[] patter = {1000, 1000, 1000, 1000}; //1秒开,1秒关,2秒开,50ms关 - private final long[] patterOnce = {1000, 1000}; //1秒开,1秒关,2秒开,50ms关 + private static long patter_item= 1000; + private long[] patter = {patter_item, 1000, patter_item, 1000}; //1秒开,1秒关,2秒开,50ms关 + private long[] patterOnce = {patter_item, 1000}; //1秒开,1秒关,2秒开,50ms关 + /** + * 设置震动时长 + * @param l 单位ms + */ + public static void setVibPattern(int l){ + patter_item=l; + } public void VibrateOn(boolean on){ - if(vibrator!=null) { - if (on) + if (patter_item>0) { + if (vibrator != null) { + if (on) // vibrator.vibrate(patter, 0);//一直循环 - vibrator.vibrate(patter, -1);//不循环 - else - vibrator.cancel(); + vibrator.vibrate(patter, -1);//不循环 + else + vibrator.cancel(); + } } } public void VibrateOnOnce(boolean on){ - if(vibrator!=null) { - if (on) + if (patter_item>0) { + if (vibrator != null) { + if (on) // vibrator.vibrate(patter, 0);//一直循环 - vibrator.vibrate(patterOnce, -1);//不循环 - else - vibrator.cancel(); + vibrator.vibrate(patterOnce, -1);//不循环 + else + vibrator.cancel(); + } } } } 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 e28e300d..7492bdf7 100644 --- a/app/src/main/java/com/ic/protocols/protocol_ic.java +++ b/app/src/main/java/com/ic/protocols/protocol_ic.java @@ -22,10 +22,12 @@ import com.enqualcomm.support.bean.voicePacket; import com.enqualcomm.support.service.HeartRateManager; import com.enqualcomm.support.utils.CameraUtil; import com.enqualcomm.support.utils.Connection; +import com.enqualcomm.support.utils.ICAudioManager; import com.enqualcomm.support.utils.ICLogger; import com.enqualcomm.support.utils.TemperatureUtil; import com.enqualcomm.support.utils.TimeUtil; import com.enqualcomm.support.utils.Util; +import com.enqualcomm.support.utils.VibrateUtil; import com.enqualcomm.support.utils.WakeLockUtil; import java.io.File; @@ -155,8 +157,14 @@ public class protocol_ic { BPTQ, APAT,//剪断消息开关 BPAT, - APBT, //设置蓝牙扫描间隔 - BPBT, + APBT, + BPBT,//设置蓝牙扫描间隔 + APWL, + BPWL,//设置白名单 + AP65, + BP65,//设置音量 + AP47, + BP47,//设置震动 UNKNOWN_CMD, } @@ -267,7 +275,12 @@ public class protocol_ic { cmdMap.put(CMD_TYPE.BPAT, "BPAT"); cmdMap.put(CMD_TYPE.APBT, "APBT"); cmdMap.put(CMD_TYPE.BPBT, "BPBT"); - + cmdMap.put(CMD_TYPE.APWL, "APWL"); + cmdMap.put(CMD_TYPE.BPWL, "BPWL"); + cmdMap.put(CMD_TYPE.AP65, "AP65"); + cmdMap.put(CMD_TYPE.BP65, "BP65"); + cmdMap.put(CMD_TYPE.AP47, "AP47"); + cmdMap.put(CMD_TYPE.BP47, "BP47"); } @@ -1231,6 +1244,9 @@ public class protocol_ic { if (cmdlist.length == 4){ String cmdindex=cmdlist[2]; String txtmsg=cmdlist[3]; + StringBuilder sb=new StringBuilder(); + runtime.PushtxtMsg_srv_index=cmdindex;//给回复AP94用 + sb.append(cmdindex).append(CMDSPLIT).append(TimeUtil.getSystemTimeyyyyMMddHHmmss()).append(CMDSPLIT).append(txtmsg); if (Config.custom_name.equals("VitracK")){ }else{ @@ -1241,6 +1257,7 @@ public class protocol_ic { //设定当前工作模式及循环频率 connection.send(msg); ICLogger.i("received Txt Msg "+txtmsg); + Config.setLastUnReadMessage(runtime.getContextProxy().context,sb.toString()); runtime.getContextProxy().sendMsgBroadcast(txtmsg,0); runtime.getContextProxy().saveMstToSMSDB(txtmsg); }else{ @@ -2683,6 +2700,224 @@ public class protocol_ic { } } + /** + * 85.设置联系人白名单(10个)(下行协议:BPWL,响应:APWL) + * 示例: + * 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 # + * 说明: + * IW:标识符 + * BPWL : 命令字符 + * 353456789012345:IMEI号,设备唯一ID + * 080835 :指令流水号 + * D3590D54|135xxxxxxxxxx|9507xxxxxxxx : 一组联系人,使用|分隔名称和电话号码和绑定号码,名称使用UNICODE编码直接下发byte,多组之间使用逗号分隔,未填写的可为空,但位置仍需保留 + * 设备响应: 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# + * 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回复设备当前设置的主控号码供平台同步使用 + * 说明: 本消息适用所有终端 + */ + public static StringMessage APWL(String index,String[] phnumbs){ + return genStringMessage("APWL",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APWL)) + .append(CMDSPLIT).append(index) + .append(CMDSPLIT).append(phnumbs[0]) + .append(CMDSPLIT).append(phnumbs[1]) + .append(CMDSPLIT).append(phnumbs[2]) + .append(CMDSPLIT).append(phnumbs[3]) + .append(CMDSPLIT).append(phnumbs[4]) + .append(CMDSPLIT).append(phnumbs[5]) + .append(CMDSPLIT).append(phnumbs[6]) + .append(CMDSPLIT).append(phnumbs[7]) + .append(CMDSPLIT).append(phnumbs[8]) + .append(CMDSPLIT).append(phnumbs[9]) + .append(CMDEND).toString()); + } + //设置通讯录,白名单(10个) + public void handleBPWL(Connection connection,String cmd , Runtime runtime){ +// IWBPWL,867155030001063,357444,9b44529b|13554820016,,,,,,,,, +/** + * IWBPWL,353456789012345,080835, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * 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){ + case 13: + phnums[9]=cmdlist[12]; + sb.append(phnums[9]).append(","); + case 12: + phnums[8]=cmdlist[11]; + sb.append(phnums[8]).append(","); + case 11: + phnums[7]=cmdlist[10]; + sb.append(phnums[7]).append(","); + case 10: + phnums[6]=cmdlist[9]; + sb.append(phnums[6]).append(","); + case 9: + phnums[5]=cmdlist[8]; + sb.append(phnums[5]).append(","); + case 8: + phnums[4]=cmdlist[7]; + sb.append(phnums[4]).append(","); + case 7: + phnums[3]=cmdlist[6]; + sb.append(phnums[3]).append(","); + case 6: + phnums[2]=cmdlist[5]; + sb.append(phnums[2]).append(","); + case 5: + phnums[1]=cmdlist[4]; + sb.append(phnums[1]).append(","); + case 4: + phnums[0]=cmdlist[3]; + sb.append(phnums[0]).append(","); + + } + + String index=cmdlist[2]; + ICLogger.i(sb.toString()); + connection.send(AP14(index,phnums)); + ArrayList contactArray=new ArrayList(); + + if(Config.custom_name.equals("YT")) { + ICLogger.i("=====add hotline 96885 "); + contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885")); + } + for (int i=0; i< phnums.length;i++){ + String[] tmp= phnums[i].split("\\|"); + if (tmp.length==2){ + String name= Util.decodeUnicode2Utf8(tmp[0]); + String phonem=tmp[1]; + ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem); + contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem)); + }else{ + ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length); + + } + } +// 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(" BPWL format error!"); + } + + } + + + + + public static StringMessage AP65(String id,String cy) + { + return genStringMessage("AP65",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP65)) + .append(CMDSPLIT).append(id) + .append(CMDSPLIT).append(cy) + .append(CMDEND).toString()); + } + + public void handleBP65( Connection connection,Runtime runtime,String cmd) { +/*** + * 36.音量设置(下行协议:BP65,响应:AP65) + * 示例: + * IWBP65,353456789012345,080835,1# + * 说明: + * IW:标识符 + * BP65: 命令字符 + * 353456789012345:IMEI号,设备唯一ID + * 080835 :指令流水号 + * 1 : 表示音量等级为1 + * 设备响应: IWAP65,080835, 1# + * 080835: 设备响应的时候带上响应流水号 + * 1: 表示指令执行成功,音量等级为1 + */ + + log("BP65 "+cmd); + String[] cmdlist=cmd.split(CMDSPLIT); + if (cmdlist.length==4){ + String id=cmdlist[2]; + String cycle=cmdlist[3].replace("#",""); + connection.send(AP65(id,cycle)); + + if(Util.isNumeric(cycle)){ + int mastervolume=Integer.parseInt(cycle); + + ICLogger.i("设置音量 "+mastervolume); + //实际设备音量 0~15 协议音量0~7需要转换 + int volume=mastervolume*2; + if (volume<0)volume=0; + if(volume>=14) volume=15; + Config.setMasterVolume(runtime.getContextProxy().context,mastervolume*2); + ICAudioManager.setMasterVolumn(runtime.getContextProxy().context,mastervolume*2); + + }else{ + ICLogger.i(" BP65 Format error!"); + } + + }else{ + ICLogger.i(" BP65 Format error!"); + } + } + + public static StringMessage AP47(String id,String cycle) + { + return genStringMessage("AP47",new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP47)) + .append(CMDSPLIT).append(id) + .append(CMDSPLIT).append(cycle) + .append(CMDEND).toString()); + } + + + public void handleBP47( Connection connection,Runtime runtime,String cmd) { +/*** + * 37.震动设置(下行协议号:BP47,响应:AP47) + * 示例: + * IWBP47,353456789012345,080835,10# + * 说明: + * IW:标识符 + * BP47 : 命令字符 + * 353456789012345:IMEI号,设备唯一ID + * 080835 :指令流水号 + * 10: 表示震动时长,此处单位为称,表示震动10秒钟 + * 设备响应: IWAP47,080835,1# + * 080835:指令流水号 + * 1:表示设备执行成功,0 表示设备执行失败 + */ + + log("BP47 "+cmd); + String[] cmdlist=cmd.split(CMDSPLIT); + if (cmdlist.length==4){ + String id=cmdlist[2]; + String cycle=cmdlist[3].replace("#",""); + connection.send(AP47(id,cycle)); + + if(Util.isNumeric(cycle)){ + int vibduration=Integer.parseInt(cycle); + ICLogger.i("设置震动时长 "+vibduration+" 秒"); + Config.setDurationOfVibration(runtime.getContextProxy().context,vibduration); + VibrateUtil.setVibPattern(vibduration*1000); + + }else{ + ICLogger.i(" BP47 Format error!"); + } + + }else{ + ICLogger.i(" BP47 Format error!"); + } + } public boolean handleCmd(CMD_TYPE type, String cmd) { //普通非二进制命令用此函数处理 @@ -2769,6 +3004,11 @@ public class protocol_ic { handleBP14(mConnection,cmd,mRuntime); ICLogger.i("收到服务器设置白名单号码命令BP14"); break; + case BPWL: + //收到设置白名单号码 + handleBPWL(mConnection,cmd,mRuntime); + ICLogger.i("收到服务器设置白名单号码命令BPWL"); + break; case BP15: handleBP15(cmd,mConnection,mRuntime); ICLogger.i("收到服务器设置定位命令BP15"); @@ -2904,6 +3144,13 @@ public class protocol_ic { handleBPBT(mConnection,mRuntime,cmd); break; + case BP65://声音设置 + handleBP65(mConnection,mRuntime,cmd); + break; + case BP47://震动设置 + handleBP47(mConnection,mRuntime,cmd); + break; + } return ret; diff --git a/app/src/main/res/layout/dialog_normal_layout.xml b/app/src/main/res/layout/dialog_normal_layout.xml index d42f7804..f1917ce3 100644 --- a/app/src/main/res/layout/dialog_normal_layout.xml +++ b/app/src/main/res/layout/dialog_normal_layout.xml @@ -21,10 +21,16 @@ android:text="@string/title_alert" style="@style/text_18_ffffff" android:textSize="30sp" /> + - - - - - + + android:layout_gravity="bottom" + android:orientation="horizontal" + android:background="@drawable/bg_bombbox" + android:layout_width="fill_parent" + android:layout_height="60.0dip"> + + + + + \ No newline at end of file diff --git a/app/version_code.properties b/app/version_code.properties index 9c22d76e..1c806fcb 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Fri Nov 06 15:56:55 CST 2020 -VERSION_CODE=689 +#Wed Nov 11 23:33:52 CST 2020 +VERSION_CODE=692