From: TrillGates Date: Thu, 5 Aug 2021 06:23:25 +0000 (+0800) Subject: completed sign api. X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=3c3c32e0c60e610c3f780f81219c057778ac4cd4;p=protocol_srv.git completed sign api. --- diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index 5b52de01..ba21d9f6 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -48,6 +48,7 @@ import com.enqualcomm.support.service.KeepAlive; import com.enqualcomm.support.service.PhoneCallListener; import com.enqualcomm.support.service.SendChatMessage; import com.enqualcomm.support.service.ShutdownFlagObserver; +import com.enqualcomm.support.service.SignFlagObserver; import com.enqualcomm.support.service.SilentManager; import com.enqualcomm.support.service.WeTalkMsgObserver; import com.enqualcomm.support.service.base.AbstractConnectionService; @@ -1013,6 +1014,11 @@ public class CoreService extends Service { true, airplaneModeObserver); + SignFlagObserver signFlagObserver = new SignFlagObserver(mHandler, resolver); + resolver.registerContentObserver(Uri.parse(SETTINGS + ".sign_action_flag"), + true, + signFlagObserver); + //启动结束设置标志位,让心率和体温检测可以正常执行。 server_starting = false; diff --git a/app/src/main/java/com/enqualcomm/support/NMEAListener.java b/app/src/main/java/com/enqualcomm/support/NMEAListener.java index c242bbe6..b80fe11f 100644 --- a/app/src/main/java/com/enqualcomm/support/NMEAListener.java +++ b/app/src/main/java/com/enqualcomm/support/NMEAListener.java @@ -10,7 +10,6 @@ import android.os.Handler; import android.os.HandlerThread; import android.provider.Settings; -import com.enqualcomm.support.bean.EventLooperHandlerThread; import com.enqualcomm.support.bean.ICLocation; import com.enqualcomm.support.bean.ICLocation.GPS_locationStatus; import com.enqualcomm.support.bean.Runtime; @@ -23,6 +22,16 @@ import static android.location.LocationManager.GPS_PROVIDER; public class NMEAListener implements NmeaListener, LocationListener { private static boolean listening = false; + private String strLatitude; + private String strLongitude; + + public String getStrLatitude() { + return strLatitude; + } + + public String getStrLongitude() { + return strLongitude; + } public boolean isListening() { return listening; @@ -189,40 +198,40 @@ public class NMEAListener implements NmeaListener, LocationListener { } if (nmeastr.startsWith("$GPGLL,") || nmeastr.startsWith("$GNGLL,")) { String tmplist[] = nmeastr.split(","); -// GPGLL编辑 -//(地理定位信息) -// 例:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D -// 字段0:$GPGLL,语句ID,表明该语句为Geographic Position(GLL)地理定位信息 -// 字段1:纬度ddmm.mmmm,度分格式(前导位数不足则补0) -// 字段2:纬度N(北纬)或S(南纬) -// 字段3:经度dddmm.mmmm,度分格式(前导位数不足则补0) -// 字段4:经度E(东经)或W(西经) -// 字段5:UTC时间,hhmmss.sss格式 -// 字段6:状态,A=定位,V=未定位 -// 字段7:校验值($与*之间的数异或后的值) + // GPGLL编辑 + //(地理定位信息) + //例:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D + //字段0:$GPGLL,语句ID,表明该语句为Geographic Position(GLL)地理定位信息 + //字段1:纬度ddmm.mmmm,度分格式(前导位数不足则补0) + //字段2:纬度N(北纬)或S(南纬) + //字段3:经度dddmm.mmmm,度分格式(前导位数不足则补0) + //字段4:经度E(东经)或W(西经) + //字段5:UTC时间,hhmmss.sss格式 + //字段6:状态,A=定位,V=未定位 + //字段7:校验值($与*之间的数异或后的值) String Lat = tmplist[1]; String lon = tmplist[3]; String fixed = tmplist[6]; // ICLogger.i("GPGLL Lat="+Lat+",Lon="+lon+",fixed="+fixed); } else if (nmeastr.startsWith("$GPRMC,") || nmeastr.startsWith("$GNRMC,")) { -// GPRMC编辑 -//(推荐定位信息数据格式) -// 例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50 -// 字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息 -// 字段1:UTC时间,hhmmss.sss格式 -// 字段2:状态,A=定位,V=未定位 -// 字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0) -// 字段4:纬度N(北纬)或S(南纬) -// 字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0) -// 字段6:经度E(东经)或W(西经) -// 字段7:速度,节,Knots -// 字段8:方位角,度 -// 字段9:UTC日期,DDMMYY格式 -// 字段10:磁偏角,(000 - 180)度(前导位数不足则补0) -// 字段11:磁偏角方向,E=东W=西 -// 字段12:模式,A=自动,D=差分,E=估测,N=数据无效(3.0协议内容) -// 字段13:校验值($与*之间的数异或后的值) + // GPRMC编辑 + //(推荐定位信息数据格式) + //例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50 + //字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息 + //字段1:UTC时间,hhmmss.sss格式 + //字段2:状态,A=定位,V=未定位 + //字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0) + //字段4:纬度N(北纬)或S(南纬) + //字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0) + //字段6:经度E(东经)或W(西经) + //字段7:速度,节,Knots + //字段8:方位角,度 + //字段9:UTC日期,DDMMYY格式 + //字段10:磁偏角,(000 - 180)度(前导位数不足则补0) + //字段11:磁偏角方向,E=东W=西 + //字段12:模式,A=自动,D=差分,E=估测,N=数据无效(3.0协议内容) + //字段13:校验值($与*之间的数异或后的值) String tmplist[] = nmeastr.split(","); String utctime = tmplist[1]; String Lat = tmplist[3]; @@ -240,26 +249,26 @@ public class NMEAListener implements NmeaListener, LocationListener { } else if (nmeastr.startsWith("$GPGSV,") || nmeastr.startsWith("$GLGSV,") || nmeastr.startsWith("$GAGSV,") || nmeastr.startsWith("$GBGSV,") || nmeastr.startsWith("$BDGSV,")) { -// GPGSV编辑 -// (可见卫星信息) -// 例:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70 -// 字段0:$GPGSV,语句ID,表明该语句为GPS Satellites in View(GSV)可见卫星信息 -// 字段1:本次GSV语句的总数目(1 - 3) -// 字段2:本条GSV语句是本次GSV语句的第几条(1 - 3) -// 字段3:当前可见卫星总数(00 - 12)(前导位数不足则补0) -// 字段4:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0) -// 字段5:卫星仰角(00 - 90)度(前导位数不足则补0) -// 字段6:卫星方位角(00 - 359)度(前导位数不足则补0) -// 字段7:信噪比(00-99)dbHz -// 字段8:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0) -// 字段9:卫星仰角(00 - 90)度(前导位数不足则补0) -// 字段10:卫星方位角(00 - 359)度(前导位数不足则补0) -// 字段11:信噪比(00-99)dbHz -// 字段12:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0) -// 字段13:卫星仰角(00 - 90)度(前导位数不足则补0) -//// 字段14:卫星方位角(00 - 359)度(前导位数不足则补0) -//// 字段15:信噪比(00-99)dbHz -// 字段16:校验值($与*之间的数异或后的值) + // GPGSV编辑 + // (可见卫星信息) + // 例:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70 + // 字段0:$GPGSV,语句ID,表明该语句为GPS Satellites in View(GSV)可见卫星信息 + // 字段1:本次GSV语句的总数目(1 - 3) + // 字段2:本条GSV语句是本次GSV语句的第几条(1 - 3) + // 字段3:当前可见卫星总数(00 - 12)(前导位数不足则补0) + // 字段4:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0) + // 字段5:卫星仰角(00 - 90)度(前导位数不足则补0) + // 字段6:卫星方位角(00 - 359)度(前导位数不足则补0) + // 字段7:信噪比(00-99)dbHz + // 字段8:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0) + // 字段9:卫星仰角(00 - 90)度(前导位数不足则补0) + // 字段10:卫星方位角(00 - 359)度(前导位数不足则补0) + // 字段11:信噪比(00-99)dbHz + // 字段12:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0) + // 字段13:卫星仰角(00 - 90)度(前导位数不足则补0) + //// 字段14:卫星方位角(00 - 359)度(前导位数不足则补0) + //// 字段15:信噪比(00-99)dbHz + // 字段16:校验值($与*之间的数异或后的值) String tmplist[] = nmeastr.split(","); int maxPageCount = 0; @@ -320,25 +329,25 @@ public class NMEAListener implements NmeaListener, LocationListener { } else if (nmeastr.startsWith("$GPGGA,") || nmeastr.startsWith("$GNGGA,")) { -// GPGGA编辑 -//(定位信息) -// 例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,12.2,M,19.7,M,,0000*1F -// 字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix Data(GGA)GPS定位信息 -// 字段1:UTC 时间,hhmmss.sss,时分秒格式 -// 字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0) -// 字段3:纬度N(北纬)或S(南纬) -// 字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0) -// 字段5:经度E(东经)或W(西经) -// 字段6:GPS状态,0=不可用(FIX NOT valid),1=单点定位(GPS FIX),2=差分定位(DGPS),3=无效PPS,4=实时差分定位(RTK FIX),5=RTK FLOAT,6=正在估算 -// 字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0) -// 字段8:HDOP水平精度因子(0.5 - 99.9) -// 字段9:海拔高度(-9999.9 - 99999.9) -// 字段10:单位:M(米) -// 字段11:地球椭球面相对大地水准面的高度 WGS84水准面划分 -// 字段12:WGS84水准面划分单位:M(米) -// 字段13:差分时间(从接收到差分信号开始的秒数,如果不是差分定位将为空) -// 字段14:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空) -// 字段15:校验值($与*之间的数异或后的值) + // GPGGA编辑 + //(定位信息) + // 例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,12.2,M,19.7,M,,0000*1F + // 字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix Data(GGA)GPS定位信息 + // 字段1:UTC 时间,hhmmss.sss,时分秒格式 + // 字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0) + // 字段3:纬度N(北纬)或S(南纬) + // 字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0) + // 字段5:经度E(东经)或W(西经) + // 字段6:GPS状态,0=不可用(FIX NOT valid),1=单点定位(GPS FIX),2=差分定位(DGPS),3=无效PPS,4=实时差分定位(RTK FIX),5=RTK FLOAT,6=正在估算 + // 字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0) + // 字段8:HDOP水平精度因子(0.5 - 99.9) + // 字段9:海拔高度(-9999.9 - 99999.9) + // 字段10:单位:M(米) + // 字段11:地球椭球面相对大地水准面的高度 WGS84水准面划分 + // 字段12:WGS84水准面划分单位:M(米) + // 字段13:差分时间(从接收到差分信号开始的秒数,如果不是差分定位将为空) + // 字段14:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空) + // 字段15:校验值($与*之间的数异或后的值) String tmplist[] = nmeastr.split(","); String utctime = tmplist[1]; @@ -349,11 +358,10 @@ public class NMEAListener implements NmeaListener, LocationListener { String fixed = tmplist[6]; String usedStarts = tmplist[7]; String hdop = tmplist[8]; - + String altitude = tmplist[9]; + ICLogger.d("altitude ==> " + altitude); if ((fixed.trim().equals("1")) || (fixed.trim().equals("2")) || (fixed.trim().equals("6"))) { - - // 转换GPS坐标为度,以便在各种应用中可以方便查找。 try { latitude = Double.valueOf(Lat); @@ -361,7 +369,6 @@ public class NMEAListener implements NmeaListener, LocationListener { } catch (Exception e) { } // 转换单位,从分转换到度 - double intdu = (int) (longitude / 100f); //小数转换到分为单位 double du = (longitude - intdu * 100) / 60f; double last = intdu + du; @@ -373,12 +380,17 @@ public class NMEAListener implements NmeaListener, LocationListener { // 经纬度 保留4位小数点 DecimalFormat df = new DecimalFormat("#.0000000"); - String strLatitude = df.format(latitude); - String strLongitude = df.format(longitude); + strLatitude = df.format(latitude); + strLongitude = df.format(longitude); //定位 StringBuilder sb = new StringBuilder(); - sb.append("GPGGA, location time= " + TimeUtil.getLocalTime() + ", FixedCount=" + locationFixedCount + ", GPSTime=" + utctime + ", Lat(" + latname + ")=" + Lat + " (" + strLatitude + "), Lon(" + lonname + ")=" + lon + " (" + strLongitude + "), fixed=" + fixed + ", hdop=" + hdop + ", usedStarts=" + usedStarts); + sb.append("GPGGA, location time= " + TimeUtil.getLocalTime() + + ", FixedCount=" + locationFixedCount + ", " + + "GPSTime=" + utctime + ", Lat(" + latname + ")=" + Lat + + " (" + strLatitude + "), Lon(" + lonname + ")=" + + lon + " (" + strLongitude + "), fixed=" + fixed + + ", hdop=" + hdop + ", usedStarts=" + usedStarts); ICLogger.i(sb.toString()); if (Config.LOG_TOFILE) ICLogger.logToFile("GPS", sb.toString()); @@ -387,8 +399,9 @@ public class NMEAListener implements NmeaListener, LocationListener { locationFixedCount++; } else { ICLogger.i("HDOP is larger than " + ICLocation.MAX_HDOP + " , skip this location!"); - if (Config.LOG_TOFILE) + if (Config.LOG_TOFILE) { ICLogger.logToFile("GPS", "HDOP is larger than " + ICLocation.MAX_HDOP + " , skip this location!"); + } } if (locationFixedCount > MaxFixedTimes) { /* @@ -462,7 +475,22 @@ public class NMEAListener implements NmeaListener, LocationListener { @Override public void onLocationChanged(Location location) { - + ICLogger.d("location 变化..."); + float bearing = location.getBearing(); + runtime.getLocationInstance().getLocation().bearing = bearing; + ICLogger.d("bearing==> " + bearing); + double altitude = location.getAltitude(); + runtime.getLocationInstance().getLocation().altitude = altitude; + ICLogger.d("altitude==> " + altitude); + //设置到runtime中 + double latitude = location.getLatitude(); + runtime.getLocationInstance().getLocation().lat = latitude; + double longitude = location.getLongitude(); + runtime.getLocationInstance().getLocation().lon = longitude; + ICLogger.d("latitude == > " + latitude + " longitude==> " + longitude); + float speed = location.getSpeed(); + runtime.getLocationInstance().getLocation().speed = speed; + ICLogger.d("speed==> " + speed); } public void onStatusChanged(String paramString, int paramInt, Bundle paramBundle) { @@ -552,15 +580,19 @@ public class NMEAListener implements NmeaListener, LocationListener { public boolean startListen() { - if (this.listening == false) { + if (!listening) { Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, true); runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_OPEN); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE);// 设置为最大精度 - criteria.setAltitudeRequired(false);//不要求海拔信息 - criteria.setBearingRequired(false);// 不要求方位信息 + //by TrillGates,S123的协议需要海拔和方位信息 + //所以修改一下这个 + //criteria.setAltitudeRequired(false);//不要求海拔信息 + criteria.setAltitudeRequired(true);//不要求海拔信息 + //criteria.setBearingRequired(false);// 不要求方位信息 + criteria.setBearingRequired(true);// 不要求方位信息 criteria.setCostAllowed(true);//是否允许付费 criteria.setPowerRequirement(Criteria.POWER_LOW);// 对电量的要求 @@ -581,7 +613,7 @@ public class NMEAListener implements NmeaListener, LocationListener { searchCout = 0; locationFixedCount = 0; gpsMode = GPS_CURRENT_STATUS.GPS_LISTENING; -// locationManager.addGpsStatusListener(statusListener);//监听搜星状态 + //locationManager.addGpsStatusListener(statusListener);//监听搜星状态 locationManager.addNmeaListener(this); //监听NMEA 协议数据。 //做个热启动 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 45ee3d86..b77cf970 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/ICLocation.java +++ b/app/src/main/java/com/enqualcomm/support/bean/ICLocation.java @@ -58,9 +58,10 @@ public class ICLocation { public String lat_name; public String lon_name; public float hdop; + public float bearing; + public double altitude; } - public static class GPS_locationStatus { public List numSatelliteList = new ArrayList(); // 卫星信号 public int used_gps_numbs; 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 3913ee3a..a7434c00 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java +++ b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java @@ -1126,17 +1126,45 @@ public class Runtime { /* AP01 定位 */ - public double temperature_adjustValue = 0.0f; - public boolean isGPSFixed() { return (gpsp.getLocationStat() == ICLocation.LOCATION_STAT.LOCATION_FIXED); } - public String getGPSData() { + public String getS123GpsData() { + StringBuilder sb = new StringBuilder(); + ICLogger.d("isGPSFixed() ==> " + isGPSFixed()); + if (isGPSFixed()) { + sb.append("A").append(","); + String latGPSStr = gpsp.getLocation().latGPSStr; + String lonGPSStr = gpsp.getLocation().lonGPSStr; + float hdop = gpsp.getLocation().hdop; + float speed = gpsp.getLocation().speed; + float getheading = gpsp.getLocation().heading; + float bearing = gpsp.getLocation().bearing; + float altitude = (float) gpsp.getLocation().altitude; + ICLogger.d("getheading ==> " + getheading); + ICLogger.d("hdop==> " + hdop); + ICLogger.d("speed==> " + hdop); + ICLogger.d("gpsp.getLocation().latGPSStr==> " + latGPSStr); + ICLogger.d("gpsp.getLocation().lonGPSStr==> " + lonGPSStr); + sb.append(latGPSStr); + sb.append(","); + sb.append(lonGPSStr); + sb.append(",").append(hdop); + sb.append(",").append(speed); + sb.append(",").append(bearing); + sb.append(",").append(altitude); + } else { + sb.append("V").append(",").append("0,0,0,0,0,0"); + } + ICLogger.d("s123 gsp data==> " + sb.toString()); + return sb.toString(); + } -// 2232.9806N11404.9355E000.1: 北纬22度32.9806分,东经114度04.9355分,速度为000.1 km/h,如经纬度无效,可默认全为0,如0000.0000N00000.0000E -// 纬度格式为: ddmm.mmmm ,长度不足长度前补0 -// 经度格式为:dddmm.mmmm,长度不足前补0 + public String getGPSData() { + //2232.9806N11404.9355E000.1: 北纬22度32.9806分,东经114度04.9355分,速度为000.1 km/h,如经纬度无效,可默认全为0,如0000.0000N00000.0000E + //纬度格式为: ddmm.mmmm ,长度不足长度前补0 + //经度格式为:dddmm.mmmm,长度不足前补0 StringBuilder sb = new StringBuilder(); int lati = (int) gpsp.getLocation().lat; int latl = (int) ((gpsp.getLocation().lat - lati) * 10000); @@ -1161,22 +1189,21 @@ public class Runtime { sb.append("V").append(gpsStr); } - return sb.toString(); } public String getMqttGPSData() { -/*** - * A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6 - * A,gps 定位有效 - * 22.570733,纬度 N, - * 113.8626083,经度 E, - * 0.00,速度 - * 249.5,方向 - * 0.0,海拔 - * 6,卫星个数 - */ + /*** + * A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6 + * A,gps 定位有效 + * 22.570733,纬度 N, + * 113.8626083,经度 E, + * 0.00,速度 + * 249.5,方向 + * 0.0,海拔 + * 6,卫星个数 + */ StringBuilder sb = new StringBuilder(); int speedi = (int) gpsp.getLocation().speed; int speedl = (int) ((gpsp.getLocation().speed - speedi) * 100); @@ -1210,16 +1237,16 @@ public class Runtime { public String getFZDGPSData() { -/*** - * A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6 - * A,gps 定位有效 - * 22.570733,纬度 N, - * 113.8626083,经度 E, - * 0.00,速度 - * 249.5,方向 - * 0.0,海拔 - * 6,卫星个数 - */ + /*** + * A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6 + * A,gps 定位有效 + * 22.570733,纬度 N, + * 113.8626083,经度 E, + * 0.00,速度 + * 249.5,方向 + * 0.0,海拔 + * 6,卫星个数 + */ StringBuilder sb = new StringBuilder(); int speedi = (int) gpsp.getLocation().speed; int speedl = (int) ((gpsp.getLocation().speed - speedi) * 100); @@ -1289,7 +1316,7 @@ public class Runtime { //AP03 用的多基站定位数据 public String getLBSMultiStationData() { - // 7: 表示共有7组基站 + // 7: 表示共有7组基站 // 460: MCC 国家码 // 0: MNC运营商代码 // 9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应 10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm) @@ -1320,12 +1347,10 @@ public class Runtime { } public String getLBSData() { - // 460,0,9520,3671 : LBS基站数据,MCC国家码,460为中国,0:MNC,0为移动,9520:LAC,十进制,3671,CID,十进制 StringBuilder sb = new StringBuilder(); sb.append(gpsp.getMCC()).append(",") .append(gpsp.getMNC()).append(",") - .append(gpsp.getLAC()).append(",") .append(gpsp.getGSMStationCID()); return sb.toString(); diff --git a/app/src/main/java/com/enqualcomm/support/service/SignFlagObserver.java b/app/src/main/java/com/enqualcomm/support/service/SignFlagObserver.java new file mode 100644 index 00000000..8282e654 --- /dev/null +++ b/app/src/main/java/com/enqualcomm/support/service/SignFlagObserver.java @@ -0,0 +1,41 @@ +package com.enqualcomm.support.service; + +import android.content.ContentResolver; +import android.database.ContentObserver; +import android.database.Cursor; +import android.net.Uri; +import android.os.Handler; + +import com.enqualcomm.support.provider.ICGlobalSettingsProvider; +import com.enqualcomm.support.utils.ICLogger; +import com.ic.protocols.protocolAPIHelper; + +public class SignFlagObserver extends ContentObserver { + + private final Handler mHandler; + private final ContentResolver mResolver; + + public SignFlagObserver(Handler handler, ContentResolver resolver) { + super(handler); + this.mHandler = handler; + this.mResolver = resolver; + } + + @Override + public void onChange(boolean selfChange) { + ICLogger.d("SignFlagObserver on value change..."); + mHandler.post(() -> { + Cursor query = mResolver.query(Uri.parse(ICGlobalSettingsProvider.SETTINGS), + new String[]{"s_value"}, "s_key=?", new String[]{"sign_action_flag"}, null); + String value = "-1"; + if (query != null) { + if (query.moveToNext()) { + value = query.getString(0); + //value有none的值,有-1的值,有id的值 + } + query.close(); + } + protocolAPIHelper.sendSignMsg(value); + }); + } +} diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index 86770241..63c73165 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -141,6 +141,28 @@ public class protocolAPIHelper { } } + public static void sendSignMsg(String value) { + switch (Config.protocol_no) { + case Config.PROTOCOL_JIAI: + break; + case Config.PROTOCOL_BEEHOME: + break; + case Config.PROTOCOL_IC: + break; + case Config.PROTOCOL_FZD: + break; + case Config.PROTOCOL_MQTT: + break; + case PROTOCOL_ANAN: + break; + case Config.PROTOCOL_S123: + protocols123_handler.sendSignMsg(value); + break; + case Config.PROTOCOL_GATOR: + break; + } + } + /* 返回true 表示 cmd 全部解析成功 返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用 diff --git a/app/src/main/java/com/ic/protocols/protocol_s123.java b/app/src/main/java/com/ic/protocols/protocol_s123.java index 14d30102..7c75656b 100644 --- a/app/src/main/java/com/ic/protocols/protocol_s123.java +++ b/app/src/main/java/com/ic/protocols/protocol_s123.java @@ -6,6 +6,7 @@ import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.database.Cursor; import android.media.AudioManager; import android.net.Uri; import android.os.Environment; @@ -98,6 +99,81 @@ public class protocol_s123 { mConnection.send(APFX(mRuntime)); } + /** + * 发送签到信息 + * + * @param value + */ + public void sendSignMsg(String value) { + ICLogger.d("value ==> " + value); + //如果是-1,那么是空消息 + //如果是其他数字,通过id去查询即可 + if (!"none".equals(value)) { + //先查询出内容,再组装数据 + ContentResolver resolver = mRuntime.getContextProxy().getResolver(); + Cursor query = resolver.query(Uri.parse(ShootTextProvider.SHOOT_TEXT), + new String[]{ICDatabaseHelper.shoot_value}, + ICDatabaseHelper.shoot_id + "=?", + new String[]{value}, null); + String contentValue = ""; + if (query != null) { + if (query.moveToNext()) { + //要判断数据是否为空 + contentValue = query.getString(0); + } + query.close(); + } + //组装数据 + //IWAPRP,080524, 102533,128,36.6,88,120,90,90,XXXXXXXX, + // A,22.567898,113.1234567, 50,5,61, 120, wgs84, 99, 20, 460, 0, + // 9520|3671|-54&9521|3675|-53, + // 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 + //IW标识符 + //APAL:命令字 + //080524: 2008 年05 月24 + //102533: 10点25分33秒 + //128: 步数 + //36.6: 体温 + //88: 心率 + //120: 收缩压 + //90: 舒张压 + //90: 电池电量 0~100 + mConnection.send(APRP(contentValue)); + } + } + + public StringMessage APRP(String msg) { + int step = mRuntime.getTotalStepCount(); + double temp = mRuntime.tempInfo.currentBodyTemp; + int heartRate = mRuntime.getHRS().getPPG(); + int lowPressure = mRuntime.getHRS().getBPL(); + int highPressure = mRuntime.getHRS().getBPH(); + int batteryLev = mRuntime.getBatterylevel(); + //定位数据 + // String s123GpsData = mRuntime.getS123GpsData(); + return genStringMessage(cmdMap.get(CMD_TYPE.APRP), + new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APRP)) + .append(TimeUtil.getSystemDateYYMMDD()) + .append(CMDSPLIT).append(TimeUtil.getSystemTimeHHmmss()) + .append(CMDSPLIT).append(step) + .append(CMDSPLIT).append(temp) + .append(CMDSPLIT).append(heartRate) + .append(CMDSPLIT).append(lowPressure) + .append(CMDSPLIT).append(highPressure) + .append(CMDSPLIT).append(batteryLev) + .append(CMDSPLIT).append(msg) + .append(CMDSPLIT).append(mRuntime.getS123GpsData()) + .append(CMDSPLIT).append("wgs84")//原始经纬度 + .append(CMDSPLIT).append(mRuntime.getSignalStrength()) + .append(CMDSPLIT).append(mRuntime.getBatterylevel()) + .append(CMDSPLIT).append(mRuntime.getLBSData()) + .append(CMDSPLIT).append(mRuntime.getWifiInfo()) + .append(CMDEND).toString()); + } + public enum CMD_TYPE { /*终端发起*/ AP00,//登录包 @@ -128,6 +204,8 @@ public class protocol_s123 { BPCH, APBR,//上传蓝牙扫描结果 BPBR, + APRP,//签到信息上传 + BPRP, /* 服务器发起*/ AP12, BP12,//SOS 号码设置 @@ -268,6 +346,8 @@ public class protocol_s123 { cmdMap.put(CMD_TYPE.APBR, "APBR"); cmdMap.put(CMD_TYPE.BPBR, "BPBR"); cmdMap.put(CMD_TYPE.APGJ, "APGJ"); + cmdMap.put(CMD_TYPE.APRP, "APRP"); + cmdMap.put(CMD_TYPE.BPRP, "BPRP"); /* 服务器发起*/ cmdMap.put(CMD_TYPE.AP12, "AP12"); cmdMap.put(CMD_TYPE.BP12, "BP12"); @@ -517,6 +597,7 @@ public class protocol_s123 { /**/ public static StringMessage genStringMessage(String cmdName, String msg) { //设置cmdName,在这里配置进去的msg没有实际用到 + ICLogger.d("msg == > " + msg); StringMessage sm = new StringMessage(new String[]{cmdName, msg}); //用此函数设置要发送的内容 sm.refresh(msg); @@ -552,7 +633,7 @@ public class protocol_s123 { /** * 如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd */ - if (cmdlist.length > 0 && iscmdComplete == false) { + if (cmdlist.length > 0 && !iscmdComplete) { listlen -= 1; last_inCompletecmd = cmdlist[listlen]; ICLogger.d("cmd not complete , " + last_inCompletecmd); @@ -563,7 +644,6 @@ public class protocol_s123 { ICLogger.d("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " , " + cmdlist[i]); if (key == CMD_TYPE.BP28) { //如果是BP28则 后面的数据是音频,需要保留 - byte[] amrBuf; int amrLen = getBP28Amrlen(cmdlist[i]); if (bytes.length > amrLen) { handleCmd(key, cmdlist[i], bytes); @@ -723,7 +803,9 @@ public class protocol_s123 { * 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(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0") @@ -3563,6 +3645,10 @@ public class protocol_s123 { ICLogger.d("服务器收到飞行模式打开请求."); handleBPFX(); break; + case BPRP: + ICLogger.d("服务器收到签到信息."); + handleBPRP(); + break; case APTM: break; case APCH: @@ -3684,6 +3770,14 @@ public class protocol_s123 { return ret; } + /** + * 修改配置项的值为success,让UI展示Success + */ + private void handleBPRP() { + //UI展示完要重置成none + updateSettingValue("sign_action_flag", "success"); + } + /** * 处理飞行模式打开的结果反馈,修改设置项的值 */