From: SnickerSun Date: Thu, 26 Aug 2021 16:32:53 +0000 (+0800) Subject: release ICProtocol8.1_V920_2108270026_release.apk X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=17461070192109dc595d87c05be2b805dff9d39d;p=icsupport.git release ICProtocol8.1_V920_2108270026_release.apk 添加 Mode 10 CUSTOM_MOD9_WIFI_FIRST, 优先WiFi定位,WiFi无定位再开始GPS定位。 添加 IP指令解析及配置 修复 hrtstart 指令没有做周期测试问题 配置默认 18cube 都是默认 Mode10 定位, 15分钟定位周期,心率,体温都禁止测试。 修复 一旦设置心率就无法禁用问题。且修改其有效数据为5分钟以上。 --- diff --git a/app/release/ICProtocol8.1_V916_2108201434_release.apk b/app/release/ICProtocol8.1_V920_2108270026_release.apk similarity index 76% rename from app/release/ICProtocol8.1_V916_2108201434_release.apk rename to app/release/ICProtocol8.1_V920_2108270026_release.apk index 9218199c..822b507c 100644 Binary files a/app/release/ICProtocol8.1_V916_2108201434_release.apk and b/app/release/ICProtocol8.1_V920_2108270026_release.apk differ diff --git a/app/release/output.json b/app/release/output.json index 015168e7..6f71690c 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":918,"versionName":"2108251623","enabled":true,"outputFile":"ICProtocol8.1_V918_2108251623_release.apk","fullName":"release","baseName":"release"},"path":"ICProtocol8.1_V918_2108251623_release.apk","properties":{}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":920,"versionName":"2108270026","enabled":true,"outputFile":"ICProtocol8.1_V920_2108270026_release.apk","fullName":"release","baseName":"release"},"path":"ICProtocol8.1_V920_2108270026_release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8e6d6193..2f0e1642 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -102,7 +102,7 @@ - + " + heartRateDetectAlarmCycleMinutes); ICLogger.d("ppgtestCycle == > " + heartRateDetectAlarmCycleMinutes); //如果周期不为0,那么就设置到配置信息里头去。 - if (heartRateDetectAlarmCycleMinutes > 1) { - Config.setPPGTestCycleInMinutes(runtime.getContextProxy().context, heartRateDetectAlarmCycleMinutes); - runtime.setPpgTestCycleInMinutes(Config.getPPGTestCycleInMinutes(runtime.getContextProxy().context)); - ICLogger.i("get and set PPGTestCycle " + heartRateDetectAlarmCycleMinutes); - } +// if (heartRateDetectAlarmCycleMinutes > 1) { + Config.setPPGTestCycleInMinutes(runtime.getContextProxy().context, heartRateDetectAlarmCycleMinutes); + runtime.setPpgTestCycleInMinutes(Config.getPPGTestCycleInMinutes(runtime.getContextProxy().context)); + ICLogger.i("get and set PPGTestCycle " + heartRateDetectAlarmCycleMinutes); +// } StringBuilder sb = new StringBuilder(); - if (heartRateDetectAlarmCycleMinutes > 1) { + if (heartRateDetectAlarmCycleMinutes > 5) { AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context, heartRateDetectAlarmCycleMinutes, ACTION_HEATR_RATE_START); } diff --git a/app/src/main/java/com/ic/protocolSrv/ICSmsManager.java b/app/src/main/java/com/ic/protocolSrv/ICSmsManager.java index a0c9c8fb..9c337506 100644 --- a/app/src/main/java/com/ic/protocolSrv/ICSmsManager.java +++ b/app/src/main/java/com/ic/protocolSrv/ICSmsManager.java @@ -63,6 +63,7 @@ import static com.ic.protocolSrv.Constants.ACTION_START_FOTA_UPDATE; import static com.ic.protocolSrv.Constants.ACTION_TINTERNAL_TEST; import static com.ic.protocolSrv.Constants.FROM_SERVER; import static com.ic.protocolSrv.Constants.KeyReplyData; +import static com.ic.protocolSrv.bean.ICLocation.CUSTOM_MOD9_WIFI_FIRST; import static com.ic.protocolSrv.utils.SimSignalUtil.send_at_cmd; import static com.ic.protocolSrv.utils.SimSignalUtil.send_at_setImei0; @@ -560,6 +561,7 @@ public class ICSmsManager extends BroadcastReceiver { case ICLocation.CUSTOM_MOD: case ICLocation.CUSTOM_MOD8_GPS: case ICLocation.CUSTOM_MOD8_WIFI: + case CUSTOM_MOD9_WIFI_FIRST: break; default: sendSMS(phoneNumber, "set to Location Failed ,value range should be Mod in (1,2,3,4,5,8,9) and cycle >=30!"); @@ -1060,6 +1062,9 @@ public class ICSmsManager extends BroadcastReceiver { case 2: case 3: case 4: + case 5: + case 6: + case 7: Util.setSystemProperties("persist.sys.protocol_no", strtmp); Config.getProtocolNumber(); Config.loadServerSettings(runtime); @@ -1068,7 +1073,7 @@ public class ICSmsManager extends BroadcastReceiver { CoreService.getInstance().ReConnectToServer(); break; default: - sendSMS(phoneNumber, "setprotocol only support Protocol 0/1/2/3/4 by now! "); + sendSMS(phoneNumber, "setprotocol only support Protocol 0/1/2/3/4/5/6/7 by now! "); break; } diff --git a/app/src/main/java/com/ic/protocolSrv/LocationClient.java b/app/src/main/java/com/ic/protocolSrv/LocationClient.java index c0a251b6..2dd784d7 100644 --- a/app/src/main/java/com/ic/protocolSrv/LocationClient.java +++ b/app/src/main/java/com/ic/protocolSrv/LocationClient.java @@ -384,6 +384,7 @@ public class LocationClient { private static int checktimes = 0; private static boolean timeout = false; + private static boolean wifi_timeout = false; private static boolean isLocating = false; private static boolean isWifiScanning = false; LBSHelper.OnWiFiInfoListener wifiinfoListener = new LBSHelper.OnWiFiInfoListener() { @@ -589,11 +590,12 @@ public class LocationClient { gps_ok = true; if (runtime.getLocationInstance().getLocationStat() == ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT) gps_nosignal = true; - lbs_ok = (runtime.getLocationInstance().isDataChanged() == false - || (runtime.getLocationInstance().getMNC().equals("0") - && runtime.getLocationInstance().getMCC().equals("0") - && runtime.getLocationInstance().getGSMStationCID() == 0 - && runtime.getLocationInstance().getLAC() == 0)) ? false : true; + lbs_ok = ( + runtime.getLocationInstance().isDataChanged() == false /*如果mcc,mnc等都没有变过 */|| + ( runtime.getLocationInstance().getMNC().equals("0") && runtime.getLocationInstance().getMCC().equals("0") + && runtime.getLocationInstance().getGSMStationCID() == 0 && runtime.getLocationInstance().getLAC() == 0 + ) + )? false : true; // ICLogger.i("getMNC "+runtime.getLocationInstance().getMNC()+" getMCC "+runtime.getLocationInstance().getMCC()+" getGSMStationCID " + runtime.getLocationInstance().getGSMStationCID()+ " getLAC "+runtime.getLocationInstance().getLAC()+" changed "+runtime.getLocationInstance().isDataChanged()); ICLogger.i("waitAndSendLocation " + checktimes + ", lbs=" + lbs_ok + ", wifi=" + wifi_ok + ", gps=" + gps_ok + ", mode=" + mode); @@ -605,7 +607,7 @@ public class LocationClient { case ICLocation.CUSTOM_MOD: case ICLocation.CUSTOM_MOD8_GPS: case ICLocation.EMERGNECY_MOD: - case ICLocation.REALTIME_MOD: + case ICLocation.REALTIME_MOD: { //GPS 优先的话多给些时间(10秒) if (checktimes > GPSLocationTimeoutInSeconds) { ICLogger.i("waitAndSendLocation " + checktimes + " timeout"); @@ -621,7 +623,6 @@ public class LocationClient { ICLogger.i("waitAndSendLocation " + timeCost + "> 50000ms timeout"); //timeout=true; } - // lbs only +timeout, lbs+wifi+gpsNosignal, libs+ , lbs+gps+wifi, Timeout can override wifi and gps if ((lbs_ok && timeout) || (gps_ok) @@ -675,12 +676,115 @@ public class LocationClient { if (Config.LOG_TOFILE) ICLogger.logToFile("GPS", "timeout no location "); } + } break; + case ICLocation.CUSTOM_MOD9_WIFI_FIRST: { + //检测wifi和lbs先,成功则直接返回,失败则开启GPS + if (checktimes > WiFiLocationTimeoutInSeconds) { + ICLogger.i("waitAndSendLocation " + checktimes + " WIFI Timeout start GPS location"); + wifi_timeout = true; + startGpsLocate(); + } + if (checktimes > GPSLocationTimeoutInSeconds) { + ICLogger.i("waitAndSendLocation " + checktimes + " GPS timeout"); + timeout = true; + } + if (NoMoveTimeout && (timeout || gps_nosignal)) { + //没有移动,GPS超时或者没信号都会给 计数 加 1 + gpsTimeoutCountOnNoMove++; + } + timeCost = System.currentTimeMillis() - startCheckTime; + if ((startCheckTime != 0L) && (timeCost > 50 * 1000L)) { + //有时timer计数不准,则根据实际时间计算 + ICLogger.i("waitAndSendLocation " + timeCost + "> 50000ms timeout"); + //timeout=true; + } + // lbs only +timeout, lbs+wifi+gpsNosignal, libs+ , lbs+gps+wifi, Timeout can override wifi and gps + String locationtype = "LBS"; + if (wifi_ok) { + locationtype = "WiFi"; + runtime.getLocationInstance().setLocationType(locationtype); + runtime.getLocationInstance().setLocationTime(TimeUtil.getSystemTime3()); + if (startSOSLocation) { + StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime); + DeliverMessage(AP10_CMD); + runtime.setAlarmType(Runtime.AlarmType.ALARM_REMOVE_SOS); + startSOSLocation = false; + } + if (startNomalLocation = true) { + startNomalLocation = false; + StringMessage AP02_CMD = protocolAPIHelper.getLBSLocationMSG(runtime); + DeliverMessage(AP02_CMD); + } + stopCheckLocationResult(); + String msg = "Location Fixed Type " + runtime.getLocationInstance().getLocationType() + " at " + runtime.getLocationInstance().getLocationTime() + " timeout " + timeout; + ICLogger.i(msg); + if (responseUrl != null) { + responseUrl.replyCallBack("Location Fixed Type " + locationtype); + } + if (Config.LOG_TOFILE) + ICLogger.logToFile("GPS", msg); + + } else if (wifi_timeout) { + + if ((lbs_ok && timeout) + || (gps_ok) + || (lbs_ok && (gps_ok || startSOSLocation)) + || (lbs_ok && (gps_ok || startSOSLocation) && wifi_ok) + || (lbs_ok && gps_nosignal && wifi_ok) + ) { + + if (gps_ok) { + locationtype = "GPS"; + } + runtime.getLocationInstance().setLocationType(locationtype); + runtime.getLocationInstance().setLocationTime(TimeUtil.getSystemTime3()); + if (startSOSLocation) { + StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime); + DeliverMessage(AP10_CMD); + runtime.setAlarmType(Runtime.AlarmType.ALARM_REMOVE_SOS); + startSOSLocation = false; + } + if (startNomalLocation = true) { + startNomalLocation = false; + if (gps_ok) { + if (!TextUtils.isEmpty(runtime.getWifiInfo())) { + StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime); + DeliverMessage(AP01_CMD); + } + } else { + StringMessage AP02_CMD = protocolAPIHelper.getLBSLocationMSG(runtime); + DeliverMessage(AP02_CMD); + } + } + stopCheckLocationResult(); + String msg = "Location Fixed Type " + runtime.getLocationInstance().getLocationType() + " at " + runtime.getLocationInstance().getLocationTime() + " timeout " + timeout; + ICLogger.i(msg); + if (responseUrl != null) { + if (locationtype.equals("GPS")) { + responseUrl.replyCallBack(runtime.getLocationInstance().getLocation().latGPSStr + "," + runtime.getLocationInstance().getLocation().lonGPSStr); + } else { + responseUrl.replyCallBack("Location Fixed Type " + locationtype); + } + } + if (Config.LOG_TOFILE) { + ICLogger.logToFile("GPS", msg); + } + } else if (timeout) { + //timeout + noLBS +noGPS + ICLogger.i("timeout no location "); + stopCheckLocationResult(); + if (Config.LOG_TOFILE) + ICLogger.logToFile("GPS", "timeout no location "); + } + } + } + break; case ICLocation.NORMAL_MOD: case ICLocation.LOWPOWER_MOD: case ICLocation.CUSTOM_MOD8_WIFI: - default: + default: { //wifi优先的话给20秒时间 if (checktimes > WiFiLocationTimeoutInSeconds) { ICLogger.i("waitAndSendLocation " + checktimes + " timeout"); @@ -729,6 +833,7 @@ public class LocationClient { if (Config.LOG_TOFILE) ICLogger.logToFile("GPS", "timeout no location "); } + } break; } ICLogger.i("needCheckAgain " + needCheckAgain); @@ -1025,6 +1130,20 @@ public class LocationClient { clearGPSlocateStat(); //确保gps关闭,防止切换回来gps状态错误,尤其是不NoStop模式下的gps切换回来有此风险。 } break; + case ICLocation.CUSTOM_MOD9_WIFI_FIRST: + //此处要暂时跳过GPS定位,待WiFi未定位再开始GPS定位! + if (!NoMoveAndNoGPSsignalSkipGpsFlag) { + if (runtime.getLocationInstance().getLocation_cycle() <= 60) { + nmeaListener.setNoStop(true); + } else { + nmeaListener.setNoStop(false); + } + //所有定位逻辑都和CUSTOM_MOD8_GPS 一致,除了开始GPS定位。后期开始就不用clean GPS状态了 +// startGpsLocate(); + } else { + clearGPSlocateStat(); //如果wifi优先,则确保gps关闭,防止切换回来gps状态错误,尤其是不NoStop模式下的gps切换回来有此风险。 + } + break; case ICLocation.LOWPOWER_MOD: case ICLocation.NORMAL_MOD: case ICLocation.CUSTOM_MOD8_WIFI: diff --git a/app/src/main/java/com/ic/protocolSrv/NMEAListener.java b/app/src/main/java/com/ic/protocolSrv/NMEAListener.java index 8149fc09..7d1a35fa 100644 --- a/app/src/main/java/com/ic/protocolSrv/NMEAListener.java +++ b/app/src/main/java/com/ic/protocolSrv/NMEAListener.java @@ -87,9 +87,11 @@ public class NMEAListener implements NmeaListener, LocationListener { case ICLocation.CUSTOM_MOD8_GPS: case ICLocation.EMERGNECY_MOD: case ICLocation.REALTIME_MOD: - case ICLocation.CUSTOM_MOD9_WIFI_FIRST: //GPS 定位模式不关闭GPS,防止 1分钟定位超时后,重新关闭开启GPS。 //不给GPS继续定位的机会,造成第一次定位困难! + break; + case ICLocation.CUSTOM_MOD9_WIFI_FIRST: + break; case ICLocation.LOWPOWER_MOD: case ICLocation.NORMAL_MOD: 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 2fc4d6b6..1519a9fc 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -439,6 +439,7 @@ public class protocol_fzd { MESSAGE/*文字消息*/, profile,//情景模式 SOSON,//w100SOS 报警开关 + IP,//配置服务器地址 } public static HashMap cmdMap = null; @@ -516,6 +517,7 @@ public class protocol_fzd { cmdMap.put(CMD_TYPE.CALLING, "CALLING"); cmdMap.put(CMD_TYPE.RESET, "RESET"); cmdMap.put(CMD_TYPE.SOSON, "SOSON"); + cmdMap.put(CMD_TYPE.IP, "IP"); } private Connection mConnection = null; @@ -1357,11 +1359,74 @@ public class protocol_fzd { return genFZDCMD(cmdMap.get(CMD_TYPE.hrtstart)); } - public void handleHrtstart(Connection connection) { - + public void handleHrtstart(Connection connection, Runtime runtime, String cmd, String data) { + //[IC*334588000000156*len*hrtstart,x] + // x 为上传间隔时间,单位秒,连续上传时最小时间不小于 300 秒,最大不超过 65535. + // 实例:[IC*334588000000156*len*hrtstart,300] + //终端会每隔 300 秒检测一次心率 + // + //x 为 1 则代表终端心率单次上传,上传完后自动关闭。x 为 0 则代表终端心率上传关闭。 + + int testcycle=0; + try{ + testcycle=Integer.parseInt(data); + }catch (Exception e){ + ICLogger.e(e.getMessage()); + testcycle=0; + ICLogger.i("Hrtstart format error!"); + return; + } connection.send(hrtstart()); + + if(testcycle>=0 && testcycle<65535) { + ICLogger.i("收到服务器指令:设置心率周期 " + testcycle + "秒 相当于 "+testcycle/60 +"分钟" ); + try { + //发送重置PPGCycle的广播,会在CoreServer里面执行 + CoreService.getInstance().setHeartRateDetectAlarm(testcycle/60); + } catch (Exception e) { + ICLogger.e(e.getMessage(), e); + } + }else{ + ICLogger.i("收到服务器指令:设置心率周期超限[0~65535] " + testcycle + "秒 相当于 "+testcycle/60 +"分钟" ); + } + + } + + public static StringMessage IP() { + return genFZDCMD(cmdMap.get(CMD_TYPE.IP)); } + public void handleIP(Connection connection, Runtime runtime, String cmd, String data) { + //平台发送: + // [IC*YYYYYYYYYYYYYYY*LEN*IP,IP地址或者域名,端口号] + // 实例:[IC*334588000000156*0013*IP,192.168.0.1,8099] + // 或者 [IC*334588000000156*0014*IP,myserver.com,8099] + // 终端回复: + // [IC*YYYYYYYYYYYYYYY*LEN*IP] + // 实例:[IC*334588000000156*0002*IP] + // 说明:设置服务器地址和端口 + + String[] cmdlist=data.split(CMD_SPLIT); + if(cmdlist.length==2) { + connection.send(IP()); + + try { + String ip = cmdlist[0]; + int port = Integer.valueOf(cmdlist[1].replace("#", "")); + Config.setCustomServer(runtime.getContextProxy().context, true, ip, port); + Config.loadServerSettings(runtime); + CoreService.getInstance().disconnect_server(); + CoreService.getInstance().ReConnectToServer(); + }catch (Exception e){ + ICLogger.e(e.getMessage(),e); + } + }else{ + ICLogger.i("IP format error!"); + } + + } + + public static StringMessage FIND() { return genFZDCMD(cmdMap.get(CMD_TYPE.FIND)); } @@ -1648,12 +1713,9 @@ public class protocol_fzd { mConnection.DeliverCMDMessageToSystem("poweroff", cmd); break; case hrtstart: - handleHrtstart(mConnection); ICLogger.i("收到服务器心率检测命令"); Config.testType = HeartRateOxygenTestType.JUST_HEART_RATE; - if (mRuntime.check_stat_do_ppg_test()) { - HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER); - } + handleHrtstart(mConnection,mRuntime,cmd,data); break; case bldstart: handleBldstart(mConnection); @@ -1846,6 +1908,11 @@ public class protocol_fzd { ICLogger.d("收到服务器设置的SOS开发消息.."); handleSettings(type, data, mRuntime); break; + case IP: + //设置服务器IP + ICLogger.d("设置服务器 IP 为 "+data); + handleIP(mConnection, mRuntime, cmd,data); + break; } return ret; } diff --git a/app/version_code.properties b/app/version_code.properties index 033fa4bd..ddf5f49e 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Wed Aug 25 16:23:34 CST 2021 -VERSION_CODE=918 +#Fri Aug 27 00:26:43 CST 2021 +VERSION_CODE=920 diff --git a/local.properties b/local.properties index fbab3b27..049e4f59 100644 --- a/local.properties +++ b/local.properties @@ -4,5 +4,5 @@ # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. -#Tue Aug 24 16:58:39 CST 2021 -sdk.dir=E\:\\Android\\Sdk +#Wed Aug 25 18:55:18 CST 2021 +sdk.dir=C\:\\Users\\incar\\AppData\\Local\\Android\\Sdk