1、修改 FileOutputUtil.fileOutput 函数,减少日志中查找路径出错信息。 函数需要的路径,都通过runtime的getCacheDir来获得。
authorsnickersun <snickersun@qq.com>
Tue, 28 Jan 2020 14:26:35 +0000 (22:26 +0800)
committersnickersun <snickersun@qq.com>
Tue, 28 Jan 2020 14:26:35 +0000 (22:26 +0800)
2、增加HeartRateManger,解析BPXL,BPXY,BPJZ等函数,并通过APHT同时上报血压心率。(手表端apk手动检测和上传心率血压还没接入)

20 files changed:
app/src/main/AndroidManifest.xml
app/src/main/java/com/ic/protocol/GSensorListener.java
app/src/main/java/com/ic/protocol/LocationClient.java
app/src/main/java/com/ic/protocol/NMEAListener.java
app/src/main/java/com/ic/protocol/adapter/LBSHelper.java
app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java
app/src/main/java/com/ic/protocol/bean/Runtime.java
app/src/main/java/com/ic/protocol/bean/StheartRate.java
app/src/main/java/com/ic/protocol/bean/heartRateStatus.java
app/src/main/java/com/ic/protocol/service/HeartRateManager.java
app/src/main/java/com/ic/protocol/service/KeepAlive.java
app/src/main/java/com/ic/protocol/service/UpLoadDataPoints.java
app/src/main/java/com/ic/protocol/service/protocolMainServer.java
app/src/main/java/com/ic/protocol/utils/AlarmWakeUp.java
app/src/main/java/com/ic/protocol/utils/BatteryUtil.java
app/src/main/java/com/ic/protocol/utils/CellInfoUtil.java
app/src/main/java/com/ic/protocol/utils/FileOutputUtil.java
app/src/main/java/com/ic/protocol/utils/Logger.java
app/src/main/java/com/ic/protocol/utils/NettyConnection.java
app/src/main/java/com/ic/protocol/utils/ProcessReceiver.java

index 5072e55..65ffeaa 100644 (file)
                 <action android:name="com.ic.protocol.startsrv" />
                 <action android:name="com.enqualcomm.support.ACTION_ALARM" />
                 <action android:name="com.enqualcomm.support.HEART_ALARM" />
+
                 <action android:name="com.ic.protocol.startsrv" />
 
             </intent-filter>
                 <action android:name="com.enqualcomm.support.CloseUnreadMsg"/>
                 <action android:name="android.intent.action.BATTERY_LOW"/>
                 <action android:name="com.enqualcomm.support.ACTION_MISSED_CALL_GET"/>
+                <action android:name="com.eqc.heartrate.action.SILENT_START" />
             </intent-filter>
         </receiver>
 
index f99b7f8..17c1c1d 100644 (file)
@@ -11,6 +11,7 @@ import android.os.PowerManager;
 \r
 import com.ic.jni.ICJniUtils;\r
 import com.ic.protocol.bean.Runtime;\r
+import com.ic.protocol.service.protocolMainServer;\r
 import com.ic.protocol.utils.CellInfoUtil;\r
 import com.ic.protocol.utils.FileOutputUtil;\r
 import com.ic.protocol.utils.Logger;\r
@@ -54,7 +55,7 @@ public class GSensorListener implements SensorEventListener {
 //          GSensorListener.getStepCountOver=false;\r
 //        EqcAlgorithmNative.native_EqcAlgorithmMethod6(0.0F, 0.0F, 0.0F, GSensorListener.this.CURRENT_STEP);\r
         Context context = GSensorListener.this.mContext;\r
-        FileOutputUtil.fileOutput(context, "CURRENT_STEP", stringBuilder1.toString());\r
+        FileOutputUtil.fileOutput(protocolMainServer.getInstance().getRuntime().getCacheDir(), "CURRENT_STEP", stringBuilder1.toString());\r
 //        GSensorListener.access$502(GSensorListener.this, null);\r
         GSensorListener.this.releaseWakeLock(GSensorListener.this.mWakeLock);\r
       }\r
@@ -147,7 +148,7 @@ public class GSensorListener implements SensorEventListener {
     StringBuilder stringBuilder2 = new StringBuilder();\r
     stringBuilder2.append("CURRENT_STEP=");\r
     stringBuilder2.append(this.CURRENT_STEP);\r
-    FileOutputUtil.fileOutput(context, "CURRENT_STEP", stringBuilder2.toString());\r
+    FileOutputUtil.fileOutput(protocolMainServer.getInstance().getRuntime().getCacheDir(), "CURRENT_STEP", stringBuilder2.toString());\r
     this.sensorManager.unregisterListener(this);\r
     releaseWakeLock(this.mWakeLock);\r
   }\r
index 3a90f62..b1f506f 100644 (file)
@@ -342,7 +342,7 @@ public class LocationClient {
             && runtime.getLocationInstance().getMCC().equals("0")\r
             && runtime.getLocationInstance().getGSMStationCID() ==0\r
             &&  runtime.getLocationInstance().getLAC()==0)) ?false:true;\r
