1、添加mqtt 协议,并在toolActivity初步验证通讯
authorsnickersun <scy@incartech.cn>
Wed, 26 Aug 2020 13:03:15 +0000 (21:03 +0800)
committersnickersun <scy@incartech.cn>
Wed, 26 Aug 2020 13:03:15 +0000 (21:03 +0800)
2、修改久坐检测一设置就开始报警的问题。每次设置重置当前久坐计算数据。

app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/toolActivity.java
app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_mqtt.java
app/src/main/java/com/ic/protocols/protocol_mqtt_client.java [new file with mode: 0644]
app/src/main/java/se/wetcat/qatja/android/QatjaService.java

index 7a40d49..78fadad 100644 (file)
@@ -739,7 +739,8 @@ public class CoreService extends Service {
     }\r
     public void checkKeepSitting(){\r
         String dateyyyyMMDDhhmmss=TimeUtil.getSystemTime3();\r
-        String sleepdate=TimeUtil.getCurrentSleepRecordDate(dateyyyyMMDDhhmmss);\r
+        //为了更新 isInSleepRange, 下面的语句必须执行\r
+        TimeUtil.getCurrentSleepRecordDate(dateyyyyMMDDhhmmss);\r
          if(TimeUtil.isInSleepRange == false) { //不在睡眠时间就是久坐时间段。\r
              if (Runtime.lastSitCheckStepCount == -1){\r
                  Runtime.lastSitCheckStepCount=runtime.getTotalStepCount();\r
index e88fe55..637c58a 100644 (file)
@@ -9,6 +9,7 @@ import android.widget.Button;
 \r
 import com.enqualcomm.support.utils.SimSignalUtil;\r
 import com.enqualcomm.support.utils.Util;\r
+//import com.ic.protocols.protocol_mqtt_client;\r
 \r
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;\r
 \r
@@ -25,7 +26,8 @@ public class toolActivity extends AppCompatActivity {
         Button btnmod1=(Button)findViewById(R.id.btn_location1);\r
         Button btnmod3=(Button)findViewById(R.id.btn_location3);\r
         Button btnmod530=(Button)findViewById(R.id.btn_location530);\r
-\r
+//        protocol_mqtt_client mqttClient=new protocol_mqtt_client(toolActivity.this);\r
+//        mqttClient.connectservice();\r
         btnmod1.setOnClickListener(new View.OnClickListener() {\r
             @Override\r
             public void onClick(View view) {\r
@@ -43,9 +45,10 @@ public class toolActivity extends AppCompatActivity {
                 intent.putExtra("smsCmd","#setlocation#=3,30#");\r
                 CoreService.getInstance().runtime.getContextProxy().sendBrodcast("com.enqualcomm.support.SMSCMD",intent);\r
                 Util.ShowToast(CoreService.getInstance().runtime,"设置模式3 , 间隔60秒定位。");\r
+\r
+//                mqttClient.attemptConnectMqtt(protocol_mqtt.defaultServerIP,"IC_H88_1063",60);\r
             }\r
         });\r
-\r
         btnmod530.setOnClickListener(new View.OnClickListener() {\r
             @Override\r
             public void onClick(View view) {\r
@@ -53,6 +56,13 @@ public class toolActivity extends AppCompatActivity {
                 intent.putExtra("smsCmd","#setlocation#=5,30#");\r
                 CoreService.getInstance().runtime.getContextProxy().sendBrodcast("com.enqualcomm.support.SMSCMD",intent);\r
                 Util.ShowToast(CoreService.getInstance().runtime,"设置模式5 , 间隔30秒定位。");\r
+\r
+\r
+//                mqttClient.sendMessage("WBG100/v1/BREQ/1","[0016,QWER15WTF156OQRT1230]");\r
+//                mqttClient.sendMessage("WBG100/v1/KA/1","[001B,120414,50,100,100, 123456789]");\r
+\r
+\r
+\r
             }\r
         });\r
         btnSim.setOnClickListener(new View.OnClickListener() {\r
index e1aa44a..35eb9a4 100644 (file)
@@ -26,6 +26,7 @@ import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.LocationClient;\r
 import com.enqualcomm.support.R;\r
 import com.enqualcomm.support.bean.NotificationParam;\r
+import com.enqualcomm.support.bean.Runtime;\r
 import com.enqualcomm.support.bean.VoiceContent;\r
 import com.enqualcomm.support.service.Deliver;\r
 import com.ic.jni.ICJniUtils;\r
@@ -397,6 +398,9 @@ public class ProcessReceiver extends BroadcastReceiver {
             int sitrange=paramIntent.getIntExtra(Constants.KEY_SIT_RANGE,0);\r
             Config.setKeepSitRangeInMinutes(paramContext,sitrange);\r
             ICLogger.i("set KeepSitRange int "+sitrange+" minutes!");\r
+            ICLogger.i("则重置 lastCheckSitTime 以及 lastSitCheckStepCount");\r
+            Runtime.lastSitCheckStepCount=CoreService.getInstance().getRuntime().getTotalStepCount();\r
+            Runtime.lastSitCheckTiimeyyyyMMddHHmmss=TimeUtil.getSystemTime3();\r
         }\r
     } else {\r
       //如果来电了,还有未读的消息,干脆关掉,防止影响接电话。\r
index 5d0c6e2..f1d52de 100644 (file)
@@ -111,7 +111,7 @@ public class protocolAPIHelper {
                 ret=protocol_fzd.PING();\r
                 break;\r
             case Config.PROTOCOL_MQTT:\r
-                ret=protocol_mqtt.PING();\r
+                ret="";\r
                 break;\r
         }\r
         return ret;\r
@@ -182,7 +182,7 @@ public class protocolAPIHelper {
                 ret=protocol_fzd.LK();\r
                 break;\r
             case Config.PROTOCOL_MQTT:\r
-                ret=protocol_mqtt.LK();\r
+                ret="";\r
                 break;\r
         }\r
         return ret;\r
index 6175da4..02c30f8 100644 (file)
@@ -29,61 +29,41 @@ import static java.lang.Math.abs;
 \r
 public class protocol_mqtt {\r
     private static final String TAG = "ICSrv." + protocol_mqtt.class.getSimpleName();\r
-    private static final String PrivKEY = "XMQcHi0lGIdru6xzW7lygBwBT8N0c09P";\r
     private static final String CMDHEADER = "[";\r
     private static final String CMDCOMPANY="IC";\r
     private static final String CMDEND = "]";\r
     private static final String CMDHEADERSPLIT = "*";\r
     private static final String CMDSPLIT = ",";\r
 \r
-    public static final String defaultServerIP="api.xcloudtech.com";\r
-    public static final int defaultServerPort=9000;\r
+    public static final String defaultServerIP="47.106.237.76";\r
+    public static final int defaultServerPort=1883;\r
 \r
+    public static final String projName="WBG100";\r
+    public static final String protocolVersion="v1";\r
+    public static final String mqttKey="QWER15WTF156OQRT1230";\r
     public enum CMD_TYPE {\r
-        /*终端发起*/\r
-        //链路保持数据\r
-        LK,//登录\r
-        PING,//绑定查询\r
-        KA,//心跳包\r
-        UD,//位置上传\r
-        UD2,//盲点位置上传\r
-        AL,//报警数据上传\r
-        Time,//获取服务器时间\r
-        WT,//获取天气\r
-        img,//上传图片\r
-        VOICE,//上传语音\r
-        WG,//请求位置信息\r
-        DLT,//解绑\r
-        temp,//体温上传\r
-        /* 服务器发起*/\r
-        UPLOAD,//数据上传间隔设置\r
-        CENTER,//中心号码设置\r
-        CALL, //拨打电话\r
-        MONITOR,//监听\r
-        SOS,//SOS 号码设置\r
-        FACTORY,//恢复出厂设置\r
-        SOSSMS,//SOS 短信报警开关\r
-        LOWBAT,//低电短信报警开关\r
-        VERNO,//版本查询\r
-        CR,//定位指令\r
-        POWEROFF,//关机指令\r
-        REMOVE,//取下手环报警开关\r
-        REMOVESMS,//取下手表短信报警开关\r
-        PEDO,//计步功能开关\r
-        SILENCETIME,//免打扰时间段设置\r
-        SILENCETIME2, //免打扰时间段设置\r
-        SLEEPTIME,//翻转检测时间段设置\r
-        FIND,//找手表指令\r
-        REMIND,//闹钟设置指令\r
-        TK,//对讲功能(微聊发送语音)\r
-        PHL,//设置电话本+白名单(最多 50 条)\r
-        wdstart,//远程测温\r
-        bldstart,//远程测血压\r
-        hrtstart,//远程测量心率\r
-        BOOTOFF,//定时关机\r
-        oxygen,//血氧上传\r
-        blood,//血压上传\r
-        heart,//心率上传\r
+     //   cmd_type     含义\r
+      //          终端主动上传\r
+        BREQ,       // 手表请求绑定(新增)\r
+        KA,         // 心跳连接\r
+        LGZONE,     // 获取服务器端时间\r
+        UD,         // 位置数据上报\r
+        AL,         // 报警数据上报\r
+        temp,       // 上传体温数据\r
+        heart,      // 终端心率上传\r
+        blood,      // 上传血压数据\r
+        oxygen,     // 上传血氧数据\r
+       // 平台主动下发\r
+        UPLOAD,     // 数据上传间隔设置\r
+        hrtstart,   // 设置心率、血氧、血压上传频率\r
+        wdstart,    // 设置体温上传频率\r
+        CENTER,     // 中心号码设置\r
+        MONITOR,    // 监听\r
+        SOS,        // 设置SOS 号码\r
+        FACTORY,    // 恢复出厂设置\r
+        REMOVE,     // 取下手环报警开关\r
+        PEDO,       // 计步功能开关\r
+        MSGDOWN,    // 消息下发到指定手表(新增)\r
         UNKNOWN_CMD,\r
     }\r
 \r
@@ -91,47 +71,27 @@ public class protocol_mqtt {
 \r
     static {\r
         cmdMap = new HashMap<CMD_TYPE, String>();\r
-        cmdMap.put(CMD_TYPE.LK, "LK");\r
-        cmdMap.put(CMD_TYPE.PING, "PING");\r
+        cmdMap.put(CMD_TYPE.BREQ, "BREQ");\r
         cmdMap.put(CMD_TYPE.KA, "KA");\r
+        cmdMap.put(CMD_TYPE.LGZONE, "LGZONE");\r
         cmdMap.put(CMD_TYPE.UD, "UD");\r
-        cmdMap.put(CMD_TYPE.UD2, "UD2");\r
         cmdMap.put(CMD_TYPE.AL, "AL");\r
-        cmdMap.put(CMD_TYPE.Time, "Time");\r
-        cmdMap.put(CMD_TYPE.WT, "WT");\r
-        cmdMap.put(CMD_TYPE.img, "img");\r
-        cmdMap.put(CMD_TYPE.VOICE, "VOICE");\r
-        cmdMap.put(CMD_TYPE.WG, "WG");\r
-        cmdMap.put(CMD_TYPE.DLT, "DLT");\r
         cmdMap.put(CMD_TYPE.temp, "temp");\r
+        cmdMap.put(CMD_TYPE.heart, "heart");\r
+        cmdMap.put(CMD_TYPE.blood, "blood");\r
+        cmdMap.put(CMD_TYPE.oxygen, "oxygen");\r
+        //下发\r
         cmdMap.put(CMD_TYPE.UPLOAD, "UPLOAD");\r
+        cmdMap.put(CMD_TYPE.hrtstart, "hrtstart");\r
+        cmdMap.put(CMD_TYPE.wdstart, "wdstart");\r
         cmdMap.put(CMD_TYPE.CENTER, "CENTER");\r
-        cmdMap.put(CMD_TYPE.CALL, "CALL");\r
         cmdMap.put(CMD_TYPE.MONITOR, "MONITOR");\r
         cmdMap.put(CMD_TYPE.SOS, "SOS");\r
         cmdMap.put(CMD_TYPE.FACTORY, "FACTORY");\r
-        cmdMap.put(CMD_TYPE.SOSSMS, "SOSSMS");\r
-        cmdMap.put(CMD_TYPE.LOWBAT, "LOWBAT");\r
-        cmdMap.put(CMD_TYPE.VERNO, "VERNO");\r
-        cmdMap.put(CMD_TYPE.CR, "CR");\r
-        cmdMap.put(CMD_TYPE.POWEROFF, "POWEROFF");\r
         cmdMap.put(CMD_TYPE.REMOVE, "REMOVE");\r
-        cmdMap.put(CMD_TYPE.REMOVESMS, "REMOVESMS");\r
         cmdMap.put(CMD_TYPE.PEDO, "PEDO");\r
-        cmdMap.put(CMD_TYPE.SILENCETIME, "SILENCETIME");\r
-        cmdMap.put(CMD_TYPE.SILENCETIME2, "SILENCETIME2");\r
-        cmdMap.put(CMD_TYPE.SLEEPTIME, "SLEEPTIME");\r
-        cmdMap.put(CMD_TYPE.FIND, "FIND");\r
-        cmdMap.put(CMD_TYPE.REMIND, "REMIND");\r
-        cmdMap.put(CMD_TYPE.TK, "TK");\r
-        cmdMap.put(CMD_TYPE.PHL, "PHL");\r
-        cmdMap.put(CMD_TYPE.wdstart, "wdstart");\r
-        cmdMap.put(CMD_TYPE.bldstart, "bldstart");\r
-        cmdMap.put(CMD_TYPE.hrtstart, "hrtstart");\r
-        cmdMap.put(CMD_TYPE.BOOTOFF, "BOOTOFF");\r
-        cmdMap.put(CMD_TYPE.oxygen, "oxygen");\r
-        cmdMap.put(CMD_TYPE.blood, "blood");\r
-        cmdMap.put(CMD_TYPE.heart, "heart");\r
+        cmdMap.put(CMD_TYPE.MSGDOWN, "MSGDOWN");\r
+\r
     }\r
 \r
     private NettyConnection mConnection=null;\r
@@ -145,26 +105,6 @@ public class protocol_mqtt {
 \r
     private StringBuffer cmdbuf = new StringBuffer();\r
 \r
-//    /*\r
-//    输入的字符串,如果有完整命令,返回 true\r
-//    否则返回 false\r
-//     */\r
-//    public boolean isCmdStr(String msg) {\r
-//        /***\r
-//         * IC*334588000000156*LEN*FALLDOWN\r
-//         */\r
-//        String cmd;\r
-//        int index=msg.indexOf(CMDSPLIT);\r
-//        if (index > 0){\r
-//            cmd = msg.substring(0,index);\r
-//        }else{\r
-//            cmd = msg;\r
-//        }\r
-//        if (regexUtil.isFZDCMD(cmd) ) {\r
-//            return true;\r
-//        }\r
-//        return false;\r
-//    }\r
 \r
     private void log(String msg) {\r
         ICLogger.log(TAG, msg);\r
@@ -294,7 +234,7 @@ public class protocol_mqtt {
 \r
     private static String keyheader(String cmd,int len){\r
         String header=genHeader(len,cmd);\r
-        String key= MD5.getCMDStringMD5(header+PrivKEY);\r
+        String key= MD5.getCMDStringMD5(header);\r
         return key;\r
     }\r
 \r
@@ -315,22 +255,18 @@ public class protocol_mqtt {
         sb.append(CMDHEADER).append(keyheader).append(header).append(CMDSPLIT).append(data).append(CMDEND);\r
         return sb.toString();\r
     }\r
-    /*登录*/\r
-    public static String LK() {\r
-        /*IC*YYYYYYYYYYYYYYY*LEN*LK*/\r
-        return genFZDCMD(cmdMap.get(CMD_TYPE.LK));\r
-    }\r
+\r
 \r
     /**\r
      * 绑定\r
      * */\r
-    public static String PING(){\r
+    public static String BREQ(){\r
 //        IC*YYYYYYYYYYYYYYY*LEN*PING\r
-        return genFZDCMD(cmdMap.get(CMD_TYPE.PING));\r
+        return genFZDCMD(cmdMap.get(CMD_TYPE.BREQ));\r
     }\r
 \r
 \r
-    public static void handlePing(Runtime runtime,String data){\r
+    public static void handleBREQ(Runtime runtime,String data){\r
 //        [IC*YYYYYYYYYYYYYYY*LEN*PING,是否绑定(0 表示未绑定,1 表示绑定)]\r
 //        实例:[IC*334588000000156*0006*PING,0]或[IC*334588000000156*0006*PING,1]\r
         int bind=Integer.parseInt(data);\r
@@ -409,42 +345,6 @@ public class protocol_mqtt {
     }\r
 \r
 \r
-    /*LBS+WiFi混合定位*/\r
-    public static String UD2(Runtime ds) {\r
-        //示例数据:IWAP02,\r
-        // zh_cn,\r
-        // 0,\r
-        // 7,\r
-        // 460,0,\r
-        // 9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7,\r
-        // 4,\r
-        // 1|D8-24-BD-79-FA-1F|59&2|3C-46-D8-6D-CE-01|81&3|0C-4C-39-1A-7C-65|69&4|70-A8-E3-5D-D7-C0|65#\r
-//        IW标识符\r
-//        AP02:命令字\r
-//        zh_cn: 语言标志\r
-//        0:回复标识,为0时不回复地址,为 1 时,服务器回复地址信息\r
-//        7: 表示共有7组基站\r
-//        460: MCC 国家码\r
-//        0: MNC运营商代码\r
-//        9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应  10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm)\r
-//        4: 表示WIFI组数,\r
-//                1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)\r
-\r
-        int apsum=0;\r
-        String wifiinfo=ds.getWifiInfo();\r
-        if (!wifiinfo.isEmpty()) {\r
-            String[] list = wifiinfo.split("&");\r
-            apsum = list.length;\r
-        }\r
-\r
-        ICLogger.i("Wifi ap sum "+apsum);\r
-        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.LK)).append(CMDSPLIT)\r
-                .append(ds.getLanguage()).append(CMDSPLIT)\r
-                .append(0).append(CMDSPLIT) //为0时不回复地址\r
-                .append(ds.getLBSMultiStationData()).append(CMDSPLIT)  //基站信息数据\r
-                .append(apsum).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString();  //wifi信息数据\r
-    }\r
-\r
     //处理 定位 BP01\r
     public void handleUD2(String cmd){\r
         log("BP02定位接收成功");\r
@@ -485,27 +385,7 @@ public class protocol_mqtt {
     public static String temp(double temp){\r
         return genFZDCMD(cmdMap.get(CMD_TYPE.temp),String.format("%.1f",temp));\r
     }\r
-    public static String POWEROFF(){\r
-        return genFZDCMD(cmdMap.get(CMD_TYPE.POWEROFF));\r
-    }\r
-    public void handlePOWEROFF(Connection connection) {\r
-\r
-        connection.send(genStringMessage("POWEROFF",POWEROFF()));\r
-    }\r
-    public static String CR(){\r
-        return genFZDCMD(cmdMap.get(CMD_TYPE.CR));\r
-    }\r
-    public void handleCR(Connection connection) {\r
 \r
-        connection.send(genStringMessage("CR",CR()));\r
-    }\r
-    public static String bldstart(){\r
-        return genFZDCMD(cmdMap.get(CMD_TYPE.bldstart));\r
-    }\r
-    public void handleBldstart(Connection connection) {\r
-\r
-        connection.send(genStringMessage("bldstart",bldstart()));\r
-    }\r
     public static String wdstart(){\r
         return genFZDCMD(cmdMap.get(CMD_TYPE.wdstart));\r
     }\r
@@ -533,13 +413,7 @@ public class protocol_mqtt {
 \r
         connection.send(genStringMessage("hrtstart",hrtstart()));\r
     }\r
-    public static String FIND(){\r
-        return genFZDCMD(cmdMap.get(CMD_TYPE.FIND));\r
-    }\r
-    public void handleFIND(Connection connection) {\r
 \r
-        connection.send(genStringMessage("FIND",FIND()));\r
-    }\r
     public static String SOS(){\r
         return genFZDCMD(cmdMap.get(CMD_TYPE.SOS));\r
     }\r
@@ -578,42 +452,6 @@ public class protocol_mqtt {
 \r
 \r
     }\r
-    public static String PHL(){\r
-        return genFZDCMD(cmdMap.get(CMD_TYPE.PHL));\r
-    }\r
-\r
-    public void handlePHL(Connection connection,Runtime runtime,String cmd,String data){\r
-        /***\r
-         * [IC*334588000000156*len*PHL,号码,名字,号码,名字,号码,名字,号码,名字,号码,名字] len:发送长度 16 进制表示 占用 2 个字节\r
-         * 号码:ascii 字符 名字:Unicode 编码\r
-         * 该接口融合了白名单和电话本的功能,最多对应 50 组号码与名字,号码不超过 20 个 ascii 字符, 姓名不超过 10 个 Unicode 字符。\r
-         * 示 例 : [IC*334588000000156*0010*PHL,110,5F204E09]\r
-         * 5F204E09--->张三,是使用 unicode 编码\r
-         * 终端回复:[IC*334588000000156*0003*PHL]\r
-         */\r
-\r
-            String list[]=data.split(CMDSPLIT);\r
-            int listlen=list.length;\r
-            boolean ispared=  (( listlen >0) && (listlen%2 == 0));\r
-            if (ispared){\r
-                ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
-                for(int i=0; i<listlen;i+=2){\r
-                    String phonem=list[i];\r
-                    String name = Util.decodeUnicode2Utf8(list[i+1]);\r
-                    ICLogger.i(i/2 +" 姓名 "+name+", 电话 "+phonem);\r
-                    contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));\r
-                }\r
-//            contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));\r
-//            contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));\r
-//            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));\r
-//            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));\r
-\r
-                runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false);\r
-            }else{\r
-                ICLogger.i("没有电话本!执行清除操作!");\r
-            }\r
-            connection.send(genStringMessage("PHL",PHL()));\r
-    }\r
 \r
     public void sendBroadcast(String cmd, Runtime dev) {\r
 \r
@@ -633,24 +471,21 @@ public class protocol_mqtt {
         ICLogger.i("handleCmd "+type.name() + " strLen="+data.length());\r
         if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd +" "+ data);\r
         switch (type){\r
-            case LK: //登录包\r
-                ICLogger.i("服务器收到登录包LK");\r
-                mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化\r
-                break;\r
+\r
             case KA:\r
                 ICLogger.i("服务器收到心跳包KA");\r
                 mConnection.DeliverCMDMessageToSystem("heartbeat",cmd);//通知下面线程状态变化\r
                 break;\r
 \r
-            case PING:\r
-                handlePing(mRuntime,data);\r
+            case BREQ:\r
+                handleBREQ(mRuntime,data);\r
                 ICLogger.i("服务器返回Ping绑定信息");\r
                 break;\r
-            case CR:\r
-                //立即定位指令(长链接有效)\r
-                handleCR(mConnection);\r
-                mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化\r
-                break;\r
+//            case CR:\r
+//                //立即定位指令(长链接有效)\r
+//                handleCR(mConnection);\r
+//                mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化\r
+//                break;\r
 \r
 //            case BP07:\r
 //                //收到发送的语音包\r
@@ -694,11 +529,11 @@ public class protocol_mqtt {
                 handleSOS(mConnection,mRuntime,cmd,data);\r
                 ICLogger.i("收到服务器设置SOS号码命令BP12");\r
                 break;\r
-            case PHL:\r
-                //收到设置白名单号码\r
-                ICLogger.i("收到服务器设置白名单号码命令BP14");\r
-                handlePHL(mConnection,mRuntime,cmd,data);\r
-                break;\r
+//            case PHL:\r
+//                //收到设置白名单号码\r
+//                ICLogger.i("收到服务器设置白名单号码命令BP14");\r
+//                handlePHL(mConnection,mRuntime,cmd,data);\r
+//                break;\r
 //            case BP15:\r
 //                handleBP15(cmd,mConnection,mRuntime);\r
 //                ICLogger.i("收到服务器设置定位命令BP15");\r
@@ -717,12 +552,7 @@ public class protocol_mqtt {
 //                mConnection.DeliverCMDMessageToSystem("Reboot",cmd);//通知下面线程状态变化\r
 //                break;\r
 //\r
-            case POWEROFF:\r
-                //收到关机\r
-                handlePOWEROFF(mConnection);\r
-                ICLogger.i("收到服务器关机命令BP31");\r
-                mConnection.DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化\r
-                break;\r
+\r
 //            case BP40:\r
 //                //服务器推送文本\r
 //                handleBP40(mConnection,mRuntime,cmd);\r
@@ -735,11 +565,7 @@ public class protocol_mqtt {
                 ICLogger.i("收到服务器心率检测命令");\r
                 HeartRateManager.triggerPPGtest();\r
                 break;\r
-            case bldstart:\r
-                handleBldstart(mConnection);\r
-                ICLogger.i("收到服务器血压检测命令");\r
-                HeartRateManager.triggerPPGtest();\r
-                break;\r
+\r
             case wdstart:\r
                 handleWdstart(mConnection,mRuntime,data);\r
                 ICLogger.i("收到服务器体温测试及设置命令");\r
@@ -772,11 +598,8 @@ public class protocol_mqtt {
 //\r
 //                break;\r
 //\r
-            case FIND:\r
-                //收到查找设备消息\r
-                handleFIND(mConnection);\r
-                mConnection.DeliverCMDMessageToSystem("findDev",cmd);//通知下面线程状态变化\r
-                break;\r
+\r
+\r
 //            case BP89:\r
 //                //心率/血压阀值\r
 //                handleBP89(cmd,mConnection);\r
@@ -838,13 +661,13 @@ public class protocol_mqtt {
         boolean ret=true;\r
         ICLogger.i("handleCmd "+type.name() + " "+cmd+" bytelen="+bytes.length );\r
         if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " +new String(bytes));\r
-        switch (type) {\r
-            case LK:\r
-            //    handleBP28(mConnection,cmd, mRuntime,bytes);\r
-                ICLogger.i("收到服务器语音BP28");\r
-                mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化\r
-                break;\r
-        }\r
+//        switch (type) {\r
+//            case LK:\r
+//            //    handleBP28(mConnection,cmd, mRuntime,bytes);\r
+//                ICLogger.i("收到服务器语音BP28");\r
+//                mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化\r
+//                break;\r
+//        }\r
         return ret;\r
     }\r
 \r
diff --git a/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java b/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java
new file mode 100644 (file)
index 0000000..8f4c96a
--- /dev/null
@@ -0,0 +1,191 @@
+package com.ic.protocols;\r
+\r
+import android.content.ComponentName;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.content.ServiceConnection;\r
+import android.os.Handler;\r
+import android.os.IBinder;\r
+import android.os.Message;\r
+import android.util.Log;\r
+\r
+import java.io.IOException;\r
+\r
+import se.wetcat.qatja.MQTTConstants;\r
+import se.wetcat.qatja.MQTTException;\r
+import se.wetcat.qatja.android.MQTTConnectionConstants;\r
+import se.wetcat.qatja.android.QatjaService;\r
+import se.wetcat.qatja.messages.MQTTMessage;\r
+import se.wetcat.qatja.messages.MQTTPublish;\r
+\r
+public class protocol_mqtt_client {\r
+\r
+    private String TAG=protocol_mqtt_client.class.getSimpleName();\r
+    private Handler mHandler = new Handler(new MqttCallback());\r
+    QatjaService mClient=null;\r
+    private Context mContext;\r
+    private boolean isBound = false;\r
+    private boolean isBinding = false;\r
+\r
+    private class MqttCallback implements Handler.Callback {\r
+        @Override\r
+        public boolean handleMessage(Message msg)\r
+             {\r
+\r
+                switch (msg.what) {\r
+                    case MQTTConnectionConstants.STATE_CHANGE:\r
+                        handleStateChange(msg);\r
+                    break;\r
+                    case 3:\r
+                        handleReceivedMessage(msg);\r
+                        break;\r
+                    }\r
+                 return true;\r
+            }\r
+\r
+    }\r
+\r
+    public protocol_mqtt_client(Context context ) {\r
+\r
+        mContext=context;\r
+    }\r
+    private void handleStateChange(Message msg) {\r
+        Log.e(TAG, MQTTConnectionConstants.resolveStateName(msg.arg1));\r
+\r
+        switch (msg.arg1) {\r
+            case MQTTConnectionConstants.STATE_NONE:\r
+                onMqttDisconnected();\r
+                break;\r
+\r
+            case MQTTConnectionConstants.STATE_CONNECTING:\r
+                break;\r
+            case MQTTConnectionConstants.STATE_CONNECTED:\r
+                onMqttConnected();\r
+                break;\r
+            case MQTTConnectionConstants.STATE_CONNECTION_FAILED:\r
+                onMqttDisconnected();\r
+                break;\r
+            default:\r
+                Log.e(TAG, "Unhandled MQTT state change");\r
+            break;\r
+        }\r
+    }\r
+\r
+    private void handleReceivedMessage(Message msg) {\r
+        MQTTPublish publish    = (MQTTPublish)msg.obj;\r
+\r
+//        if (isDebug()) {\r
+            Log.d(TAG, "handleReceivedMessage(${publish.topicName})"+publish.getTopicName()+" data "+new String(publish.getPayload()));\r
+//        }\r
+    }\r
+\r
+    private ServiceConnection mConnection = new ServiceConnection() {\r
+        @Override\r
+        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {\r
+            mClient = ((QatjaService.QatjaBinder)iBinder).getService();\r
+\r
+            isBound = true;\r
+            isBinding = false;\r
+\r
+            mClient.setHandler(mHandler);\r
+        }\r
+\r
+        @Override\r
+        public void onServiceDisconnected(ComponentName componentName) {\r
+            isBound = false;\r
+            isBinding = false;\r
+        }\r
+    };\r
+\r
+\r
+   public void Resume() {\r
+        attemptBindService();\r
+    }\r
+\r
+    public void Pause() {\r
+        try {\r
+            mClient.disconnect();\r
+\r
+            mContext.unbindService(mConnection);\r
+\r
+            isBinding = false;\r
+            isBound = false;\r
+        } catch ( IllegalArgumentException ex) {\r
+            Log.e(TAG, "Couldn't unbind the service, this is probably fine considering the state changes in the app... can probably ignore this.", ex);\r
+        }\r
+\r
+\r
+    }\r
+\r
+    public void attemptSubscribeToTopic(String topic) {\r
+        Log.d(TAG, "attemptSubscribeToTopic($topic)"+topic);\r
+\r
+\r
+            try {\r
+                mClient.subscribe(topic, MQTTConstants.AT_MOST_ONCE);\r
+            } catch (Exception ex) {\r
+                Log.e(TAG, ex.getMessage());\r
+            }\r
+\r
+    }\r
+\r
+    public void disconnect() {\r
+        mClient.disconnect();\r
+    }\r
+\r
+    public void connectservice() {\r
+        if (isBound) {\r
+//            attemptConnectMqtt()\r
+        } else if (!isBound && !isBinding) {\r
+            attemptBindService();\r
+        }\r
+    }\r
+\r
+    private void attemptBindService() {\r
+//        if (isDebug()) {\r
+            Log.d(TAG, "attemptBindService()  [isBound: $isBound, isBinding: $isBinding]");\r
+//        }\r
+        if (!isBound && !isBinding) {\r
+            isBinding = true;\r
+\r
+            Intent intent = new Intent(mContext, QatjaService.class);\r
+            mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);\r
+        }\r
+\r
+    }\r
+\r
+    public void attemptConnectMqtt(String host,String identifier, int cycle_inSeconds) {\r
+        Log.d(TAG, "attemptConnectMqtt($host, $identifier)");\r
+\r
+        if (!(MQTTConnectionConstants.STATE_CONNECTING== mClient.getState() || MQTTConnectionConstants.STATE_CONNECTED == mClient.getState()))\r
+        {\r
+            try {\r
+                mClient.setHost(host);\r
+                mClient.setPort(1883);\r
+                mClient.setIdentifier(identifier);\r
+                mClient.setKeepAlive(cycle_inSeconds*1000);\r
+                mClient.setCleanSession(true);\r
+\r
+                mClient.connect();\r
+            } catch (Exception ex) {\r
+                Log.e(TAG, ex.getMessage());\r
+            }\r
+        }\r
+    }\r
+\r
+    void onMqttConnected() {\r
+        Log.i(TAG,"onMqttConnected");\r
+        attemptSubscribeToTopic("WBG100/v1/1/+");\r
+\r
+    }\r
+    void onMqttDisconnected() {\r
+        Log.i(TAG,"onMqttDisconnected");\r
+\r
+    }\r
+\r
+\r
+    public void sendMessage(String topic,String data){\r
+\r
+       mClient.publish(topic,data);\r
+    }\r
+}\r
index bce0b89..d6aa41d 100644 (file)
@@ -147,7 +147,7 @@ public class QatjaService extends Service {
   /**
    * The default is the localhost (emulator link to
    */
-  private String host = "10.0.2.2";
+  private String host = "47.106.237.76";
 
   /**
    * The default is no SSL, turning this on before connect will enforce an SSL connection attempt.
@@ -219,6 +219,7 @@ public class QatjaService extends Service {
     subscribedTopics = new HashSet<>();
 
     mMqttIdentifierHelper = new MQTTIdentifierHelper();
+
   }
 
   @Override
@@ -282,7 +283,7 @@ public class QatjaService extends Service {
     }
 
     connect.setCleanSession(cleanSession);
-
+    connect.setKeepAlive(60);
     connect.setWillFlag(willFlag);
     if (willFlag) {
       connect.setWillTopic(willTopic);
@@ -458,11 +459,11 @@ public class QatjaService extends Service {
   // // connect(host, port);
   // }
 
-  private synchronized void sendMessage(MQTTMessage msg) {
+  public synchronized void sendMessage(MQTTMessage msg) {
     sendMessage(msg, true);
   }
 
-  private synchronized void sendMessage(MQTTMessage msg, boolean mustBeConnected) {
+  public synchronized void sendMessage(MQTTMessage msg, boolean mustBeConnected) {
     if (DEBUG)
       Log.d(TAG, "Sending message: " + MQTTHelper.decodePackageName(msg));
 
@@ -884,7 +885,10 @@ public class QatjaService extends Service {
       sendMessage(msg);
     }
   }
+  private synchronized void handlePubmesage(MQTTPuback msg) {
 
+    Log.d(TAG, "Success handlePubmesage to " + new String(msg.getPayload()));
+  }
   /**
    * Manages subscription messages
    *
@@ -1116,6 +1120,7 @@ public class QatjaService extends Service {
                 case PUBACK:
                   MQTTPuback puback = MQTTPuback.fromBuffer(buffer);
                   mMqttIdentifierHelper.removeSentPackage(puback);
+                  handlePubmesage(puback);
                   break;
 
                 case PUBREC: