From: snickersun Date: Tue, 28 Jan 2020 17:13:34 +0000 (+0800) Subject: 1、添加BP15定位周期协议解析响应。没有实际设置周期 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=67f7acea884e22a851ee74a0c9e1d2d433ff1811;p=icsupport.git 1、添加BP15定位周期协议解析响应。没有实际设置周期 2、添加BP84白名单开关协议解析响应,没有实际设置 3、添加关机、重启、恢复工厂设置三个功能,实际恢复工厂设置有接口可以测试,另外两个没有测试。 4、修改HeartRate测试中BPH和BPL取值算法。增加参考值限制条件(35~199之间)其他值无效,直接报原始值。 --- diff --git a/app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java b/app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java index ec136d75..b7f53749 100644 --- a/app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java @@ -284,6 +284,21 @@ public class protocolAPIHelper { return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP00)).append(ds.IMEI()).append(CMDEND).toString(); } + //处理 登录 BP00 + public void handleBP00(String cmd){ + String[] msg=cmd.split(CMDSPLIT); +// get Msg :IWBP00,20191229171933,8# (size)24 +// 12-30 01:19:33.861 6492-6492/com.ic.protocol I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 , IWBP00,20191229171933,8 + + if (msg.length>=3) { + log("handleBP00", "Set Datetime " + msg[1]); + log("handleBP00", "Set TimeZone " + msg[2]); + }else{ + log("handleBP00","format Error"); + } + } + + public static String AP03(Runtime ds) { //示例数据:IWAP03,06000908000102,5555,30# IWAP03,000000null00000,0,0# return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP03)).append(CMDSPLIT).append(String.format("%03d",abs(ds.getSignalStrength()))) @@ -291,6 +306,11 @@ public class protocolAPIHelper { .append(ds.getProtection()).append(ds.getWorkMode()).append(CMDSPLIT) .append(ds.getTotalStepCount()).append(CMDSPLIT).append(0/*rolltime*/).append(CMDEND).toString(); } + //处理 心跳 BP03 + public void handleBP03(String cmd){ + log("BP03心跳接收成功"); + } + public static String AP10(Runtime ds){ @@ -324,6 +344,13 @@ public class protocolAPIHelper { .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString(); } + //处理 定位 BP01 + public void handleBP01(String cmd){ + log("BP01定位接收成功"); + } + + + public static String APXL(String id){ //设备响应: IWAPXL,080835# @@ -443,25 +470,7 @@ public class protocolAPIHelper { Logger.i("BPXY format error!"); } } - /*语音下行反馈*/ - public static String AP28(String name, String msg, int packagecount, int currentpackageindex, int received_success) { - //示例数据:IWAP28,D3590D54,xxxx,6,1,1# - return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28)) - .append(CMDSPLIT).append(name) - .append(CMDSPLIT).append(msg) - .append(CMDSPLIT).append(packagecount) - .append(CMDSPLIT).append(currentpackageindex) - .append(CMDSPLIT).append(received_success) - .append(CMDEND).toString(); - } - - public interface CmdHandler - { - - boolean handleCmd(CMD_TYPE type, String cmd); - boolean handleCmd(CMD_TYPE type, String cmd,byte[] bytes); - } //重启 @@ -472,6 +481,7 @@ public class protocolAPIHelper { .append(CMDSPLIT).append(index) .append(CMDEND).toString(); } + public void handleBP18(Connection connection,String cmd) { // IWBP18,867155030001063,161723 @@ -484,7 +494,6 @@ public class protocolAPIHelper { } //恢复出厂设置 - public static String AP17(String index){ return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17)) .append(CMDSPLIT).append(index) @@ -563,11 +572,21 @@ public class protocolAPIHelper { .append(CMDSPLIT).append(phnumbs[9]) .append(CMDEND).toString(); } -//设置通讯录,白名单 +//设置通讯录,白名单(10个) public void handleBP14(Connection connection,String cmd){ // IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,, /** - * IWBP14,353456789012345,080835,D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx# + * IWBP14,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[]{"","","","","","","","","",""}; @@ -617,6 +636,15 @@ public class protocolAPIHelper { } + + + public static String AP85(Runtime ds,String cmddata){ +//示例数据:IWAP49,68## + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85)) + .append(CMDSPLIT).append(cmddata) + .append(CMDEND).toString(); + + } //设置闹钟 public void handleBP85(String cmd , Connection connection,Runtime runtime){ // IWBP85,867155030001063,155312,1,1,0235,12,1,1 @@ -708,30 +736,36 @@ public class protocolAPIHelper { } +// AP05命令L02服务器不适用 +// public static String AP05(boolean recvFlag){ +// +//// IWAP05,1# +// return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP05)) +// .append(CMDSPLIT).append(recvFlag?1:0) +// .append(CMDEND).toString(); +// +// } +// +// +// public void handleBP05(String cmd){ +//// IWBP05,6# +// String[] cmdlist=cmd.split(CMDSPLIT); +// if (cmdlist.length>1){ +// Logger.i(" 服务器有 " +cmdlist[1]+" 条语音未接收!"); +// } +// } - public static String AP05(boolean recvFlag){ - -// IWAP05,1# - return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP05)) - .append(CMDSPLIT).append(recvFlag?1:0) - .append(CMDEND).toString(); - } - public void handleBP05(String cmd){ -// IWBP05,6# - String[] cmdlist=cmd.split(CMDSPLIT); - if (cmdlist.length>1){ - Logger.i(" 服务器有 " +cmdlist[1]+" 条语音未接收!"); - } - } - public static String AP85(Runtime ds,String cmddata){ -//示例数据:IWAP49,68## - return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85)) - .append(CMDSPLIT).append(cmddata) + public static String AP33(String cmdindex,int workMode){ +//IWAP33,080835,1# +//080835:指令流水号 +//1:设置信息,供服务器同步 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP33)) + .append(CMDSPLIT).append(cmdindex) + .append(CMDSPLIT).append(workMode) .append(CMDEND).toString(); - } //设置工作模式 @@ -780,15 +814,7 @@ public class protocolAPIHelper { } } - public static String AP33(String cmdindex,int workMode){ -//IWAP33,080835,1# -//080835:指令流水号 -//1:设置信息,供服务器同步 - return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP33)) - .append(CMDSPLIT).append(cmdindex) - .append(CMDSPLIT).append(workMode) - .append(CMDEND).toString(); - } + /** @@ -804,6 +830,9 @@ public class protocolAPIHelper { } + + + /** * 返回上传心率血压的协议字串 * @param ds @@ -826,6 +855,15 @@ public class protocolAPIHelper { .append(CMDEND).toString(); } + + //立即定位反馈 + public static String AP16(String cmdindex){ +//IWAP16,080835# +//080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16)) + .append(CMDSPLIT).append(cmdindex) + .append(CMDEND).toString(); + } // 立即定位指令(长链接有效) public void handleBP16(Connection connection,Runtime runtime,String cmd){ //示例数据:IWBP16,867155030001063,335386 @@ -844,73 +882,92 @@ public class protocolAPIHelper { log("error BP16 format"); } } - //立即定位反馈 - public static String AP16(String cmdindex){ -//IWAP16,080835# -//080835:指令流水号 - return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16)) - .append(CMDSPLIT).append(cmdindex) - .append(CMDEND).toString(); - } + /*通过基站获取时间和坐标*/ public static String APTM(Runtime ds){ //示例数据:IWAPTM,460,0,9750,3613# + //说明: + //IW:标识符 + //APTM : 命令字符 + //460:MCC + //0: MNC + //9750: LAC + //3613: CID + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTM)) - .append(CMDSPLIT).append("460") - .append(CMDSPLIT).append("0") - .append(CMDSPLIT).append("9750") - .append(CMDSPLIT).append("3613") + .append(CMDSPLIT).append(ds.getLocationInstance().getMCC()) + .append(CMDSPLIT).append(ds.getLocationInstance().getMNC()) + .append(CMDSPLIT).append(ds.getLocationInstance().getLAC()) + .append(CMDSPLIT).append(ds.getLocationInstance().getGSMStationCID()) .append(CMDEND).toString(); } - //处理 登录 BP00 - public void handleBP00(String cmd){ - String[] msg=cmd.split(CMDSPLIT); -// get Msg :IWBP00,20191229171933,8# (size)24 -// 12-30 01:19:33.861 6492-6492/com.ic.protocol I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 , IWBP00,20191229171933,8 - if (msg.length>=3) { - log("handleBP00", "Set Datetime " + msg[1]); - log("handleBP00", "Set TimeZone " + msg[2]); - }else{ - log("handleBP00","format Error"); - } - } + public void handleBPTM(String cmd){ + //平台响应: IWBPTM,20160225090909,22.123456,113.654321# + //返回时间,格式为:yyyyMMddHHmmss ,为UTC0 时间 + //经纬度保留六位小数,若没取到则返回 0 + String[] list=cmd.split(CMDSPLIT); - //设置联系人白名单(10个) - private void handleBP14(String cmd){ - //IWBP14,353456789012345,080835,D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, - // D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, - // D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx# - //D3590D54|135xxxxxxxxxx : 一组联系人,使用|分隔名称和电话号码名称使用UNICODE编码直接下发byte,多组之间使用逗号分隔,未填写的可为空,但位置仍需保留 + if(list.length==4){ + String time=list[1]; + String lat=list[2]; + String lon=list[3]; + Logger.i("BPTM , time="+time+", lat="+lat+", lon="+lon); + }else{ + Logger.i("BPTM format error"); + } } +public static String AP15(String index){ +//IWAP15, 080835# +//080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15)) + .append(CMDSPLIT).append(index) + .append(CMDEND).toString(); +} + //设置定位周期 - public void handleBP15(String cmd){ + public void handleBP15(String cmd ,Connection connection,Runtime runtime){ // IWBP15, 353456789012345, 080835, 30# // 353456789012345:IMEI号,设备唯一ID // 080835 :指令流水号 // 30: 表示频率为30分钟 + String[] list=cmd.split(CMDSPLIT); + + if(list.length==4){ + String index=list[2]; + String time=list[3]; + connection.send(protocolAPIHelper.genStringMessage("AP15",AP15(index))); + Logger.i("BP15 , 定位周期="+time+"分钟"); + }else{ + Logger.i("BP15 format error"); + } + } - //处理 定位 BP01 - public void handleBP01(String cmd){ - log("BP01定位接收成功"); - } - //处理 心跳 BP03 - public void handleBP03(String cmd){ - log("BP03心跳接收成功"); - } + /*语音下行反馈*/ + public static String AP28(String name, String msg, int packagecount, int currentpackageindex, int received_success) { + //示例数据:IWAP28,D3590D54,xxxx,6,1,1# + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28)) + .append(CMDSPLIT).append(name) + .append(CMDSPLIT).append(msg) + .append(CMDSPLIT).append(packagecount) + .append(CMDSPLIT).append(currentpackageindex) + .append(CMDSPLIT).append(received_success) + .append(CMDEND).toString(); + } + //处理 BP28 语音消息 public void handleBP28(Connection connection,String cmd,byte[] bytes) { //log("handleBP28 msg"+cmd); @@ -974,30 +1031,47 @@ public class protocolAPIHelper { } + //白名单开关(下行协议号:BP84,响应:AP84) + public static String AP84(String index,int success){ - public static String formatLat(double paramDouble) { - if (paramDouble >= 0.0D) { - StringBuilder stringBuilder1 = new StringBuilder(); - stringBuilder1.append("N"); - stringBuilder1.append(paramDouble); - return stringBuilder1.toString(); - } - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("S"); - stringBuilder.append(-paramDouble); - return stringBuilder.toString(); - } - - public static String formatLng(double paramDouble) { - if (paramDouble >= 0.0D) { - StringBuilder stringBuilder1 = new StringBuilder(); - stringBuilder1.append("E"); - stringBuilder1.append(paramDouble); - return stringBuilder1.toString(); + //设备响应: IWAP80,080835,1# + //080835:指令流水号 + //1:表示设备执行成功,0 表示设备执行失败 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84)) + .append(CMDSPLIT).append(index) + .append(CMDSPLIT).append(success) + .append(CMDEND).toString(); + } + + public void handleBP84(String cmd,Connection connection){ +//示例: + //IWBP84,353456789012345,080835,1# + //说明: + //IW:标识符 + //BP84 : 命令字符 + //353456789012345:IMEI号,设备唯一ID + //080835 :指令流水号 + //1: 表示白名单开,0 表示白名单关 + String[] list=cmd.split(CMDSPLIT); + + if (list.length==4){ + String index=list[2]; + String whitelist_switch=list[3]; + connection.send(protocolAPIHelper.genStringMessage("AP84",AP84(index,1))); + Logger.i("收到服务器指令:白名单"+(whitelist_switch.equals("1")?"开":"关")); + }else{ + + Logger.i("BP84 format error!"); } - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("W"); - stringBuilder.append(-paramDouble); - return stringBuilder.toString(); + } + + public interface CmdHandler + { + + boolean handleCmd(CMD_TYPE type, String cmd); + boolean handleCmd(CMD_TYPE type, String cmd,byte[] bytes); + + } + } diff --git a/app/src/main/java/com/ic/protocol/bean/heartRateStatus.java b/app/src/main/java/com/ic/protocol/bean/heartRateStatus.java index 080f295e..f744006d 100644 --- a/app/src/main/java/com/ic/protocol/bean/heartRateStatus.java +++ b/app/src/main/java/com/ic/protocol/bean/heartRateStatus.java @@ -52,19 +52,22 @@ public class heartRateStatus { public int getBPH() { int BPH=lastBPH; - if (lastBPH > BPH_ref+20) - BPH=BPL_ref+20; - if (lastBPH < BPH_ref-20) - BPH=BPH_ref-20; + if (BPH_ref>=35 && BPH_ref<200) { + if (lastBPH > BPH_ref + 20) + BPH = BPH_ref + 20; + if (lastBPH < BPH_ref - 20) + BPH = BPH_ref - 20; + } return BPH; } public int getBPL() { - int BPL=lastBPL; - if (lastBPL > BPL_ref+20) - BPL=BPL_ref+20; - if (lastBPL < BPL_ref-20) - BPL=BPL_ref-20; + if(BPL_ref>=35 && BPL_ref<200) { + if (lastBPL > BPL_ref + 20) + BPL = BPL_ref + 20; + if (lastBPL < BPL_ref - 20) + BPL = BPL_ref - 20; + } return BPL; } diff --git a/app/src/main/java/com/ic/protocol/service/KeepAlive.java b/app/src/main/java/com/ic/protocol/service/KeepAlive.java index 6fa23437..c8cc9794 100644 --- a/app/src/main/java/com/ic/protocol/service/KeepAlive.java +++ b/app/src/main/java/com/ic/protocol/service/KeepAlive.java @@ -190,9 +190,14 @@ public class KeepAlive extends AbstractConnectionService { public boolean onReceive(StringMessage paramStringMessage, Connection paramConnection, Runtime paramRuntime) { this.idleTimeMillis = SystemClock.elapsedRealtime(); Logger.i(TAG+paramStringMessage.cmd()); - if ("heart".equals(paramStringMessage.cmd()) || "Link:OK".equals(paramStringMessage.cmd()) || "Shutdown:OK".equals(paramStringMessage.cmd()) || "Sport:OK".equals(paramStringMessage.cmd())) { - if ("Shutdown:OK".equals(paramStringMessage.cmd())) - paramRuntime.getContextProxy().shutdown(); + if ("heart".equals(paramStringMessage.cmd()) || "FactoryReset".equals(paramStringMessage.cmd()) || "poweroff".equals(paramStringMessage.cmd()) || "Reboot".equals(paramStringMessage.cmd())) { + if ("poweroff".equals(paramStringMessage.cmd())) + paramRuntime.getContextProxy().shutdown(); + if ("FactoryReset".equals(paramStringMessage.cmd())) + paramRuntime.getContextProxy().doMasterClear(); + if ("Reboot".equals(paramStringMessage.cmd())) + paramRuntime.getContextProxy().reboot(); + if ("heart".equals(paramStringMessage.cmd())) AlarmWakeUp.isNeedWakeUpAlarm(paramRuntime); return true; diff --git a/app/src/main/java/com/ic/protocol/utils/ContextProxy.java b/app/src/main/java/com/ic/protocol/utils/ContextProxy.java index 828909b9..063f836c 100644 --- a/app/src/main/java/com/ic/protocol/utils/ContextProxy.java +++ b/app/src/main/java/com/ic/protocol/utils/ContextProxy.java @@ -11,8 +11,10 @@ import android.location.LocationManager; import android.net.Uri; import android.net.wifi.WifiManager; import android.os.Build; +import android.os.Environment; import android.os.PowerManager; import android.telephony.TelephonyManager; +import android.util.Log; import com.ic.protocol.ICContentProvider; @@ -21,6 +23,7 @@ import com.ic.protocol.bean.NoticeContent; import com.ic.protocol.bean.Silent; import com.ic.protocol.bean.Runtime; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Calendar; import java.util.Iterator; @@ -55,22 +58,7 @@ public class ContextProxy { this.wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); this.sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE); } - - private PendingIntent getPendingIntent(String paramString1, String paramString2, String paramString3, int paramInt) { - StringBuilder stringBuilder = new StringBuilder("silent:"); - stringBuilder.append(paramString1); - stringBuilder.append(","); - stringBuilder.append(paramString2); - stringBuilder.append(","); - stringBuilder.append(paramString3); - stringBuilder.append(","); - stringBuilder.append(paramInt); - paramString1 = stringBuilder.toString(); - Intent intent = new Intent(this.context, com.ic.protocol.service.protocolMainServer.class); - intent.setAction("com.enqualcomm.icare.ACTION_ISSILENCE"); - intent.putExtra("SilentData", paramString1); - return PendingIntent.getService(this.context, 0, intent, FLAG_UPDATE_CURRENT); - } + private PendingIntent getPendingIntent(String paramString1, String paramString2, String paramString3, String paramString4, int paramInt) { StringBuilder stringBuilder = new StringBuilder("alarm:"); @@ -187,18 +175,7 @@ public class ContextProxy { public WifiManager getWifiManager() { return this.wifiManager; } - public void reboot() { - PowerManager powerManager = (PowerManager)this.context.getSystemService(Context.POWER_SERVICE); - try { - powerManager.reboot("remote reboot"); - Logger.i("命令重启"); - return; - } catch (Exception e) { - e.printStackTrace(); - return; - } - } - + public void resolverAlarm(ArrayList paramArrayList) { Cursor cursor = this.context.getContentResolver().query(ICContentProvider.ALARM_URI, null, null, null, null); char c = '\001'; @@ -301,119 +278,7 @@ public class ContextProxy { } } } - - public void resolverSilent(ArrayList paramArrayList) { - Calendar calendar1 = Calendar.getInstance(); - calendar1.set(Calendar.SECOND, 0); - Calendar calendar2 = Calendar.getInstance(); - calendar2.set(Calendar.SECOND, 0); - long l = System.currentTimeMillis(); - Cursor cursor = this.context.getContentResolver().query(ICContentProvider.SILENT_URI, null, null, null, null); - char c = '\013'; - int j = 5; - int k = 4; - if (cursor != null) { - char c1 = Character.MIN_VALUE; - while (cursor.moveToNext()) { - if ("ON".equals(cursor.getString(k))) { - String str1 = cursor.getString(1); - String str2 = cursor.getString(2); - String str3 = cursor.getString(3); - if (!(c1==Character.MIN_VALUE)) { - int n = Integer.parseInt(str1.substring(2, k)); - int i1 = Integer.parseInt(str1.substring(j, 7)); - calendar1.set(c, n); - calendar1.set(Calendar.MINUTE, i1); - n = Integer.parseInt(str2.substring(2, k)); - i1 = Integer.parseInt(str2.substring(j, 7)); - calendar2.set(c, n); - calendar2.set(Calendar.MINUTE, i1); - } - char[] arrayOfChar = str3.toCharArray(); - int m = arrayOfChar.length; - byte b = 1; - char c2 = (char)k; - k = j; - j = c; - while (b < m) { - j = arrayOfChar[b] - '/'; - this.alarmManager.cancel(getPendingIntent(str1, str2, str3, j)); - c = c1; - if (c1 == Character.MIN_VALUE) { - calendar1.set(Calendar.DAY_OF_WEEK, j); - long l1 = calendar1.getTimeInMillis(); - calendar2.set(Calendar.DAY_OF_WEEK, j); - long l2 = calendar2.getTimeInMillis(); - c = c1; - if (l1 <= l) { - c = c1; - if (l2 > l) - c = '\001'; - } - } - b++; - j = 11; - k = 5; - c2 = '\004'; - c1 = c; - } - c = (char)j; - j = k; - k = c2; - } - } - cursor.close(); - c = c1; - } else { - c = Character.MIN_VALUE; - } - Iterator iterator = paramArrayList.iterator(); - int i; - for (i = 0; iterator.hasNext(); i = k) { - Silent silent = (Silent)iterator.next(); - k = i; - if ("ON".equals(silent.status)) { - j = Integer.parseInt(silent.start.substring(2, 4)); - k = Integer.parseInt(silent.start.substring(5, 7)); - calendar1.set(Calendar.HOUR_OF_DAY, j); - calendar1.set(Calendar.MINUTE, k); - j = Integer.parseInt(silent.end.substring(2, 4)); - k = Integer.parseInt(silent.end.substring(5, 7)); - calendar2.set(Calendar.HOUR_OF_DAY, j); - calendar2.set(Calendar.MINUTE, k); - char[] arrayOfChar = silent.week.toCharArray(); - int m = arrayOfChar.length; - j = 1; - while (true) { - k = i; - if (j < m) { - k = arrayOfChar[j] - '/'; - calendar1.set(Calendar.DAY_OF_WEEK, k); - long l1 = calendar1.getTimeInMillis(); - calendar2.set(Calendar.DAY_OF_WEEK, k); - long l2 = calendar2.getTimeInMillis(); - if (l1 <= l) - if (l2 <= l) { - l1 += 604800000L; - } else { - i = 1; - } - PendingIntent pendingIntent = getPendingIntent(silent.start, silent.end, silent.week, k); - AlarmHelper.setAlarm(this.alarmManager, l1, pendingIntent); - j++; - continue; - } - break; - } - } - } - if (c != '\000' && i == 0) { - Intent intent = new Intent(this.context, com.ic.protocol.service.protocolMainServer.class); - intent.setAction("com.enqualcomm.icare.ACTION_ISSILENCE"); - intent.putExtra("SilentData", "silent:cancel"); - this.context.startService(intent); - } - } + public void sendBroadcast(String cmd, Runtime dev) { Intent intent = new Intent(); @@ -436,35 +301,68 @@ public class ContextProxy { intent.putExtra("stheartRateType", paramInt); this.context.sendBroadcast(intent, "com.eqc.broadcast.permission"); } - - public void shutdown() { - String str = Build.VERSION.RELEASE; - try { - Object object = Class.forName("android.os.ServiceManager").getMethod("getService", new Class[] { String.class }).invoke(null, new Object[] { "power" }); - object = Class.forName("android.os.IPowerManager$Stub").getMethod("asInterface", new Class[] { android.os.IBinder.class }).invoke(null, new Object[] { object }); - if (str.contains("7.0")) { - object.getClass().getMethod("shutdown", new Class[] { boolean.class, String.class, boolean.class }).invoke(object, new Object[] { Boolean.valueOf(false), null, Boolean.valueOf(true) }); - return; - } - object.getClass().getMethod("shutdown", new Class[] { boolean.class, boolean.class }).invoke(object, new Object[] { Boolean.valueOf(false), Boolean.valueOf(true) }); - - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void startSearchActivity() { + public void reboot() { + PowerManager powerManager = (PowerManager)this.context.getSystemService(Context.POWER_SERVICE); try { - Intent intent = new Intent("com.enqualcomm.icare.SEARCH"); - intent.setFlags(FLAG_ACTIVITY_NEW_TASK); - this.context.startActivity(intent); + powerManager.reboot("remote reboot"); + Logger.i("命令重启"); return; } catch (Exception e) { e.printStackTrace(); return; - } + } } + + + public void shutdown() { + try { + + //获得ServiceManagerç±» + Class ServiceManager = Class + .forName("android.os.ServiceManager"); + + //获得ServiceManager的getService方法 + Method getService = ServiceManager.getMethod("getService", java.lang.String.class); + + //调用getService获取RemoteService + Object oRemoteService = getService.invoke(null, Context.POWER_SERVICE); + + //获得IPowerManager.Stubç±» + Class cStub = Class + .forName("android.os.IPowerManager$Stub"); + //获得asInterface方法 + Method asInterface = cStub.getMethod("asInterface", android.os.IBinder.class); + //调用asInterface方法获取IPowerManager对象 + Object oIPowerManager = asInterface.invoke(null, oRemoteService); + //获得shutdown()方法 + Method shutdown = oIPowerManager.getClass().getMethod("shutdown",boolean.class,boolean.class); + //调用shutdown()方法 + shutdown.invoke(oIPowerManager,false,true); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static final String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR"; + public static final String EXTRA_REASON = "android.intent.extra.REASON"; + public static final String EXTRA_WIPE_EXTERNAL_STORAGE = "android.intent.extra.WIPE_EXTERNAL_STORAGE"; + + public void doMasterClear() { + Intent intent = new Intent(ACTION_MASTER_CLEAR); + intent.setPackage("android"); + intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); + intent.putExtra(EXTRA_REASON, "MasterClearConfirm"); + if (Environment.isExternalStorageRemovable()) { + intent.putExtra(EXTRA_WIPE_EXTERNAL_STORAGE, true); + }else + { + intent.putExtra(EXTRA_WIPE_EXTERNAL_STORAGE, false); + } + this.context.sendBroadcast(intent); + } + } diff --git a/app/src/main/java/com/ic/protocol/utils/NettyConnection.java b/app/src/main/java/com/ic/protocol/utils/NettyConnection.java index 1d44fc0f..dae64800 100644 --- a/app/src/main/java/com/ic/protocol/utils/NettyConnection.java +++ b/app/src/main/java/com/ic/protocol/utils/NettyConnection.java @@ -68,7 +68,7 @@ public class NettyConnection implements Connection { break; case BPTM: -// API.handleBPTM(cmd); + API.handleBPTM(cmd); Logger.i("服务器收到校时命令APTM"); DeliverCMDMessageToSystem("APTM",cmd);//通知下面线程状态变化 break; @@ -90,10 +90,10 @@ public class NettyConnection implements Connection { DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化 break; - case BP05: - //查询服务器语音 返回信息 - API.handleBP05(cmd); - break; +// case BP05: //L02服务器不适用 +// //查询服务器语音 返回信息 +// API.handleBP05(cmd); +// break; case BP12: //收到设置SOS号码 @@ -105,7 +105,10 @@ public class NettyConnection implements Connection { API.handleBP14(NettyConnection.this,cmd); Logger.i("收到服务器设置白名单号码命令BP14"); break; - + case BP15: + API.handleBP15(cmd,NettyConnection.this,runtime); + Logger.i("收到服务器设置定位命令BP15"); + break; case BP17: //收到恢复出厂设置 API.handleBP17(NettyConnection.this,cmd); @@ -140,7 +143,14 @@ public class NettyConnection implements Connection { case BPJZ: API.handleBPJZ(cmd,NettyConnection.this,runtime); Logger.i("收到服务器血压校准命令"); - + break; + case BPHT: + Logger.i("服务器收到上传的心率血压"); + break; + case BP84: + API.handleBP84(cmd,NettyConnection.this); + Logger.i("收到服务器白名单命令"); + break; } return ret;