1、添加BP15定位周期协议解析响应。没有实际设置周期
authorsnickersun <snickersun@qq.com>
Tue, 28 Jan 2020 17:13:34 +0000 (01:13 +0800)
committersnickersun <snickersun@qq.com>
Tue, 28 Jan 2020 17:13:34 +0000 (01:13 +0800)
2、添加BP84白名单开关协议解析响应,没有实际设置
3、添加关机、重启、恢复工厂设置三个功能,实际恢复工厂设置有接口可以测试,另外两个没有测试。
4、修改HeartRate测试中BPH和BPL取值算法。增加参考值限制条件(35~199之间)其他值无效,直接报原始值。

app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java
app/src/main/java/com/ic/protocol/bean/heartRateStatus.java
app/src/main/java/com/ic/protocol/service/KeepAlive.java
app/src/main/java/com/ic/protocol/utils/ContextProxy.java
app/src/main/java/com/ic/protocol/utils/NettyConnection.java

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