-        Logger.i("getMNC "+runtime.getLocationInstance().getMNC()+" getMCC "+runtime.getLocationInstance().getMCC()+" getGSMStationCID " + runtime.getLocationInstance().getGSMStationCID()+ " getLAC "+runtime.getLocationInstance().getLAC()+" changed "+runtime.getLocationInstance().isDataChanged());\r
+//        Logger.i("getMNC "+runtime.getLocationInstance().getMNC()+" getMCC "+runtime.getLocationInstance().getMCC()+" getGSMStationCID " + runtime.getLocationInstance().getGSMStationCID()+ " getLAC "+runtime.getLocationInstance().getLAC()+" changed "+runtime.getLocationInstance().isDataChanged());\r
         Logger.i("lbs_ok "+lbs_ok+" waitAndSendLocation wifi_ok " + wifi_ok+ " gps_ok "+gps_ok + " mode "+mode);\r
 \r
         switch(mode){\r
@@ -354,8 +354,16 @@ public class LocationClient {
 \r
             if ((lbs_ok && timeout==true) ||(lbs_ok && gps_ok && wifi_ok )||(lbs_ok&&gps_nosignal&&wifi_ok)){\r
 \r
-              Logger.i("offerQueue  "+protocolAPIHelper.AP01(runtime));\r
-              connection.send(protocolAPIHelper.genStringMessage("AP01", protocolAPIHelper.AP01(runtime)));\r
+              String AP01_CMD=protocolAPIHelper.AP01(runtime);\r
+              if (connection.isServerConnected() && KeepAlive.isConnected)\r
+              {\r
+                Logger.i("gps first send "+AP01_CMD);\r
+                connection.send(protocolAPIHelper.genStringMessage("AP01", AP01_CMD));\r
+              }else{\r
+                Logger.i("offline skip gps "+AP01_CMD);\r
+                FileOutputUtil.fileOutput(runtime.getCacheDir(),"APILog"," offlineskip  "+AP01_CMD);\r
+              }\r
+\r
 //          triggerSendThread();\r
               if (mTimer!=null){\r
                 mTimer.cancel();\r
@@ -380,11 +388,11 @@ public class LocationClient {
               String AP01_CMD=protocolAPIHelper.AP01(runtime);\r
               if (connection.isServerConnected() && KeepAlive.isConnected)\r
               {\r
-                Logger.i("send  "+AP01_CMD);\r
-                connection.send(protocolAPIHelper.genStringMessage("AP01", protocolAPIHelper.AP01(runtime)));\r
+                Logger.i("wifi first send "+AP01_CMD);\r
+                connection.send(protocolAPIHelper.genStringMessage("AP01", AP01_CMD));\r
               }else{\r
-                Logger.i("offline skip  "+AP01_CMD);\r
-                FileOutputUtil.fileOutput(runtime.getContextProxy().context,"APILog"," offlineskip  "+AP01_CMD);\r
+                Logger.i("offline skip wifi "+AP01_CMD);\r
+                FileOutputUtil.fileOutput(runtime.getCacheDir(),"APILog"," offlineskip  "+AP01_CMD);\r
               }\r
 //          triggerSendThread();\r
               if (mTimer!=null){\r
@@ -525,11 +533,10 @@ public void updateCellInfo() {
   private static int WorkingMod=1;\r
   private static int forceLocation=0;\r
   public void onReceive(StringMessage paramStringMessage) {\r
-    Logger.i("LocationClient onReceive " +paramStringMessage.cmd()+" linkOK "+linkOK );\r
-    if ("Sport:OK".equals(paramStringMessage.cmd()))\r
-      this.mPedometer2 = this.H12StepCount;\r
-\r
-\r
+//    Logger.i("LocationClient onReceive " +paramStringMessage.cmd()+" linkOK "+linkOK );\r
+//    if ("Sport:OK".equals(paramStringMessage.cmd()))\r
+//      this.mPedometer2 = this.H12StepCount;\r
+    Logger.i("LocationClient onReceive " +paramStringMessage.cmd() );\r
 \r
 //    if (linkOK)\r
 //      return;\r
@@ -565,8 +572,6 @@ public void updateCellInfo() {
       this.startLocationProcess(mod);\r
       WorkingMod=mod;\r
 \r
-\r
-\r
     }\r
 \r
 \r
@@ -692,7 +697,7 @@ public void updateCellInfo() {
                 stringBuilder.append(stringMessage.cmd());\r
                 stringBuilder.append(", ");\r
                 stringBuilder.append(stringMessage.isFromCache());\r
-                FileOutputUtil.fileOutput(context, "MessageInfo", stringBuilder.toString());\r
+                FileOutputUtil.fileOutput(runtime.getCacheDir(), "MessageInfo", stringBuilder.toString());\r
                 Logger.i(stringBuilder.toString());\r
               if( connection.isServerConnected() ==false  && !KeepAlive.isConnected  ) {\r
 \r
index edc9a0b..4b90094 100644 (file)
@@ -234,7 +234,7 @@ public class NMEAListener implements NmeaListener, LocationListener {
 \r
       stop(200);\r
     }\r
-    FileOutputUtil.fileOutput(this.runtime.getContextProxy().context,"GPS",sb2.toString());\r
+    FileOutputUtil.fileOutput(this.runtime.getCacheDir(),"GPS",sb2.toString());\r
 \r
     Logger.i( sb2.toString());\r
     getBestLocation(locationManager,status);\r
@@ -336,7 +336,7 @@ public class NMEAListener implements NmeaListener, LocationListener {
 \r
             Logger.i( sb.toString());\r
 \r
-            FileOutputUtil.fileOutput(this.runtime.getContextProxy().context,"GPS",sb.toString());\r
+            FileOutputUtil.fileOutput(this.runtime.getCacheDir(),"GPS",sb.toString());\r
             runtime.getLocationInstance().setLocation(latitude,longitude,speed,0,status.getMaxSatellites());\r
           }\r
 \r
index a866290..9c8f499 100644 (file)
@@ -268,7 +268,7 @@ public class LBSHelper {
                      this.runtime.setCellinfo(gsmSb.toString());\r
                      this.runtime.setCdmaInfo(null);\r
                     Logger.i("GsmCellLocation "+ gsmSb.toString());\r
-                     FileOutputUtil.fileOutput(this.context, "onCellLocationChanged", gsmSb.toString());\r
+                     FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "onCellLocationChanged", gsmSb.toString());\r
 \r
                      List neighboringCell_list = telephonyManager.getNeighboringCellInfo();\r
                      if (neighboringCell_list != null && !neighboringCell_list.isEmpty()) {\r
@@ -311,7 +311,6 @@ public class LBSHelper {
                     cdmaSB.append(",");\r
                     cdmaSB.append(this.mLastSignal);\r
                     Logger.i("CdmaCellLocation");\r
-                    Context var16 = this.context;\r
                     StringBuilder var8 = new StringBuilder();\r
                     var8.append("CDMA_info=");\r
                     var8.append(cdmaSB.toString());\r
@@ -319,7 +318,7 @@ public class LBSHelper {
                      this.runtime.setCellinfo(null);\r
                      this.runtime.setCdmaInfo(cdmaSB.toString());\r
 \r
-                    FileOutputUtil.fileOutput(var16, "onCellLocationChanged", var8.toString());\r
+                    FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "onCellLocationChanged", var8.toString());\r
                     return cdmaSB.toString();\r
 \r
                 }\r
index fd0b26c..ec136d7 100644 (file)
@@ -74,7 +74,11 @@ public class protocolAPIHelper {
         AP33,\r
         BP33,//工作模式\r
         APXL,\r
-        BPXL,//测量血压\r
+        BPXL,//测量心率\r
+        APXY,\r
+        BPXY,//测量血压\r
+        APJZ,\r
+        BPJZ,//血压校准\r
         AP84,\r
         BP84,//白名单开关\r
         AP85,\r
@@ -134,6 +138,10 @@ public class protocolAPIHelper {
         cmdMap.put(CMD_TYPE.BP33, "BP33");\r
         cmdMap.put(CMD_TYPE.APXL, "APXL");\r
         cmdMap.put(CMD_TYPE.BPXL, "BPXL");\r
+        cmdMap.put(CMD_TYPE.APXY, "APXY");\r
+        cmdMap.put(CMD_TYPE.BPXY, "BPXY");\r
+        cmdMap.put(CMD_TYPE.APJZ, "APJZ");\r
+        cmdMap.put(CMD_TYPE.BPJZ, "BPJZ");\r
         cmdMap.put(CMD_TYPE.AP84, "AP84");\r
         cmdMap.put(CMD_TYPE.BP84, "BP84");\r
         cmdMap.put(CMD_TYPE.AP85, "AP85");\r
@@ -316,6 +324,125 @@ public class protocolAPIHelper {
                 .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString();\r
     }\r
 \r
+\r
+    public static String APXL(String id){\r
+//设备响应:      IWAPXL,080835#\r
+        //080835:指令流水号\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))\r
+                .append(CMDSPLIT).append(id)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    /**\r
+     * 测量心率\r
+     * @param cmd\r
+     * @param connection\r
+     */\r
+    public void handleBPXL(String cmd,Connection connection){\r
+        //IWBPXL,353456789012345,080835#\r
+        //说明:\r
+        //IW:标识符\r
+        //BPXL : 命令字符\r
+        //353456789012345:IMEI号,设备唯一ID\r
+        //080835 :指令流水号\r
+        //设备响应:      IWAPXL,080835#\r
+        //080835:指令流水号\r
+        String[] list=cmd.split(CMDSPLIT);\r
+        if (list.length==3){\r
+            String index=list[2];\r
+            String imei=list[1];\r
+            Logger.i("Handle BPXL IMEI "+imei+",index "+index);\r
+            connection.send(protocolAPIHelper.genStringMessage("APXL",APXL(index)));\r
+        }else{\r
+            Logger.i("BPXL format error!");\r
+        }\r
+\r
+    }\r
+\r
+    public static String APXY(String id){\r
+//设备响应:      IWAPXY,080835#\r
+        //080835:指令流水号\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))\r
+                .append(CMDSPLIT).append(id)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    /**\r
+     * 测量血压\r
+     * @param cmd\r
+     * @param connection\r
+     */\r
+    public void handleBPXY(String cmd,Connection connection){\r
+        //IWBPXY,353456789012345,080835#\r
+        //说明:\r
+        //IW:标识符\r
+        //BPXL : 命令字符\r
+        //353456789012345:IMEI号,设备唯一ID\r
+        //080835 :指令流水号\r
+        //设备响应:      IWAPXY,080835#\r
+        //080835:指令流水号\r
+        String[] list=cmd.split(CMDSPLIT);\r
+        if (list.length==3){\r
+            String index=list[2];\r
+            String imei=list[1];\r
+            Logger.i("Handle BPXY IMEI "+imei+",index "+index);\r
+            connection.send(protocolAPIHelper.genStringMessage("APXY",APXY(index)));\r
+        }else{\r
+            Logger.i("BPXY format error!");\r
+        }\r
+\r
+    }\r
+\r
+\r
+\r
+    public static String APJZ(String id,String BPH,String BPL,String Age,String Sex){\r
+        //设备响应:      IWAPJZ,792997,120,85,42,1#\r
+        //792997:指令流水号\r
+        // 高压120,低压85,年龄42,1 男性\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ))\r
+                .append(CMDSPLIT).append(id)\r
+                .append(CMDSPLIT).append(BPH)\r
+                .append(CMDSPLIT).append(BPL)\r
+                .append(CMDSPLIT).append(Age)\r
+                .append(CMDSPLIT).append(Sex)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    /**\r
+     *\r
+     * @param cmd\r
+     * @param connection\r
+     * @param runtime\r
+     */\r
+    public void handleBPJZ(String cmd,Connection connection,Runtime runtime){\r
+        //cmdbuf.size 42 IWBPJZ,867155030001063,199600,120,85,45,1#   高压120,低压85,年龄45,男性\r
+//        cmdbuf.size 42 IWBPJZ,867155030001063,909957,120,85,42,0#  高压120,低压85,年龄42,女性\r
+        //IWBPJZ,353456789012345,080835,110,75#\r
+        //说明:\r
+        //IW:标识符\r
+        //BPJZ : 命令字符\r
+        //353456789012345:IMEI号,设备唯一ID\r
+        //110:高压值\r
+        //75:低压值\r
+        //080835 :指令流水号\r
+        //设备响应:      IWAPJZ,792997,120,85,42,1#\r
+        //792997:指令流水号\r
+        String[] list=cmd.split(CMDSPLIT);\r
+        if (list.length==7){\r
+            String index=list[2];\r
+            String imei=list[1];\r
+            String strBPH=list[3];\r
+            String strBPL=list[4];\r
+            String strAge=list[5];\r
+            String strSex=list[6];\r
+\r
+            connection.send(protocolAPIHelper.genStringMessage("APJZ",APJZ(index,strBPH,strBPL,strAge,strSex)));\r
+            runtime.getHRS().setXY_Ref(Integer.valueOf(strBPH),Integer.valueOf(strBPL),Integer.valueOf(strAge),Integer.valueOf(strSex));\r
+            Logger.i("Handle BPJZ IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", Age "+ strAge +", Sex "+ (strSex.equals("1")?"男":"女"));\r
+        }else{\r
+            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
@@ -663,14 +790,42 @@ public class protocolAPIHelper {
                 .append(CMDEND).toString();\r
     }\r
 \r
-    /*心率数据上传*/\r
+\r
+    /**\r
+     * 心率上传,返回协议字串\r
+     * @param ds\r
+     * @return\r
+     */\r
     public static String AP49(Runtime ds){\r
         //示例数据:IWAP49,68##\r
         return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49))\r
-                .append(CMDSPLIT).append(ds.get)\r
+                .append(CMDSPLIT).append(ds.getHRS().getPPG())\r
                 .append(CMDEND).toString();\r
 \r
     }\r
+\r
+    /**\r
+     * 返回上传心率血压的协议字串\r
+     * @param ds\r
+     * @return\r
+     */\r
+    public static String APHT(Runtime ds){\r
+        //IWAPHT,60,130,85#\r
+        //说明:\r
+        //IW:标识符\r
+        //APHT : 命令字符\r
+        //60 : 表示心率\r
+        //130: 血压高压 [收缩压]\r
+        //85 : 血压低压 [舒张压]\r
+        //平台响应:      IWBPHT#\r
+        //表示平台已接收,可不作响应\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))\r
+                .append(CMDSPLIT).append(ds.getHRS().getPPG())\r
+                .append(CMDSPLIT).append(ds.getHRS().getBPH())\r
+                .append(CMDSPLIT).append(ds.getHRS().getBPL())\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
     //    立即定位指令(长链接有效)\r
     public void handleBP16(Connection connection,Runtime runtime,String cmd){\r
         //示例数据:IWBP16,867155030001063,335386\r
@@ -697,19 +852,7 @@ public class protocolAPIHelper {
                 .append(CMDSPLIT).append(cmdindex)\r
                 .append(CMDEND).toString();\r
     }\r
-    /*上传心率与血压*/\r
-    public static String APHT(Runtime ds){\r
-        //示例数据:IWAPHT,60,130,85#\r
-        // 60 : 表示心率\r
-        //130: 血压高压 [收缩压]\r
-        //85 : 血压低压 [舒张压]\r
-        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))\r
-                .append(CMDSPLIT).append("60")\r
-                .append(CMDSPLIT).append("130")\r
-                .append(CMDSPLIT).append("85")\r
-                .append(CMDEND).toString();\r
 \r
-    }\r
     /*通过基站获取时间和坐标*/\r
     public static String APTM(Runtime ds){\r
         //示例数据:IWAPTM,460,0,9750,3613#\r
index a552804..8617a00 100644 (file)
@@ -81,7 +81,10 @@ public class Runtime {
   private String latitude;\r
   \r
   private LBSHelper lbsHelper;\r
-  \r
+\r
+\r
+  private heartRateStatus HRS=null;\r
+\r
 //  private String location;\r
   \r
   private boolean lockSimInfo=false;\r
@@ -108,6 +111,13 @@ public class Runtime {
   public int totalStepCount;\r
 \r
 \r
+  public heartRateStatus getHRS(){\r
+    return HRS;\r
+  }\r
+\r
+  public void setHRS(heartRateStatus hrs){\r
+    HRS=hrs;\r
+  }\r
   public int getLastStepCount(){\r
     return lastStepCount;\r
   }\r
index 4ebc898..6da73fb 100644 (file)
@@ -15,19 +15,19 @@ public class StheartRate {
   \r
   public String week;\r
   \r
-  public StheartRate(String paramString1, String paramString2, String paramString3, String paramString4) {\r
-    this.start = paramString1;\r
-    this.end = paramString2;\r
-    this.week = paramString3;\r
-    this.status = paramString4;\r
+  public StheartRate(String _start, String _end, String _week, String _status) {\r
+    this.start = _start;\r
+    this.end = _end;\r
+    this.week = _week;\r
+    this.status = _status;\r
   }\r
   \r
-  public StheartRate(String paramString1, String paramString2, String paramString3, String paramString4, String paramString5) {\r
-    this.start = paramString1;\r
-    this.end = paramString2;\r
-    this.week = paramString3;\r
-    this.status = paramString4;\r
-    this.interval = paramString5;\r
+  public StheartRate(String _start, String _end, String _week, String _status, String _inteval) {\r
+    this.start = _start;\r
+    this.end = _end;\r
+    this.week = _week;\r
+    this.status = _status;\r
+    this.interval = _inteval;\r
   }\r
   \r
   public boolean equals(Object obj) {\r
index 742bf84..080f295 100644 (file)
@@ -5,6 +5,23 @@ import com.ic.jni.ICJniUtils;
 public class heartRateStatus {\r
 \r
     private int lastHeartrate;\r
+    private String lastTestTime;\r
+    private int lastBPH;\r
+    private int lastBPL;\r
+    private int BPH_ref;\r
+    private int BPL_ref;\r
+    private int Age;\r
+    private int Sex;\r
+\r
+\r
+    public void setXY_Ref(int refBPH,int refBPL,int refSex,int refAge){\r
+        BPH_ref=refBPH;\r
+        BPL_ref=refBPL;\r
+        Age=refAge;\r
+        Sex=refSex;\r
+    }\r
+\r
+\r
     private HEARTRATE_WORKINGSTAT currentStat;\r
     public enum HEARTRATE_WORKINGSTAT {\r
         HEARTRATE_CLOSED,\r
@@ -21,31 +38,47 @@ public class heartRateStatus {
 \r
     public HEARTRATE_WORKINGSTAT getHeartrateWorkingStat(){\r
 \r
-        int PPG=ICJniUtils.getPPG();//调用底层函数保证状态更新。\r
-        if (ICJniUtils.isPPGStarted()==1 ){\r
-            if ( ICJniUtils.isWeared()==1) {\r
-                if (PPG > 0) {\r
-                    currentStat = HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS;\r
-                } else {\r
-                    currentStat = HEARTRATE_WORKINGSTAT.HEARTRATE_WARED_AND_TESTING;\r
-                }\r
-            }else{\r
-                currentStat=HEARTRATE_WORKINGSTAT.HEARTRATE_NOTWARED;\r
-            }\r
-        }else{\r
-            currentStat=HEARTRATE_WORKINGSTAT.HEARTRATE_CLOSED;\r
-        }\r
         return currentStat;\r
     }\r
 \r
     public void setHeartrateStat(HEARTRATE_WORKINGSTAT stat){\r
+\r
         currentStat = stat;\r
     }\r
-    public int getHeartrateData(){\r
+    public int getPPG(){\r
+\r
         return lastHeartrate;\r
     }\r
 \r
-    public void setLastHeartrate(int value){\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
+        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
+        return BPL;\r
+    }\r
+\r
+    public String getTestTime(){\r
+        return lastTestTime;\r
+    }\r
+    public void setLastTestTime(String testtime){\r
+        lastTestTime=testtime;\r
+    }\r
+\r
+\r
+    public void setLastHeartrate(int value,int bph,int bpl){\r
         lastHeartrate=value;\r
+        lastBPH=bph;\r
+        lastBPL=bpl;\r
     }\r
 }\r
index 62bb125..6af8801 100644 (file)
@@ -4,203 +4,303 @@ import android.content.BroadcastReceiver;
 import android.content.Context;\r
 import android.content.Intent;\r
 import android.content.IntentFilter;\r
-import android.os.SystemClock;\r
+import android.net.Uri;\r
+import android.os.Bundle;\r
+import android.os.Handler;\r
+import android.os.Message;\r
+import android.os.Messenger;\r
+import android.os.PowerManager;\r
 \r
-import com.eiot.watch_lib.LauncherCtrl;\r
+import com.ic.jni.ICJniUtils;\r
+import com.ic.protocol.LocationClient;\r
 import com.ic.protocol.adapter.protocolAPIHelper;\r
 import com.ic.protocol.bean.Runtime;\r
 import com.ic.protocol.bean.StringMessage;\r
-import com.ic.protocol.service.base.AbstractConnectionService;\r
-import com.ic.protocol.utils.AlarmWakeUp;\r
+import com.ic.protocol.bean.heartRateStatus;\r
+import com.ic.protocol.service.base.AbstractInvokeHandlerService;\r
 import com.ic.protocol.utils.Connection;\r
 import com.ic.protocol.utils.Logger;\r
 import com.ic.protocol.utils.NettyConnection;\r
-import com.ic.protocol.utils.NetworkObservable;\r
-\r
-import rx.Subscription;\r
-import rx.functions.Action1;\r
-\r
-import static com.eiot.watch_lib.LauncherCtrl.STATUS_BAR_STATE_SERVER_CONNECTED_OFF;\r
-import static com.eiot.watch_lib.LauncherCtrl.STATUS_BAR_STATE_SERVER_CONNECTED_ON;\r
-\r
-public class HeartRateManager extends AbstractConnectionService {\r
-  private static final long HEARTBEAT_TIMEOUT = 660000L;\r
-  private static String TAG = HeartRateManager.class.getSimpleName();\r
-  public static boolean connectionError = false;\r
-  \r
-  public static boolean isConnected = false;\r
-  \r
-  private static boolean isInSleepMode = false;\r
-  \r
-  private static int mFlag = 30;\r
-  \r
-  Connection connection;\r
-  \r
-  private int currentReConnectInterval = 11;\r
-  \r
-  private boolean firstReConnected = true;\r
-  \r
-  private long idleTimeMillis;\r
-  \r
-  private int isFirstAsjust;\r
-  \r
-  private int lastReConnectInterval = -1;\r
-  \r
-  private int lastReConnectionNumber = -1;\r
-  \r
-  Context mContext;\r
-  \r
-  NetworkObservable mNetworkObservable = new NetworkObservable();\r
-  \r
-  Runtime mRuntime;\r
-  \r
-  private ShutDownReceiver mShutDownReceiver;\r
-  \r
-  private Subscription mSubscription;\r
-  \r
-  private int reConnectionNumber;\r
-  \r
-  private int reCycleTimes;\r
-  \r
-  private int timeout = 660;\r
-  \r
-  private int totalAdjustTimes;\r
-  \r
-  private int whichTimeAdjust;\r
-  \r
-  static  {\r
-  \r
-  }\r
+import com.ic.protocol.utils.SimSignalUtil;\r
+import com.ic.protocol.utils.TimeUtil;\r
 \r
-  \r
-  public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {\r
+import java.util.Timer;\r
+import java.util.TimerTask;\r
 \r
-    Logger.i("onAlarmClock");\r
+import static com.ic.protocol.Constants.ACTION_HEATR_RATE_START;\r
 \r
-    long l = SystemClock.elapsedRealtime();\r
+public class HeartRateManager extends AbstractInvokeHandlerService {\r
+  private int mNetworkType;\r
 \r
-    //如果 没有连接成功 或者 时间超过了11分钟 ,则进行重新连接服务\r
-    if (!isConnected || l - this.idleTimeMillis > 660000L) {\r
-      StringBuilder stringBuilder = new StringBuilder();\r
-      stringBuilder.append("重连");\r
-      stringBuilder.append(isConnected);\r
-      Logger.i(stringBuilder.toString());\r
-      if (!isConnected && this.firstReConnected) {\r
-        this.reConnectionNumber++;\r
-        this.firstReConnected = false;\r
-      } \r
-//      if (paramRuntime.getLockSimInfo()) {\r
-//        paramConnection.disconnect();\r
-//        return;\r
-//      }\r
-\r
-    } \r
-  }\r
-  \r
-  public void onAttach(final Connection connection, final Runtime runtime) {\r
-    this.mRuntime = runtime;\r
-    this.mContext = (runtime.getContextProxy()).context;\r
-    this.mNetworkObservable.register(this.mContext);\r
-    this.connection = connection;\r
-    this.mSubscription = this.mNetworkObservable.onChange().subscribe(new Action1<Integer>() {\r
-          private boolean first;\r
-          \r
-          public void call(Integer param1Integer) {\r
-            StringBuilder stringBuilder = new StringBuilder();\r
-            stringBuilder.append("yls  aBoolean=");\r
-            stringBuilder.append(param1Integer);\r
-            stringBuilder.append(",,first=");\r
-            stringBuilder.append(this.first);\r
-            Logger.i(stringBuilder.toString());\r
-            if (param1Integer.intValue() > 0) {\r
-              if (this.first) {\r
-                this.first = false;\r
-                return;\r
-              } \r
-              connection.connect(runtime.getSrvIP(), runtime.getPort());\r
-            } \r
+  private SimSignalUtil mSignalUtil;\r
+\r
+  private Runtime runtime;\r
+  private NettyConnection connection;\r
+  private TimerTaskPPG timerTaskPPG;\r
+\r
+  private Timer timerPPG;\r
+  private static Handler mHandler=null;\r
+\r
+\r
+  public HeartRateManager(Runtime _runtime,NettyConnection _connection){\r
+    runtime=_runtime;\r
+    connection=_connection;\r
+    currentStat= heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_CLOSED;\r
+    isTimerStarted=false;\r
+    mHandler=new Handler(new Handler.Callback() {\r
+      @Override\r
+      public boolean handleMessage(Message message) {\r
+\r
+        switch (message.what) {\r
+          case 100: {\r
+            //只有检测PPG成功,且网络连接中才发送数据\r
+            if (runtime.getHRS().getHeartrateWorkingStat() == heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS) {\r
+              runtime.getHRS().setLastTestTime(TimeUtil.getLocalTime());\r
+              String PPGDATA = protocolAPIHelper.APHT(runtime);\r
+              if (connection.isServerConnected()) {\r
+                connection.send(protocolAPIHelper.genStringMessage("APHT", PPGDATA));\r
+                Logger.i("Send PPG " + PPGDATA);\r
+              } else {\r
+                Logger.i("Skip PPG " + PPGDATA);\r
+              }\r
+            } else {\r
+              Logger.i("PPG Failed for Timeout!");\r
+            }\r
+            stopPPG();\r
           }\r
-        });\r
+           break;\r
+          case 200: {\r
+            startPPG();\r
+          }\r
+            break;\r
+        }\r
+        return false;\r
+      }\r
+    });\r
+\r
+  }\r
+\r
+  private BroadcastReceiver PPGStartReceiver = new BroadcastReceiver() {\r
+    public void onReceive(Context param1Context, Intent param1Intent) {\r
+      if (ACTION_HEATR_RATE_START.equals(param1Intent.getAction())) {\r
+        HeartRateManager.this.startPPG();\r
+      }\r
+    }\r
+  };\r
+\r
+  public void regReceiver(){\r
+    //注册“网络变化”的广播接收器\r
     IntentFilter intentFilter = new IntentFilter();\r
-    intentFilter.addAction("android.intent.action.ACTION_SHUTDOWN_MOREINFO");\r
-    this.mShutDownReceiver = new ShutDownReceiver();\r
-    this.mContext.registerReceiver(this.mShutDownReceiver, intentFilter);\r
+    intentFilter.addAction(ACTION_HEATR_RATE_START);\r
+    runtime.getContextProxy().context.registerReceiver(PPGStartReceiver, intentFilter);\r
   }\r
-  \r
-  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime) {\r
-    if (isConnected) protocolMainServer.getInstance().startConnectionRetryTimer();\r
-    connectionError = true;\r
-    isConnected = false;\r
-    paramRuntime.getContextProxy().sendBroadcast(isConnected);\r
-    StringBuilder stringBuilder = new StringBuilder();\r
-    stringBuilder.append("onConnectionClose=");\r
-    stringBuilder.append(",set KeepAlive isConnected = false");\r
-    Logger.i(stringBuilder.toString());\r
-    LauncherCtrl.getInstance(this.mContext).setStatusBarIcon("server_connected", STATUS_BAR_STATE_SERVER_CONNECTED_OFF);\r
-    return false;\r
+\r
+  public void unRegReceiver(){\r
+    runtime.getContextProxy().context.unregisterReceiver(PPGStartReceiver);\r
   }\r
-  \r
-  public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) {\r
-\r
-    StringBuilder stringBuilder = new StringBuilder();\r
-    stringBuilder.append("onConnectionOpen connectionError=");\r
-    stringBuilder.append(connectionError);\r
-    stringBuilder.append(",sInSleepMode =");\r
-    stringBuilder.append(isInSleepMode);\r
-    stringBuilder.append(",set KeepAlive isConnected = true");\r
-    Logger.i(stringBuilder.toString());\r
-//    if (!connectionError) {\r
-      connectionError = false;\r
-//    connection.send(protocolAPIHelper.genStringMessage("AP00",protocolAPIHelper.AP00(paramRuntime)));\r
-    connection.send(protocolAPIHelper.genStringMessage("heart",protocolAPIHelper.AP03(paramRuntime)));\r
-//      if (Deliver.haveSendH42) {\r
-//        ServiceUtil.offerQueue(new StringMessage(protocolAPIHelper.AP03(paramRuntime)));\r
-//        Deliver.haveSendH42 = false;\r
-//      }\r
-//    }\r
-\r
-    isConnected = true;\r
-    this.firstReConnected = true;\r
-    this.idleTimeMillis = SystemClock.elapsedRealtime();\r
-    paramRuntime.getContextProxy().sendBroadcast(isConnected);\r
-\r
-    LauncherCtrl.getInstance(this.mContext).setStatusBarIcon("server_connected", STATUS_BAR_STATE_SERVER_CONNECTED_ON);\r
-    return false;\r
+\r
+  public class TimerTaskPPG extends TimerTask{\r
+    @Override\r
+    public void run() {\r
+      doPPGtest();\r
+    }\r
+  };\r
+\r
+  int PPG;\r
+  int BPH;\r
+  int BPL;\r
+  boolean isWared ;\r
+  boolean isPPGTesting ;\r
+  static boolean isTimerStarted;\r
+  static heartRateStatus.HEARTRATE_WORKINGSTAT currentStat;\r
+  static int delayCount;\r
+  static int testCount;\r
+  private final int MAX_TESTTIMES=30000;//最大延迟测试时间为30秒\r
+\r
+\r
+  public void doPPGtest(){\r
+    PPG= ICJniUtils.getPPG();//调用底层函数保证状态更新。\r
+    BPH=ICJniUtils.getHighBloodPressure();\r
+    BPL=ICJniUtils.getLowBloodPressure();\r
+    isWared = (ICJniUtils.isWeared()==1);\r
+    isPPGTesting = (ICJniUtils.isPPGStarted()==1 );\r
+    Logger.i("PPG TESTING="+isPPGTesting+", isWared="+isWared+", PPG="+PPG+", BPH="+BPH+", BPL="+BPL);\r
+    if (isPPGTesting){\r
+      if (isWared ) {\r
+        if (PPG > 0) {\r
+          currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS;\r
+\r
+        } else {\r
+          currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_WARED_AND_TESTING;\r
+        }\r
+      }else{\r
+        currentStat= heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_NOTWARED;\r
+      }\r
+    }else{\r
+      currentStat= heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_CLOSED;\r
+    }\r
+\r
+\r
+    if (currentStat==heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_TEST_SUCCESS){\r
+      runtime.getHRS().setLastHeartrate(PPG,BPH,BPL);\r
+      delayCount--;\r
+      if (delayCount<0) //达到延迟时间后,停止检测并发送数据\r
+        sendAndStopPPG();\r
+\r
+    }else{\r
+      runtime.getHRS().setLastHeartrate(0,0,0);\r
+    }\r
+    runtime.getHRS().setHeartrateStat(currentStat);\r
+\r
+    testCount--;\r
+    if (testCount<0)\r
+    {\r
+      Logger.i("PPG 超过 "+MAX_TESTTIMES+"秒 未能得出结果,取消检测报告!");\r
+      stopPPG();\r
+    }\r
+\r
   }\r
 \r
-  public void onDetach(Connection paramConnection, Runtime paramRuntime) {\r
-    if (this.mSubscription != null && !this.mSubscription.isUnsubscribed())\r
-      this.mSubscription.unsubscribe(); \r
-    this.mNetworkObservable.unregister(this.mContext);\r
-    this.mContext.unregisterReceiver(this.mShutDownReceiver);\r
+\r
+  private void sendAndStopPPG(){\r
+    //结束和发送数据\r
+    mHandler.sendEmptyMessage(100);\r
+  }\r
+  PowerManager.WakeLock mWakeLock=null;\r
+  public PowerManager.WakeLock getPPGWakeLock() {\r
+    mWakeLock = ((PowerManager)(runtime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "PPGTest");\r
+    mWakeLock.acquire(30000L);\r
+    return mWakeLock;\r
   }\r
-  \r
-  public void onHeartAlarm(NettyConnection paramNettyConnection, Runtime paramRuntime) {\r
-    Logger.i("onHeartAlarm");\r
-//    UpdateHeartBeatTimeout();\r
-//    if (this.reCycleTimes == 0 && this.currentReConnectInterval != 11){\r
-//    paramNettyConnection.send(protocolAPIHelper.genStringMessage("AP00",protocolAPIHelper.AP00(paramRuntime)));\r
-    paramNettyConnection.send(protocolAPIHelper.genStringMessage("heart",protocolAPIHelper.AP03(paramRuntime)));\r
- //    }\r
 \r
+  public void releaseWakeLock(){\r
+    if (mWakeLock!=null){\r
+      mWakeLock.release();\r
+    }\r
+    mWakeLock=null;\r
+  }\r
+  public void startPPG(){\r
+    if (ICJniUtils.isPPGavailable()==1 && isTimerStarted==false) {\r
+      currentStat=heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_OPEN;\r
+      delayCount=3;//检测成功后三秒发送数据\r
+      testCount=MAX_TESTTIMES;//测试MAX_TESTTIMES后没有结果也要强制退出\r
+      isTimerStarted=true;\r
+      ICJniUtils.enablePPG();\r
+      getPPGWakeLock();\r
+      timerTaskPPG = new TimerTaskPPG();\r
+      timerPPG = new Timer();\r
+      timerPPG.scheduleAtFixedRate(timerTaskPPG,0, 1000); //1 秒更新一次数据\r
+\r
+    }\r
   }\r
 \r
-  public boolean onReceive(StringMessage paramStringMessage, Connection paramConnection, Runtime paramRuntime) {\r
-    this.idleTimeMillis = SystemClock.elapsedRealtime();\r
-    Logger.i(TAG+paramStringMessage.cmd());\r
+  public void stopPPG(){\r
+    if( isTimerStarted )\r
+    {\r
+      timerPPG.cancel();\r
+      isTimerStarted=false;\r
+    }\r
+    ICJniUtils.disablePPG();\r
+    releaseWakeLock();\r
+  }\r
+\r
+  private void callback(Messenger paramMessenger, int paramInt) {\r
+    if (paramMessenger != null)\r
+      try {\r
+        paramMessenger.send(Message.obtain(null, paramInt));\r
+        return;\r
+      } catch (Exception e) {\r
+        e.printStackTrace();\r
+      }\r
+  }\r
+\r
+\r
+\r
+  public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {}\r
 \r
+  public void onAttach(Connection paramConnection, Runtime paramRuntime) {\r
 \r
+//    this.mSignalUtil = SimSignalUtil.getInstance((paramRuntime.getContextProxy()).context);\r
+    regReceiver();\r
+  }\r
+\r
+  public void onDetach(Connection paramConnection, Runtime paramRuntime) {\r
+    unRegReceiver();\r
+  }\r
+\r
+  public boolean onUserRequest(Intent paramIntent, Connection paramConnection, final Runtime runtime) {\r
+    String str = paramIntent.getAction();\r
+    if (ACTION_HEATR_RATE_START.equals(str)) {\r
+//      this.mSignalUtil = SimSignalUtil.getInstance((runtime.getContextProxy()).context);\r
+//      str = paramIntent.getStringExtra("filepath");\r
+//      String str1 = paramIntent.getStringExtra("number");\r
+      StringBuilder stringBuilder = new StringBuilder();\r
+        stringBuilder.append("PPG Started on Action "+ACTION_HEATR_RATE_START);\r
+//        stringBuilder.append(str);\r
+//        stringBuilder.append("number == ");\r
+//        stringBuilder.append(str1);\r
+      Logger.i(stringBuilder.toString());\r
+      //do something\r
+      startPPG();\r
+    }\r
     return false;\r
   }\r
 \r
-  \r
-  class ShutDownReceiver extends BroadcastReceiver {\r
-    public void onReceive(Context param1Context, Intent param1Intent) {\r
-      boolean bool = param1Intent.getBooleanExtra("reboot", false);\r
-      if (HeartRateManager.this.mRuntime.getBatteryLow() && !HeartRateManager.this.mRuntime.getBatterychanging() && !bool && !HeartRateManager.this.mRuntime.isShutdown()){\r
-//                KeepAlive.this.connection.send(new StringMessage(protocolAPIHelper.AP00(KeepAlive.this.mRuntime)));\r
-      }\r
+public static void triggerPPGtest(){\r
+   if (mHandler !=null) mHandler.sendEmptyMessage(200);\r
+}\r
+\r
+  public boolean onUserRequest(Message message, Connection connection, final Runtime runtime) {\r
+    Bundle bundle3;\r
+    String str3;\r
+    String str2;\r
+    String str1;\r
+    Bundle bundle2;\r
+    final Messenger callback2;\r
+\r
+    int i = 1;\r
+    switch (message.what) {\r
 \r
+      case 1002:\r
+        this.mNetworkType = this.mSignalUtil.getNetworkType();\r
+        bundle3 = message.getData();\r
+        str1 = bundle3.getString("filepath");\r
+        str2 = bundle3.getString("number");\r
+        if (str1 != null) {\r
+          if (str2 == null)\r
+            return true;\r
+          StringBuilder stringBuilder = new StringBuilder();\r
+          stringBuilder.append("filepath == ");\r
+          stringBuilder.append(str1);\r
+          stringBuilder.append("number == ");\r
+          stringBuilder.append(str2);\r
+          Logger.i(stringBuilder.toString());\r
+//do something\r
+        } else {\r
+          return true;\r
+        }\r
+      case 1001:\r
+        this.mSignalUtil = SimSignalUtil.getInstance((runtime.getContextProxy()).context);\r
+        this.mNetworkType = this.mSignalUtil.getNetworkType();\r
+        bundle2 = message.getData();\r
+        str2 = bundle2.getString("filepath");\r
+        str3 = bundle2.getString("number");\r
+\r
+        if (str2 != null && str3 != null) {\r
+// send\r
+        } else {\r
+          return true;\r
+        }\r
+      case 1000:\r
+        break;\r
+\r
+      default:\r
+        return false;\r
     }\r
+//    Bundle bundle1 = paramMessage.getData();\r
+//    i = bundle1.getInt("category");\r
+\r
+    return true;\r
   }\r
 }\r
+\r
index e196ff2..6fa2343 100644 (file)
@@ -204,7 +204,9 @@ public class KeepAlive extends AbstractConnectionService {
   }\r
 \r
 \r
-  public void setSleepMode(boolean paramBoolean) { isInSleepMode = paramBoolean; }\r
+  public void setSleepMode(boolean paramBoolean) {\r
+    isInSleepMode = paramBoolean;\r
+  }\r
   \r
   class ShutDownReceiver extends BroadcastReceiver {\r
     public void onReceive(Context param1Context, Intent param1Intent) {\r
index 296813e..c6f1a95 100644 (file)
@@ -4,6 +4,7 @@ import android.content.Intent;
 import android.os.Handler;\r
 import android.os.Message;\r
 \r
+import com.ic.protocol.bean.ICLocation;\r
 import com.ic.protocol.bean.Locations;\r
 import com.ic.protocol.bean.Runtime;\r
 import com.ic.protocol.service.base.AbstractInvokeHandlerService;\r
@@ -18,7 +19,7 @@ import org.json.JSONObject;
 import java.util.List;\r
 \r
 public class UpLoadDataPoints extends AbstractInvokeHandlerService {\r
-  private final String REGISTER_CODE = "FIZOF5Rcp0nuWPqf";\r
+  private final String TAG = UpLoadDataPoints.class.getSimpleName();\r
   \r
   private int alarmClock;\r
   \r
@@ -26,57 +27,7 @@ public class UpLoadDataPoints extends AbstractInvokeHandlerService {
   \r
   private Runnable mRegisterDeviceTask = new Runnable() {\r
       public void run() {\r
-//        JSONObject jSONObject = new JSONObject();\r
-//        try {\r
-//          jSONObject.put("sn", UpLoadDataPoints.this.mRuntime.getCid());\r
-//          jSONObject.put("title", "EQC_G5_Device");\r
-//        } catch (JSONException jSONException) {\r
-//          jSONException.printStackTrace();\r
-//        }\r
-//        OneNetApiCallback oneNetApiCallback = new OneNetApiCallback() {\r
-//            public void onFailed(Exception param2Exception) { Logger.i(param2Exception.getMessage()); }\r
-//\r
-//            public void onSuccess(String param2String) {\r
-//              try {\r
-//                StringBuilder stringBuilder1 = new JSONObject(param2String);\r
-//                int i = stringBuilder1.optInt("errno");\r
-//                if (i != 0) {\r
-//                  stringBuilder1 = new StringBuilder();\r
-//                  stringBuilder1.append("error : ");\r
-//                  stringBuilder1.append(i);\r
-//                  Logger.i(stringBuilder1.toString());\r
-//                  return;\r
-//                }\r
-//                JSONObject jSONObject = stringBuilder1.optJSONObject("data");\r
-//                if (jSONObject == null) {\r
-//                  Logger.i("data is null");\r
-//                  return;\r
-//                }\r
-//                String str1 = jSONObject.optString("device_id");\r
-//                String str2 = jSONObject.optString("key", null);\r
-//                StringBuilder stringBuilder2 = new StringBuilder();\r
-//                stringBuilder2.append("device_id=");\r
-//                stringBuilder2.append(str1);\r
-//                stringBuilder2.append("DeviceApiKey=");\r
-//                stringBuilder2.append(str2);\r
-//                Logger.i(stringBuilder2.toString());\r
-//                UpLoadDataPoints.this.mRuntime.setDevice_id(str1);\r
-//                UpLoadDataPoints.this.mRuntime.setDevice_key(str2);\r
-//                SharPreferenceUtil.setPrefString((this.this$1.this$0.mRuntime.getContextProxy()).context, "key_device_id", str1);\r
-//                SharPreferenceUtil.setPrefString((this.this$1.this$0.mRuntime.getContextProxy()).context, "key_device_key", str2);\r
-//                if (str2 == null) {\r
-//                  Logger.i("DeviceApiKey is null");\r
-//                  return;\r
-//                }\r
-//                OneNetApi.setAppKey(str2);\r
-//                return;\r
-//              } catch (JSONException param2String) {\r
-//                param2String.printStackTrace();\r
-//                return;\r
-//              }\r
-//            }\r
-//          };\r
-//        OneNetApi.registerDevice("FIZOF5Rcp0nuWPqf", jSONObject.toString(), oneNetApiCallback);\r
+\r
       }\r
     };\r
   \r
@@ -127,157 +78,53 @@ public class UpLoadDataPoints extends AbstractInvokeHandlerService {
   \r
   public void onDetach(Connection paramConnection, Runtime paramRuntime) {}\r
   \r
-  public boolean onUserRequest(Intent paramIntent, Connection paramConnection, Runtime paramRuntime) { return false; }\r
+  public boolean onUserRequest(Intent paramIntent, Connection paramConnection, Runtime paramRuntime) {\r
+    return false;\r
+  }\r
   \r
-  public boolean onUserRequest(Message paramMessage, Connection paramConnection, Runtime paramRuntime) { return false; }\r
+  public boolean onUserRequest(Message paramMessage, Connection paramConnection, Runtime paramRuntime) {\r
+    return false;\r
+  }\r
   \r
   public void uploadCurrentLocation() {\r
     String str1 = this.mRuntime.getDevice_id();\r
     String str2 = this.mRuntime.getDevice_key();\r
     if (str1 != null && str2 != null) {\r
-//      OneNetApi.setAppKey(str2);\r
-//      this.mHandler.post(new UploadCurrentLocationTask(new Locations(this.mRuntime.getLongitude(), this.mRuntime.getLatitude()), str1));\r
+      this.mHandler.post(new UploadCurrentLocationTask(this.mRuntime.getLocationInstance().getLocation(), str1));\r
       return;\r
     } \r
 //    this.mHandler.post(this.mRegisterDeviceTask);\r
   }\r
   \r
   private class UploadCurrentLocationTask implements Runnable {\r
-    private Locations mCurrentLocation;\r
+    private ICLocation.GPS_LocationPoint mCurrentLocation;\r
     \r
     private String mDeviceID;\r
     \r
-    UploadCurrentLocationTask(Locations param1Locations, String param1String) {\r
+    UploadCurrentLocationTask(ICLocation.GPS_LocationPoint param1Locations, String param1String) {\r
       this.mCurrentLocation = param1Locations;\r
       this.mDeviceID = param1String;\r
     }\r
     \r
     public void run() {\r
-//      JSONObject jSONObject1 = new JSONObject();\r
-//      JSONObject jSONObject2 = new JSONObject();\r
-//      try {\r
-//        jSONObject2.put("lon", this.mCurrentLocation.getLon());\r
-//        jSONObject2.put("lat", this.mCurrentLocation.getLat());\r
-//        jSONObject1.put("locations", jSONObject2);\r
-//      } catch (JSONException jSONObject2) {\r
-//        jSONObject2.printStackTrace();\r
-//        UpLoadDataPoints.access$002(UpLoadDataPoints.this, false);\r
-//        UpLoadDataPoints.access$102(UpLoadDataPoints.this, 0);\r
-//      }\r
-//      OneNetApiCallback oneNetApiCallback = new OneNetApiCallback() {\r
-//          public void onFailed(Exception param2Exception) {\r
-//            UpLoadDataPoints.access$002(UpLoadDataPoints.UploadCurrentLocationTask.this.this$0, false);\r
-//            UpLoadDataPoints.access$102(UpLoadDataPoints.UploadCurrentLocationTask.this.this$0, 0);\r
-//          }\r
-//\r
-//          public void onSuccess(String param2String) {\r
-//            try {\r
-//              int i = (new JSONObject(param2String)).optInt("errno");\r
-//              if (i != 0) {\r
-//                StringBuilder stringBuilder = new StringBuilder();\r
-//                stringBuilder.append("error : ");\r
-//                stringBuilder.append(i);\r
-//                Logger.i(stringBuilder.toString());\r
-//                UpLoadDataPoints.access$002(UpLoadDataPoints.UploadCurrentLocationTask.this.this$0, false);\r
-//                return;\r
-//              }\r
-//              UpLoadDataPoints.access$002(UpLoadDataPoints.UploadCurrentLocationTask.this.this$0, true);\r
-//              return;\r
-//            } catch (JSONException param2String) {\r
-//              param2String.printStackTrace();\r
-//              UpLoadDataPoints.access$002(UpLoadDataPoints.UploadCurrentLocationTask.this.this$0, false);\r
-//              return;\r
-//            }\r
-//          }\r
-//        };\r
-//      OneNetApi.addDataPoints(this.mDeviceID, "3", jSONObject1.toString(), oneNetApiCallback);\r
+\r
     }\r
   }\r
-  \r
-//  class null implements OneNetApiCallback {\r
-//    null() {}\r
-//\r
-//    public void onFailed(Exception param1Exception) {\r
-//      UpLoadDataPoints.access$002(this.this$1.this$0, false);\r
-//      UpLoadDataPoints.access$102(this.this$1.this$0, 0);\r
-//    }\r
-//\r
-//    public void onSuccess(String param1String) {\r
-//      try {\r
-//        int i = (new JSONObject(param1String)).optInt("errno");\r
-//        if (i != 0) {\r
-//          StringBuilder stringBuilder = new StringBuilder();\r
-//          stringBuilder.append("error : ");\r
-//          stringBuilder.append(i);\r
-//          Logger.i(stringBuilder.toString());\r
-//          UpLoadDataPoints.access$002(this.this$1.this$0, false);\r
-//          return;\r
-//        }\r
-//        UpLoadDataPoints.access$002(this.this$1.this$0, true);\r
-//        return;\r
-//      } catch (JSONException param1String) {\r
-//        param1String.printStackTrace();\r
-//        UpLoadDataPoints.access$002(this.this$1.this$0, false);\r
-//        return;\r
-//      }\r
-//    }\r
-//  }\r
+\r
   \r
   private static class UploadLocationsTask implements Runnable {\r
     private String mDeviceID;\r
     \r
-    private List<Locations> mLocations;\r
+    private List<ICLocation.GPS_LocationPoint> mLocations;\r
     \r
-    UploadLocationsTask(List<Locations> param1List, String param1String) {\r
+    UploadLocationsTask(List<ICLocation.GPS_LocationPoint> param1List, String param1String) {\r
       this.mLocations = param1List;\r
       this.mDeviceID = param1String;\r
     }\r
     \r
     public void run() {\r
-//      JSONObject jSONObject1 = new JSONObject();\r
-//      JSONArray jSONArray1 = new JSONArray();\r
-//      JSONObject jSONObject2 = new JSONObject();\r
-//      JSONArray jSONArray2 = new JSONArray();\r
-//      try {\r
-//        for (Locations locations : this.mLocations) {\r
-//          JSONObject jSONObject3 = new JSONObject();\r
-//          jSONObject3.put("lon", locations.getLon());\r
-//          jSONObject3.put("lat", locations.getLat());\r
-//          JSONObject jSONObject4 = new JSONObject();\r
-//          jSONObject4.put("at", locations.getTime());\r
-//          jSONObject4.put("value", jSONObject3);\r
-//          jSONArray2.put(jSONObject4);\r
-//        }\r
-//        jSONObject2.put("id", "locations");\r
-//        jSONObject2.put("datapoints", jSONArray2);\r
-//        jSONArray1.put(jSONObject2);\r
-//        jSONObject1.put("datastreams", jSONArray1);\r
-//      } catch (JSONException e) {\r
-//        e.printStackTrace();\r
-//      }\r
-//      OneNetApiCallback oneNetApiCallback = new OneNetApiCallback() {\r
-//          public void onFailed(Exception param2Exception) { Logger.i(param2Exception.getMessage()); }\r
-//\r
-//          public void onSuccess(String param2String) {\r
-//            StringBuilder stringBuilder = new StringBuilder();\r
-//            stringBuilder.append("upload location response : ");\r
-//            stringBuilder.append(param2String);\r
-//            Logger.i(stringBuilder.toString());\r
-//            try {\r
-//              int i = (new JSONObject(param2String)).optInt("errno");\r
-//              if (i != 0) {\r
-//                StringBuilder stringBuilder1 = new StringBuilder();\r
-//                stringBuilder1.append("error : ");\r
-//                stringBuilder1.append(i);\r
-//                Logger.i(stringBuilder1.toString());\r
-//                return;\r
-//              }\r
-//            } catch (JSONException param2String) {\r
-//              param2String.printStackTrace();\r
-//            }\r
-//          }\r
-//        };\r
-//      OneNetApi.addDataPoints(this.mDeviceID, jSONObject1.toString(), oneNetApiCallback);\r
+\r
+\r
     }\r
   }\r
 \r
index 945724e..8686e7e 100644 (file)
@@ -26,6 +26,7 @@ import com.ic.protocol.adapter.LBSHelper;
 import com.ic.protocol.adapter.protocolAPIHelper;\r
 import com.ic.protocol.bean.Runtime;\r
 import com.ic.protocol.bean.StringMessage;\r
+import com.ic.protocol.bean.heartRateStatus;\r
 import com.ic.protocol.service.base.AbstractConnectionService;\r
 import com.ic.protocol.service.base.AbstractInvokeHandlerService;\r
 import com.ic.protocol.utils.AlarmHelper;\r
@@ -60,6 +61,7 @@ import java.util.TimerTask;
 import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;\r
 import static com.ic.protocol.Constants.ACTION_ALARM_ADD_DATAPOINTS;\r
 import static com.ic.protocol.Constants.ACTION_EQC_ALARM;\r
+import static com.ic.protocol.Constants.ACTION_HEATR_RATE_START;\r
 import static com.ic.protocol.Constants.ACTION_LOCATION_ALARM;\r
 import static com.ic.protocol.Constants.HEART_ALARM;\r
 import static com.ic.protocol.Constants.SLEEP_ALARM;\r
@@ -122,21 +124,19 @@ public class protocolMainServer extends Service {
                         stringBuilder1.append(Integer.valueOf(str, 16));\r
                         stringBuilder1.append(",CELLID=");\r
                         stringBuilder1.append(Integer.valueOf(str1, 16));\r
-                        FileOutputUtil.fileOutput(context, "cellInfoTest", stringBuilder1.toString());\r
+                        FileOutputUtil.fileOutput(runtime.getCacheDir(), "cellInfoTest", stringBuilder1.toString());\r
                     }\r
                 }\r
             }\r
         }\r
     };\r
 \r
-    private String actionName = "com.cmcm.interface";\r
-\r
     private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {\r
         public void onReceive(Context param1Context, Intent param1Intent) {\r
             StringBuilder stringBuilder2 = new StringBuilder();\r
             stringBuilder2.append("broadcastReceiver  alarmCycle action==");\r
             stringBuilder2.append(param1Intent.getAction());\r
-            FileOutputUtil.fileOutput(param1Context, "alarmCycle", stringBuilder2.toString());\r
+            FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", stringBuilder2.toString());\r
             StringBuilder stringBuilder1 = new StringBuilder();\r
             stringBuilder1.append("时间变化");\r
             stringBuilder1.append(param1Intent.getAction());\r
@@ -144,6 +144,7 @@ public class protocolMainServer extends Service {
             protocolMainServer.this.setSleepAlarm();\r
             protocolMainServer.this.setWakeAlarm();\r
             protocolMainServer.this.setHeartAlarm();\r
+            protocolMainServer.this.setHeartRateDetectAlarm(3);\r
             protocolMainServer.this.setWeatherAlarm();\r
             protocolMainServer.this.setLocationAlarm(runtime.getLocationInstance().getWorkingMod());\r
             if (protocolMainServer.this.cmcm_call_eiot_into_powersave_mode() == 0)\r
@@ -207,7 +208,6 @@ public class protocolMainServer extends Service {
 \r
     final Messenger mMessenger = new Messenger(new RequestHandler(this));\r
 \r
-//    private SendPairMessage mSendPairMessage;\r
 \r
     private SimSignalUtil mSignalUtil;\r
 \r
@@ -224,8 +224,7 @@ public class protocolMainServer extends Service {
                 stringBuilder.append(is_wifi_network_ok);\r
                 Logger.i(stringBuilder.toString());\r
                 if (is_in_sleep_mode) {\r
-//                    CoreService.access$402(false);\r
-//                    CoreService.access$502(0);\r
+\r
                     /*屏幕亮起时,如果在sleep模式,则唤醒各个进程*/\r
                     protocolMainServer.is_in_sleep_mode=false;\r
                     protocolMainServer.is_allowed_in_sleep_mode=0;\r
@@ -234,13 +233,13 @@ public class protocolMainServer extends Service {
                     protocolMainServer.this.wakeUpFromSleep();\r
                 }\r
                 if (is_wifi_network_ok) {\r
-//                    CoreService.access$302(false);\r
+\r
                     /*屏幕亮起时,如果wifi开启,则开启wifi*/\r
                     protocolMainServer.is_in_sleep_mode=false;\r
                     Util.turnOnWifiForConnect((protocolMainServer.this.runtime.getContextProxy()).context, protocolMainServer.this.runtime);\r
                 }\r
             } else if ("android.intent.action.SCREEN_OFF".equals(param1Intent.getAction()) && Util.isWifiIsOpen((protocolMainServer.this.runtime.getContextProxy()).context, protocolMainServer.this.runtime)) {\r
-//                CoreService.access$302(true);\r
+\r
                 protocolMainServer.is_in_sleep_mode=true;\r
                 Util.turnOffWifiForSleep((protocolMainServer.this.runtime.getContextProxy()).context, protocolMainServer.this.runtime);\r
             }\r
@@ -251,24 +250,15 @@ public class protocolMainServer extends Service {
 \r
     UpLoadDataPoints upLoadDataPoints;\r
 \r
-    static  {\r
-\r
-    }\r
 \r
     private AbstractConnectionService getConnectionServiceChain() {\r
-//        DNS dNS = new DNS();\r
-//        SynchronousTime synchronousTime = new SynchronousTime();\r
-//        new ProcessEncryptionService();\r
         Initialize initialize = new Initialize();\r
         CheckSIM checkSIM = new CheckSIM();\r
         this.mKeepAlive = new KeepAlive();\r
         this.mDeliver = new Deliver();\r
-//        dNS.setNext(synchronousTime);\r
-//        initialize.setNext(synchronousTime);\r
         initialize.setNext(checkSIM);\r
         checkSIM.setNext(this.mKeepAlive);\r
         this.mKeepAlive.setNext(this.mDeliver);\r
-\r
         return initialize;\r
     }\r
 \r
@@ -280,14 +270,12 @@ public class protocolMainServer extends Service {
     }\r
 \r
     private AbstractInvokeHandlerService getInvokeHandlerServiceChain() {\r
+        Logger.i("getInvokeHandlerServiceChain");\r
         SendChatMessage sendChatMessage = new SendChatMessage();\r
-//        this.mSendPairMessage = new SendPairMessage();\r
-//        OtherBusiness otherBusiness = new OtherBusiness();\r
-//        SendOssMessage sendOssMessage = new SendOssMessage();\r
+        HeartRateManager heartRateManager= new HeartRateManager(this.runtime,this.connection);\r
         SilentManager silentManager = new SilentManager();\r
-        Logger.i("BuildConfig.upLoadData=false");\r
-//        this.justTalkLogin = new JustTalkLogin();\r
-        sendChatMessage.setNext(silentManager);\r
+        sendChatMessage.setNext(heartRateManager);\r
+        heartRateManager.setNext(silentManager);\r
         return sendChatMessage;\r
     }\r
 \r
@@ -362,35 +350,6 @@ public class protocolMainServer extends Service {
 \r
     public int cmcm_call_eiot_into_powersave_mode() { return 0; }\r
 \r
-    public void deliverDataToCmApp(int paramInt, String paramString) {\r
-//        if (paramInt != 500)\r
-//            try {\r
-//                Intent intent = new Intent(this.actionName);\r
-//                intent.putExtra("comjson", paramString);\r
-//                intent.putExtra("cmdId", paramInt);\r
-//                (this.runtime.getContextProxy()).context.startService(intent);\r
-//                return;\r
-//            } catch (Exception e) {\r
-//                e.printStackTrace();\r
-//                return;\r
-//            }\r
-//        try {\r
-//            StringBuilder stringBuilder = new StringBuilder();\r
-//            stringBuilder.append("deliver 1  cmd=");\r
-//            stringBuilder.append(paramInt);\r
-//            stringBuilder.append("---data=");\r
-//            stringBuilder.append(paramString);\r
-//            Logger.i(stringBuilder.toString());\r
-//            Intent intent = new Intent(this.actionName);\r
-//            intent.putExtra("comjson", paramString);\r
-//            intent.putExtra("cmdId", 999);\r
-//            (this.runtime.getContextProxy()).context.startService(intent);\r
-//            return;\r
-//        } catch (Exception e) {\r
-//            e.printStackTrace();\r
-//            return;\r
-//        }\r
-    }\r
 \r
     public PowerManager.WakeLock getWakeLock(int paramInt) {\r
          PowerManager.WakeLock wakeLock = ((PowerManager)(this.runtime.getContextProxy()).context.getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");\r
@@ -399,7 +358,11 @@ public class protocolMainServer extends Service {
         return wakeLock;\r
     }\r
 \r
-    public IBinder onBind(Intent paramIntent) { return this.mMessenger.getBinder(); }\r
+    public IBinder onBind(Intent paramIntent) {\r
+        return this.mMessenger.getBinder();\r
+    }\r
+\r
+\r
 \r
     public Runtime getRuntime(){\r
         return runtime;\r
@@ -418,6 +381,7 @@ public class protocolMainServer extends Service {
         this.runtime.setContextProxy(new ContextProxy(this));\r
         this.runtime.setLbsHelper(new LBSHelper(this,this.runtime.getContextProxy().getWifiManager(), this.runtime));\r
         this.runtime.setImeiAndCid(PhoneUtils.getIMEI(this),"");\r
+        this.runtime.setHRS(new heartRateStatus());\r
         this.connectionServiceChain = getConnectionServiceChain();\r
         this.invokeHandlerServiceChain = getInvokeHandlerServiceChain();\r
         if (cmcm_call_eiot_into_powersave_mode() == 1) {\r
@@ -427,7 +391,7 @@ public class protocolMainServer extends Service {
         this.connectionServiceChain.processAttach(this.connection, this.runtime);\r
         this.invokeHandlerServiceChain.processAttach(this.connection, this.runtime);\r
         setAlarm(alarmCycle);\r
-        FileOutputUtil.fileOutput(this, "alarmCycle", "设置闹钟服务  alarmCycle");\r
+        FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", "设置闹钟服务  alarmCycle");\r
         this.locationClient = new LocationClient(this.connection, this.runtime);\r
         this.connection.open();\r
         this.connection.connect(this.runtime.getSrvIP(), this.runtime.getPort());\r
@@ -484,6 +448,9 @@ public class protocolMainServer extends Service {
         //网络协议心跳时间\r
         setHeartAlarm();\r
 \r
+        //设置心率检测频率\r
+        setHeartRateDetectAlarm(3); //3分钟一次\r
+\r
         //获取天气时间\r
         setWeatherAlarm();\r
 \r
@@ -527,7 +494,7 @@ public class protocolMainServer extends Service {
                     Util.turnOffWifiForSleep((this.runtime.getContextProxy()).context, this.runtime);\r
                 }\r
                 setAlarm(alarmCycle);\r
-                FileOutputUtil.fileOutput(this, "alarmCycle", "ALARM alarmCycle");\r
+                FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", "ALARM alarmCycle");\r
 \r
                 //发送心跳间隔广播给其他应用\r
                 this.runtime.getContextProxy().sendBroadcast(ACTION_EQC_ALARM, this.runtime);\r
@@ -544,7 +511,7 @@ public class protocolMainServer extends Service {
                 if (Constants.SLEEP_ALARM.equals(paramIntent.getAction())) {\r
                     Logger.i("SLEEP_ALARM");\r
                     is_allowed_in_sleep_mode = 1;\r
-                    FileOutputUtil.fileOutput(this, "alarmCycle", "SLEEP_ALARM  alarmCycle");\r
+                    FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", "SLEEP_ALARM  alarmCycle");\r
                     setSleepAlarm();\r
                     boolean bool = ((PowerManager)getSystemService(POWER_SERVICE)).isScreenOn();\r
                     stringBuilder1 = new StringBuilder();\r
@@ -562,7 +529,7 @@ public class protocolMainServer extends Service {
                     if (Constants.WAKE_ALARM.equals(paramIntent.getAction())) {\r
                         if (is_in_sleep_mode) {\r
                             is_in_sleep_mode = false;\r
-                            FileOutputUtil.fileOutput(this, "alarmCycle", "WAKE_ALARM  alarmCycle");\r
+                            FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", "WAKE_ALARM  alarmCycle");\r
                             if (this.mKeepAlive != null)\r
                                 this.mKeepAlive.setSleepMode(false);\r
                             wakeUpFromSleep();\r
@@ -575,7 +542,7 @@ public class protocolMainServer extends Service {
                         if (this.mKeepAlive != null) {\r
                             this.mKeepAlive.onHeartAlarm(this.connection, this.runtime);\r
                             setHeartAlarm();\r
-                            FileOutputUtil.fileOutput(this, "alarmCycle", "HEART_ALARM alarmCycle  " );\r
+                            FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", "HEART_ALARM alarmCycle  " );\r
                             return Service.START_STICKY;\r
                         }\r
                     } else {\r
@@ -601,7 +568,7 @@ public class protocolMainServer extends Service {
                             stringBuilder1 = new StringBuilder();\r
                             stringBuilder1.append("STWORKMODE_ALARM  alarmCycle=");\r
                             stringBuilder1.append(alarmCycle);\r
-                            FileOutputUtil.fileOutput(this, "alarmCycle", stringBuilder1.toString());\r
+                            FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", stringBuilder1.toString());\r
                             return Service.START_STICKY;\r
                         }\r
                         if (ACTION_LOCATION_ALARM.equals(paramIntent.getAction())){\r
@@ -609,41 +576,14 @@ public class protocolMainServer extends Service {
                             stringBuilder1 = new StringBuilder();\r
                             stringBuilder1.append("LOCATION_ALARM  work mod=");\r
                             stringBuilder1.append(runtime.getLocationInstance().getWorkingMod());\r
-                            FileOutputUtil.fileOutput(this, "alarmCycle", stringBuilder1.toString());\r
+                            FileOutputUtil.fileOutput(runtime.getCacheDir(), "alarmCycle", stringBuilder1.toString());\r
                             this.locationClient.triggerLocationProcess();\r
                             return Service.START_STICKY;\r
 \r
                         }\r
-\r
-//                        if (Constants.ACTION_PASS_DATA_TO_CM_SERVICES.equals(paramIntent.getAction())) {\r
-//                            deliverDataToCmApp(paramIntent.getIntExtra("cmdId", 0), paramIntent.getStringExtra("cmdJsonData"));\r
-//                            return Service.START_STICKY;\r
-//                        }\r
-//                        if ("com.enqualcomm.support.MONITOR_EXIT".equals(paramIntent.getAction())) {\r
-//                            deliverDataToCmApp(203, null);\r
-//                            return Service.START_STICKY;\r
-//                        }\r
-//                        if ("cmcm.call.eiot.into.powersave".equals(paramIntent.getAction())) {\r
-//                            if (cmcm_call_eiot_into_powersave_mode() == 1) {\r
-//                                Logger.i("3 into powersave return");\r
-//                                return Service.START_STICKY;\r
-//                            }\r
-//                            if (cmcm_call_eiot_into_powersave_mode() == 2) {\r
-//                                Logger.i("1 out powersave");\r
-//                                wakeUpFromSleep();\r
-//                                return Service.START_STICKY;\r
-//                            }\r
-//                        } else {\r
-//                            if (cmcm_call_eiot_into_powersave_mode() == 1) {\r
-//                                Logger.i("4 into powersave return");\r
-//                                return Service.START_STICKY;\r
-//                            }\r
-//                            if (cmcm_call_eiot_into_powersave_mode() == 2) {\r
-//                                Logger.i("2 out powersave");\r
-//                                wakeUpFromSleep();\r
-//                            }\r
-//                            this.invokeHandlerServiceChain.processUserRequest(paramIntent, this.connection, this.runtime);\r
-//                        }\r
+                        if(ACTION_HEATR_RATE_START.equals(paramIntent.getAction())){\r
+                            this.invokeHandlerServiceChain.processUserRequest(paramIntent, this.connection, this.runtime);\r
+                        }\r
                     }\r
                 }\r
             }\r
@@ -678,6 +618,9 @@ public class protocolMainServer extends Service {
         AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,paramInt,ACTION_ALARM);\r
     }\r
 \r
+    public void setHeartRateDetectAlarm(int heartRateDetectAlarmCycle){\r
+        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,heartRateDetectAlarmCycle,ACTION_HEATR_RATE_START);\r
+    }\r
     public void setLocationAlarm(int mod) {\r
 //        int mod=runtime.getLocationInstance().getWorkingMod();\r
         StringBuilder sb=new StringBuilder();\r
@@ -700,7 +643,7 @@ public class protocolMainServer extends Service {
         locationClient.triggerLocationProcess();\r
 \r
         Logger.i(sb.toString());\r
-        FileOutputUtil.fileOutput(runtime.getContextProxy().context,"LocationAlarm",sb.toString());\r
+        FileOutputUtil.fileOutput(runtime.getCacheDir(),"LocationAlarm",sb.toString());\r
     }\r
 \r
     public void setHeartAlarm(){\r
@@ -724,7 +667,7 @@ public class protocolMainServer extends Service {
 \r
 //        locationClient.triggerLocationProcess();\r
         Logger.i(sb.toString());\r
-        FileOutputUtil.fileOutput(runtime.getContextProxy().context,"HeartAlarm",sb.toString());\r
+        FileOutputUtil.fileOutput(runtime.getCacheDir(),"HeartAlarm",sb.toString());\r
 \r
 //        AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,1, HEART_ALARM);\r
     }\r
@@ -758,7 +701,9 @@ public class protocolMainServer extends Service {
     private static class RequestHandler extends Handler {\r
         private final WeakReference<protocolMainServer> mReference;\r
 \r
-        RequestHandler(protocolMainServer param1CoreService) { this.mReference = new WeakReference(param1CoreService); }\r
+        RequestHandler(protocolMainServer param1CoreService) {\r
+            this.mReference = new WeakReference(param1CoreService);\r
+        }\r
 \r
         public void handleMessage(Message param1Message) {\r
             protocolMainServer coreService = (protocolMainServer)this.mReference.get();\r
index 56b8713..40c4552 100644 (file)
@@ -20,14 +20,14 @@ public class AlarmWakeUp {
       ComponentName componentName = new ComponentName("com.ic.protocol", "com.ic.protocol.service.protocolMainServer");\r
       Intent intent = (new Intent(protocolMainServer.ACTION_ALARM)).setComponent(componentName);\r
       (dev.getContextProxy()).context.startService(intent);\r
-      Context context = (dev.getContextProxy()).context;\r
+\r
       StringBuilder stringBuilder = new StringBuilder();\r
       stringBuilder.append("currentTimeMillis=");\r
       stringBuilder.append(l);\r
       stringBuilder.append("---lastAlarmTime=");\r
       stringBuilder.append(lastAlarmTime);\r
       Logger.i("AlarmWakeUp "+ stringBuilder.toString());\r
-      FileOutputUtil.fileOutput(context, "alarmWakeUp", stringBuilder.toString());\r
+      FileOutputUtil.fileOutput(dev.getCacheDir(), "alarmWakeUp", stringBuilder.toString());\r
     } \r
   }\r
   \r
index baf63a3..2ec2268 100644 (file)
@@ -20,7 +20,7 @@ public class BatteryUtil {
           }\r
           int i = param1Intent.getIntExtra("level", 0) * 100 / param1Intent.getIntExtra("scale", 100);\r
 \r
-          FileOutputUtil.fileOutput(param1Context,"Battery","BatteryLevel "+i);\r
+          FileOutputUtil.fileOutput(mRuntime.getCacheDir(),"Battery","BatteryLevel "+i);\r
           if (i >= 100) {\r
             Runtime runtime = BatteryUtil.this.mRuntime;\r
             StringBuffer stringBuffer = BatteryUtil.this.mBuffer;\r
index 1702317..2843cb5 100644 (file)
@@ -106,7 +106,7 @@ public class CellInfoUtil {
 //                EqcAlgorithmNative.native_EqcAlgorithmMethod4(0, 0, CellInfoUtil.BSSS, CellInfoUtil.MCC, CellInfoUtil.MNC, CellInfoUtil.LAC, CellInfoUtil.CELL_ID);\r
                   mRuntime.cellinfo = mCellInfo;\r
                 }\r
-                FileOutputUtil.fileOutput((mRuntime.getContextProxy()).context, "onCellLocationChanged", mCellInfo);\r
+                FileOutputUtil.fileOutput(mRuntime.getCacheDir(),"onCellLocationChanged", mCellInfo);\r
                 CellInfoUtil.releaseWakeLock(mWakeLock);\r
                 Logger.i(" setCurrentAttachCellInfo " + mCellInfo);\r
 \r
@@ -132,7 +132,7 @@ public class CellInfoUtil {
                 stringBuilder.append(CellInfoUtil.BSSS);\r
                 runtime.cellinfo = stringBuilder.toString();\r
 //              EqcAlgorithmNative.native_EqcAlgorithmMethod4(1, 0, CellInfoUtil.BSSS, CellInfoUtil.MCC, CellInfoUtil.MNC, CellInfoUtil.LAC, CellInfoUtil.CELL_ID);\r
-                FileOutputUtil.fileOutput((mRuntime.getContextProxy()).context, "onCellLocationChanged", mRuntime.cellinfo);\r
+                FileOutputUtil.fileOutput(mRuntime.getCacheDir(), "onCellLocationChanged", mRuntime.cellinfo);\r
                 CellInfoUtil.releaseWakeLock(mWakeLock);\r
                 Logger.i(" setCurrentAttachCellInfo " + mCellInfo);\r
 \r
index 052302c..7830f1a 100644 (file)
@@ -6,67 +6,97 @@ import java.io.File;
 import java.io.FileInputStream;\r
 import java.io.FileNotFoundException;\r
 import java.io.FileOutputStream;\r
+import java.io.InputStream;\r
 import java.io.PrintStream;\r
 \r
 public class FileOutputUtil {\r
-  public static void copyFolder(String dirsrc, String dirdst) {\r
+\r
+\r
+  /**\r
+   * 复制单个文件\r
+   * @param oldPath String 原文件路径 如:c:/fqf.txt\r
+   * @param newPath String 复制后路径 如:f:/fqf.txt\r
+   * @return boolean\r
+   */\r
+  public static void copyFile(String oldPath, String newPath) {\r
     try {\r
-      (new File(dirdst)).mkdirs();\r
-      String[] arrayOfString = (new File(dirsrc)).list();\r
-      for (byte b = 0; b < arrayOfString.length; b++) {\r
-        File file;\r
-        if (dirsrc.endsWith(File.separator)) {\r
-          StringBuilder stringBuilder = new StringBuilder();\r
-          stringBuilder.append(dirsrc);\r
-          stringBuilder.append(arrayOfString[b]);\r
-          file = new File(stringBuilder.toString());\r
-        } else {\r
-          StringBuilder stringBuilder = new StringBuilder();\r
-          stringBuilder.append(dirsrc);\r
-          stringBuilder.append(File.separator);\r
-          stringBuilder.append(arrayOfString[b]);\r
-          file = new File(stringBuilder.toString());\r
-        } \r
-        if (file.isFile()) {\r
-          FileInputStream fileInputStream = new FileInputStream(file);\r
-          StringBuilder stringBuilder = new StringBuilder();\r
-          stringBuilder.append(dirdst);\r
-          stringBuilder.append("/");\r
-          stringBuilder.append(file.getName().toString());\r
-          FileOutputStream fileOutputStream = new FileOutputStream(stringBuilder.toString());\r
-          byte[] arrayOfByte = new byte[5120];\r
-          while (true) {\r
-            int i = fileInputStream.read(arrayOfByte);\r
-            if (i != -1) {\r
-              fileOutputStream.write(arrayOfByte, 0, i);\r
-              continue;\r
-            } \r
-            break;\r
-          } \r
-          fileOutputStream.flush();\r
-          fileOutputStream.close();\r
-          fileInputStream.close();\r
-        } \r
-        if (file.isDirectory()) {\r
-          StringBuilder stringBuilder1 = new StringBuilder();\r
-          stringBuilder1.append(dirsrc);\r
-          stringBuilder1.append("/");\r
-          stringBuilder1.append(arrayOfString[b]);\r
-          String str = stringBuilder1.toString();\r
-          StringBuilder stringBuilder2 = new StringBuilder();\r
-          stringBuilder2.append(dirdst);\r
-          stringBuilder2.append("/");\r
-          stringBuilder2.append(arrayOfString[b]);\r
-          copyFolder(str, stringBuilder2.toString());\r
-        } \r
-      } \r
-    } catch (Exception e) {\r
+      int bytesum = 0;\r
+      int byteread = 0;\r
+      File oldfile = new File(oldPath);\r
+      if (oldfile.exists()) { //文件存在时\r
+        InputStream inStream = new FileInputStream(oldPath); //读入原文件\r
+        FileOutputStream fs = new FileOutputStream(newPath);\r
+        byte[] buffer = new byte[1444];\r
+        int length;\r
+        while ( (byteread = inStream.read(buffer)) != -1) {\r
+          bytesum += byteread; //字节数 文件大小\r
+          System.out.println(bytesum);\r
+          fs.write(buffer, 0, byteread);\r
+        }\r
+        inStream.close();\r
+      }\r
+    }\r
+    catch (Exception e) {\r
+      System.out.println("复制单个文件操作出错");\r
+      e.printStackTrace();\r
+\r
+    }\r
+\r
+  }\r
+\r
+  /**\r
+   * 复制整个文件夹内容\r
+   * @param oldPath String 原文件路径 如:c:/fqf\r
+   * @param newPath String 复制后路径 如:f:/fqf/ff\r
+   * @return boolean\r
+   */\r
+  public static void copyFolder(String oldPath, String newPath) {\r
+\r
+    try {\r
+      File dstdir=new File(newPath);\r
+      if (!dstdir.exists()) {\r
+        dstdir.mkdirs();//如果文件夹不存在 则建立新文件夹\r
+      }\r
+      File a=new File(oldPath);\r
+      String[] file=a.list();\r
+      File temp=null;\r
+      for (int i = 0; i < file.length; i++) {\r
+        if(oldPath.endsWith(File.separator)){\r
+          temp=new File(oldPath+file[i]);\r
+        }\r
+        else{\r
+          temp=new File(oldPath+File.separator+file[i]);\r
+        }\r
+\r
+        if(temp.isFile()){\r
+          FileInputStream input = new FileInputStream(temp);\r
+          FileOutputStream output = new FileOutputStream(newPath + "/" +\r
+                  (temp.getName()).toString());\r
+          byte[] b = new byte[1024 * 5];\r
+          int len;\r
+          while ( (len = input.read(b)) != -1) {\r
+            output.write(b, 0, len);\r
+          }\r
+          output.flush();\r
+          output.close();\r
+          input.close();\r
+        }\r
+        if(temp.isDirectory()){//如果是子文件夹\r
+          copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);\r
+        }\r
+      }\r
+    }\r
+    catch (Exception e) {\r
       System.out.println("复制整个文件夹内容操作出错");\r
       e.printStackTrace();\r
-    } \r
+\r
+    }\r
+\r
   }\r
   \r
-  public static void deleteDir(Context paramContext) { deleteDirWihtFile(new File(String.valueOf(paramContext.getExternalCacheDir()))); }\r
+  public static void deleteDir(Context paramContext) {\r
+    deleteDirWihtFile(new File(String.valueOf(paramContext.getExternalCacheDir())));\r
+  }\r
   \r
   private static void deleteDirWihtFile(File paramFile) {\r
     if (paramFile != null)\r
@@ -89,9 +119,9 @@ public class FileOutputUtil {
       }  \r
   }\r
   \r
-  public static void fileOutput(Context paramContext, String filename, String msg) {\r
+  public static void fileOutput(File dir, String filename, String msg) {\r
     String str = TimeUtil.getSystemTime();\r
-    File dir = paramContext.getExternalCacheDir();\r
+\r
     StringBuilder stringBuilder = new StringBuilder();\r
     stringBuilder.append(filename);\r
     stringBuilder.append(".txt");\r
index fa62e72..934036b 100644 (file)
@@ -69,7 +69,7 @@ public class Logger {
     if (DEBUG) {\r
       Log.e(TAG, msg);\r
       if (protocolMainServer.getInstance()!=null)\r
-          FileOutputUtil.fileOutput(protocolMainServer.getInstance().getApplicationContext(),"log",TAG + " "+ msg);\r
+          FileOutputUtil.fileOutput(protocolMainServer.getInstance().getRuntime().getCacheDir(),"log",TAG + " "+ msg);\r
     }\r
 \r
 \r
@@ -79,7 +79,7 @@ public class Logger {
     if (DEBUG) {\r
       Log.e(TAG, "[" + funcName + "]" + msg);\r
       if (protocolMainServer.getInstance()!=null)\r
-        FileOutputUtil.fileOutput(protocolMainServer.getInstance().getApplicationContext(),"log",TAG + " "+ "[" + funcName + "]" + msg);\r
+        FileOutputUtil.fileOutput(protocolMainServer.getInstance().getRuntime().getCacheDir(),"log",TAG + " "+ "[" + funcName + "]" + msg);\r
     }\r
   }\r
 }\r
index 7c8fed9..1d44fc0 100644 (file)
@@ -10,6 +10,7 @@ import android.os.SystemClock;
 import com.ic.protocol.LocationClient;\r
 import com.ic.protocol.adapter.protocolAPIHelper;\r
 import com.ic.protocol.bean.StringMessage;\r
+import com.ic.protocol.service.HeartRateManager;\r
 import com.ic.protocol.service.protocolMainServer;\r
 \r
 import java.io.UnsupportedEncodingException;\r
@@ -45,10 +46,11 @@ public class NettyConnection implements Connection {
                 @Override\r
                 public boolean handleCmd(protocolAPIHelper.CMD_TYPE type, String cmd) {\r
 \r
+                    //普通非二进制命令用此函数处理\r
                         Runtime runtime=protocolMainServer.getInstance().getRuntime();\r
                         boolean ret=true;\r
                         Logger.i("handleCmd "+type.name() + " strLen="+cmd.length());\r
-                        FileOutputUtil.fileOutput(protocolMainServer.getInstance().getApplicationContext(),"APILog", " recv " + cmd);\r
+                        FileOutputUtil.fileOutput(protocolMainServer.getInstance().getRuntime().getCacheDir(),"APILog", " recv " + cmd);\r
                         switch (type){\r
                             case BP00:\r
                                 API.handleBP00(cmd);\r
@@ -65,12 +67,6 @@ public class NettyConnection implements Connection {
                                 DeliverCMDMessageToSystem("BP03",cmd);//通知下面线程状态变化\r
 \r
                                 break;\r
-//                            case BP28:\r
-//                                 API.handleBP28(NettyConnection.this ,cmd);\r
-//                                Logger.i("服务器收到语音BP28");\r
-//                                DeliverCMDMessageToSystem("BP28",cmd);//通知下面线程状态变化\r
-//\r
-//                                break;\r
                             case BPTM:\r
 //                                API.handleBPTM(cmd);\r
                                 Logger.i("服务器收到校时命令APTM");\r
@@ -130,6 +126,21 @@ public class NettyConnection implements Connection {
                                 Logger.i("收到服务器关机命令BP31");\r
                                 DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化\r
                                 break;\r
+\r
+                            case BPXL:\r
+                                API.handleBPXL(cmd,NettyConnection.this);\r
+                                Logger.i("收到服务器心率检测命令");\r
+                                HeartRateManager.triggerPPGtest();\r
+                                break;\r
+                            case BPXY:\r
+                                API.handleBPXY(cmd,NettyConnection.this);\r
+                                Logger.i("收到服务器血压检测命令");\r
+                                HeartRateManager.triggerPPGtest();\r
+                                break;\r
+                            case BPJZ:\r
+                                API.handleBPJZ(cmd,NettyConnection.this,runtime);\r
+                                Logger.i("收到服务器血压校准命令");\r
+\r
                         }\r
 \r
                         return ret;\r
@@ -139,9 +150,10 @@ public class NettyConnection implements Connection {
                 @Override\r
                 public boolean handleCmd(protocolAPIHelper.CMD_TYPE type, String cmd, byte[] bytes) {\r
 \r
+                    //只有需要传递二级制数据的才需要这个函数,目前只有BP28需要\r
                     boolean ret=true;\r
                     Logger.i("handleCmd "+type.name() + " "+cmd+" bytelen="+bytes.length );\r
-                    FileOutputUtil.fileOutput(protocolMainServer.getInstance().getApplicationContext(),"APILog", " recv " +new String(bytes));\r
+                    FileOutputUtil.fileOutput(protocolMainServer.getInstance().getRuntime().getCacheDir(),"APILog", " recv " +new String(bytes));\r
                     switch (type) {\r
                         case BP28:\r
                             API.handleBP28(NettyConnection.this,cmd, bytes);\r
@@ -255,7 +267,7 @@ public class NettyConnection implements Connection {
     if (!isServerConnected()){\r
 \r
         log("skiped"+cmd);\r
-        FileOutputUtil.fileOutput(protocolMainServer.getInstance().getApplicationContext(),"APILog"," skiped " + cmd);\r
+        FileOutputUtil.fileOutput(protocolMainServer.getInstance().getRuntime().getCacheDir(),"APILog"," skiped " + cmd);\r
         return false;\r
     }else{\r
         log("send  "+cmd);\r
@@ -276,7 +288,7 @@ public class NettyConnection implements Connection {
                         }\r
                 );\r
 \r
-        FileOutputUtil.fileOutput(protocolMainServer.getInstance().getApplicationContext(),"APILog"," sent " + cmd);\r
+        FileOutputUtil.fileOutput(protocolMainServer.getInstance().getRuntime().getCacheDir(),"APILog"," sent " + cmd);\r
 \r
     }\r
 \r
index b9a614b..e2c0903 100644 (file)
@@ -20,6 +20,7 @@ import android.view.View;
 import com.ic.protocol.R;\r
 import com.ic.protocol.bean.Contact;\r
 import com.ic.protocol.service.AudioService;\r
+import com.ic.protocol.service.HeartRateManager;\r
 \r
 import java.util.concurrent.TimeUnit;\r
 \r
@@ -30,6 +31,7 @@ import rx.schedulers.Schedulers;
 \r
 import static android.os.PowerManager.ACQUIRE_CAUSES_WAKEUP;\r
 import static android.os.PowerManager.SCREEN_DIM_WAKE_LOCK;\r
+import static com.ic.protocol.Constants.ACTION_HEATR_RATE_START;\r
 \r
 public class ProcessReceiver extends BroadcastReceiver {\r
   private static final int MICRO_CHAT = 2;\r
@@ -319,7 +321,8 @@ public class ProcessReceiver extends BroadcastReceiver {
     this.mNotificationManager = (NotificationManager)paramContext.getSystemService(Context.NOTIFICATION_SERVICE);\r
     this.mNotificationManager.notify(1, notification);\r
   }\r
-  \r
+\r
+  @Override\r
   public void onReceive(Context paramContext, Intent paramIntent) {\r
     Contact contact;\r
     String str = paramIntent.getAction();\r
@@ -336,18 +339,11 @@ public class ProcessReceiver extends BroadcastReceiver {
       SharPreferenceUtil.setPrefBoolean(paramContext, "key_is_resume", paramIntent.getBooleanExtra("is_resume", false));\r
       return;\r
     }\r
-    if ("com.enqualcomm.support.DIALOG".equals(str)) {\r
-      contact = (Contact)paramIntent.getParcelableExtra("contact");\r
-      SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);\r
-      boolean bool = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);\r
-//      if (contact != null && !bool) {\r
-//        if (!DeviceInfoUtil.isTopActivity(paramContext)) {\r
-//          initMyDialog(paramContext, contact, 1);\r
-//          playNotificationVoice(paramContext);\r
-//        }\r
-//        screenOn(paramContext);\r
-//        return;\r
-//      }\r
+    if (ACTION_HEATR_RATE_START.equals(str)) {\r
+//      contact = (Contact)paramIntent.getParcelableExtra("contact");\r
+//      SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);\r
+\r
+\r
     } else if ("com.enqualcomm.imessage.SOS_ACTION".equals(str)) {\r
       if (paramIntent.getIntExtra("sos_end", 0) == 0) {\r
 //        EqcAlgorithmNative.native_EqcAlgorithmMethod3(8);\r
@@ -361,24 +357,8 @@ public class ProcessReceiver extends BroadcastReceiver {
         (new CameraUtil(paramContext)).getPictur(str1);\r
         return;\r
       }\r
-      if ("com.enqualcomm.support.CloseUnreadMsg".equals(paramIntent.getAction()) || "android.intent.action.BATTERY_LOW".equals(paramIntent.getAction())) {\r
-//        if (mCustomDialog != null && mCustomDialog.isShowing())\r
-//          mCustomDialog.dismiss();\r
-//        if (this.mCustomNotification != null && this.mCustomNotification.isShowing())\r
-//          this.mCustomNotification.dismiss();\r
-        return;\r
-      }\r
-      if ("com.enqualcomm.support.ACTION_MISSED_CALL_GET".equals(str)) {\r
-        Contact contact1 = (Contact)paramIntent.getParcelableExtra("contact");\r
-        contact1.extra = paramIntent.getStringExtra("date");\r
-        boolean bool = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);\r
-//        if (contact1 != null && !bool) {\r
-//          initMyDialog(paramContext, contact1, 2);\r
-//          playNotificationVoice(paramContext);\r
-//          screenOn(paramContext);\r
-//          return;\r
-//        }\r
-      }\r
+\r
+\r
     }\r
   }\r
   \r