save bairui id and update to callback.
authorTrillGates <williamtrillgates@gmail.com>
Sat, 20 Feb 2021 07:03:45 +0000 (15:03 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Sat, 20 Feb 2021 07:03:45 +0000 (15:03 +0800)
app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/ic/protocols/protocol_fzd.java

index 2a86409..14622ac 100644 (file)
@@ -7,4 +7,5 @@ interface IFZDCallback {
     void onBRIdLoaded(in String brId);
     void onFriendsAddResult(in boolean isSuccess);
     void onCallRequestResult(in int result);
+    void onBRIdEmpty();
 }
\ No newline at end of file
index 5c4d90d..1d419f1 100644 (file)
@@ -180,6 +180,10 @@ public class Runtime {
 
     private IFZDCallback mFZDCallback = null;
 
+    public IFZDCallback getFZDCallback() {
+        return mFZDCallback;
+    }
+
     /**
      * 这个通知远程UI更新的callback,主要是负责音视频通讯相关的功能
      * 防走丢的协议。
index 189aff5..d8018df 100644 (file)
@@ -2,11 +2,14 @@
 package com.ic.protocols;
 
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.text.TextUtils;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
+import com.enqualcomm.support.IFZDCallback;
 import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.HealthInfo;
 import com.enqualcomm.support.bean.Runtime;
@@ -42,6 +45,7 @@ public class protocol_fzd {
     private static final boolean doEncryption = Util.getSystemProperties("persist.sys.encrypt_fzd", "true").equals("true");
     public static final String defaultServerIP = "api.xcloudtech.com";
     public static final int defaultServerPort = 9000;
+    private final SharedPreferences sharedPreferences;
 
     public enum CMD_TYPE {
         /*终端发起*/
@@ -156,10 +160,13 @@ public class protocol_fzd {
     private Connection mConnection = null;
     private Runtime mRuntime = null;
 
+    public static final String FZD_SP = "fzd_sp";
+
     public protocol_fzd(Connection connect, Runtime runtime) {
         mConnection = connect;
         mRuntime = runtime;
-
+        //创建一个sp,用于保存佰锐通讯相关的临时数据
+        sharedPreferences = runtime.getContextProxy().context.getSharedPreferences(FZD_SP, Context.MODE_PRIVATE);
     }
 
     private StringBuffer cmdbuf = new StringBuffer();
@@ -249,15 +256,6 @@ public class protocol_fzd {
             // ICLogger.i("key "+cmdMap.get(key)+" cmdbuf "+cmd_msgbuf);
             if (regexUtil.isFZDCMD(cmdMap.get(key), cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动
                 String data = cmdbuf.toString().replace(CMDHEADER, "").replace(cmd_msgbuf, "").replace(CMDEND, "");
-//                    ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " ,  " + cmdbuf.toString() + "  "+cmd_msgbuf  + " data "+data );
-//                    if (key == CMD_TYPE.TK) {
-//                        //如果是BP28则 后面的数据是音频,需要保留
-//                        byte[] amrBuf;
-//                        int amrLen = getBP28Amrlen(cmdlist[i] );
-//                        if (bytes.length > amrLen) {
-//                            handleCmd(key, cmdlist[i], bytes);
-//                        }
-//                    } else {
                 if (data.startsWith(CMDSPLIT)) data = data.substring(1);
                 handleCmd(key, cmd_msgbuf, data);
                 cmdbuf.delete(0, cmdbuf.length());//处理后清空
@@ -359,8 +357,14 @@ public class protocol_fzd {
 
     }
 
+    /**
+     * [IC*YYYYYYYYYYYYYYY*LEN*KA,日期,步数,翻滚次数,电量百分数]
+     * 实例:[IC*334588000000156*0014*KA,120414,50,100,100]
+     *
+     * @param runtime
+     * @return
+     */
     public static StringMessage KA(Runtime runtime) {
-//[IC*YYYYYYYYYYYYYYY*LEN*KA,日期,步数,翻滚次数,电量百分数] 实例:[IC*334588000000156*0014*KA,120414,50,100,100]
         StringBuilder sb = new StringBuilder();
         String cmd = cmdMap.get(CMD_TYPE.KA);
         sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
@@ -390,23 +394,23 @@ public class protocol_fzd {
     }
 
 
+    /**
+     * 上课禁用时间段设置 2
+     * size 60 [IC*860314001000466*0022*SILENCETIME2,10:03-16:00-1-0111110]
+     * IC*860314001000466*0022*SILENCETIME2 10:03-16:00-1-0111110
+     * 平台发送:
+     * [IC*YYYYYYYYYYYYYYY*LEN*SILENCETIME2,时间段-开关-自定义日期,时间段-开关-自定义日期,时   间段-开关-自定义日期]
+     * 实
+     * 例 :[IC*334588000000156*0038*SILENCETIME2,7:30-21:10-1-0111110,7:30-21:10-1-0111110,7:30-21:10-0-0111110]
+     * 终端回复:
+     * [IC*YYYYYYYYYYYYYYY*LEN*SILENCETIME2]
+     * 实例:[IC*334588000000156*000C*SILENCETIME2]
+     * 说明:
+     * 设置上课禁用时间段范围,拦截终端的任何来电。格式为“起始时间-结束时间-自定义星期几”,   比如上面的 7:30-21:00-0111110,则表示周一到周五 7:30 到 21:00 之间上课禁用生效,起始时间默认大于结束时间。
+     * 总开关:0 为关,1 为开
+     * 关于自定义星期几的规则:最左边是周日,最右边是周六,即 0111110 的顺序是:周日,周一,周二,周三,周四,周五,周六(1 为打开,0 为关闭),所以上面的意思是周一至周五打开上课禁用。
+     */
     public void handleSILENCETIME2(Connection connection, Runtime runtime, String cmd, String data) {
-        /**
-         * 上课禁用时间段设置 2
-         *size 60 [IC*860314001000466*0022*SILENCETIME2,10:03-16:00-1-0111110]
-         * IC*860314001000466*0022*SILENCETIME2 10:03-16:00-1-0111110
-         * 平台发送:
-         * [IC*YYYYYYYYYYYYYYY*LEN*SILENCETIME2,时间段-开关-自定义日期,时间段-开关-自定义日期,时   间段-开关-自定义日期]
-         * 实
-         * 例 :[IC*334588000000156*0038*SILENCETIME2,7:30-21:10-1-0111110,7:30-21:10-1-0111110,7:30-21:10-0-0111110]
-         * 终端回复:
-         * [IC*YYYYYYYYYYYYYYY*LEN*SILENCETIME2]
-         * 实例:[IC*334588000000156*000C*SILENCETIME2]
-         * 说明:
-         * 设置上课禁用时间段范围,拦截终端的任何来电。格式为“起始时间-结束时间-自定义星期几”,   比如上面的 7:30-21:00-0111110,则表示周一到周五 7:30 到 21:00 之间上课禁用生效,起始时间默认大于结束时间。
-         * 总开关:0 为关,1 为开
-         * 关于自定义星期几的规则:最左边是周日,最右边是周六,即 0111110 的顺序是:周日,周一,周二,周三,周四,周五,周六(1 为打开,0 为关闭),所以上面的意思是周一至周五打开上课禁用。
-         */
         connection.send(SILENCETIME2(runtime));
         String[] silent_items = data.split(",");
         ArrayList<Silent> slist = new ArrayList<>();
@@ -442,12 +446,11 @@ public class protocol_fzd {
         return genFZDCMD(cmdMap.get(CMD_TYPE.LGZONE));
     }
 
+    /***
+     *  平台回复:[XT*YYYYYYYYYYYYYYY*LEN*LGZONE,时区,时间,日期]
+     *  实例: [XT*1234567890*001D*LGZONE,+8,08:00:00,2016-01-12]
+     */
     public void handleLGZONE(Runtime runtime, String data) {
-
-        /***
-         *  平台回复:[XT*YYYYYYYYYYYYYYY*LEN*LGZONE,时区,时间,日期]
-         *  实例: [XT*1234567890*001D*LGZONE,+8,08:00:00,2016-01-12]
-         */
         String[] list = data.split(CMDSPLIT);
         if (list.length == 3) {
             String timeZone = list[0].trim();
@@ -483,37 +486,36 @@ public class protocol_fzd {
 
 
     /*LBS+GPS混合定位*/
-    public static StringMessage UD(Runtime runtime) {
-        /***
-         * [IC*334588000000156*00CD*UD,180916,025723,A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6,100, 60,0,0,00000010,7,255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,126,95
-         * 29,21242,124,9529,21151,120,9529,63556,119,0]
-         * 说明:
-         * 数据内容:
-         * UD,命令号
-         * 180916,日期(年月日)(0 时区),表示 0 时区的二零一八年九月十六号
-         *
-         * 025723,时间(时分秒)(0 时区),表示 0 时区的两点五十七分二十三秒A,gps 定位有效
-         * 22.570733,纬度
-         * N,纬度表示113.8626083,经度
-         * E,经度表示0.00,速度
-         * 249.5,方向
-         * 0.0,海拔
-         * 6,卫星个数
-         *
-         * 100,gsm 信号强度
-         * 60,电量
-         * 0,计步数
-         * 0,翻转次数
-         * 00000010,终端状态,数据为 16 进制,解析成二进制为 0000 0000 0000 0000 0000 0000 0001 0000
-         * 前面 4 个字节表示状态,后面 4 个字节表示报警,数据中第 4 位为 1,对照文档最后的数据解析,表示手表静止状态。详细可参看文档最后部分。
-         * 7,基站个数
-         * 255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,126,9529,21242,124,9529,
-         * 21151,120,9529,63556,119,基站信息
-         * 0,WiFi 个数
-         *
-         */
-
 
+    /***
+     * [IC*334588000000156*00CD*UD,180916,025723,A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6,100, 60,0,0,00000010,7,255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,126,95
+     * 29,21242,124,9529,21151,120,9529,63556,119,0]
+     * 说明:
+     * 数据内容:
+     * UD,命令号
+     * 180916,日期(年月日)(0 时区),表示 0 时区的二零一八年九月十六号
+     *
+     * 025723,时间(时分秒)(0 时区),表示 0 时区的两点五十七分二十三秒A,gps 定位有效
+     * 22.570733,纬度
+     * N,纬度表示113.8626083,经度
+     * E,经度表示0.00,速度
+     * 249.5,方向
+     * 0.0,海拔
+     * 6,卫星个数
+     *
+     * 100,gsm 信号强度
+     * 60,电量
+     * 0,计步数
+     * 0,翻转次数
+     * 00000010,终端状态,数据为 16 进制,解析成二进制为 0000 0000 0000 0000 0000 0000 0001 0000
+     * 前面 4 个字节表示状态,后面 4 个字节表示报警,数据中第 4 位为 1,对照文档最后的数据解析,表示手表静止状态。详细可参看文档最后部分。
+     * 7,基站个数
+     * 255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,126,9529,21242,124,9529,
+     * 21151,120,9529,63556,119,基站信息
+     * 0,WiFi 个数
+     *
+     */
+    public static StringMessage UD(Runtime runtime) {
         StringBuilder sb = new StringBuilder();
         String cmd = cmdMap.get(CMD_TYPE.UD);
         sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
@@ -530,59 +532,15 @@ public class protocol_fzd {
         return genFZDCMD(cmd, sb.toString());
     }
 
-
-    /*LBS+WiFi混合定位*/
-    public static String UD2(Runtime ds) {
-        //示例数据:IWAP02,
-        // zh_cn,
-        // 0,
-        // 7,
-        // 460,0,
-        // 9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7,
-        // 4,
-        // 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#
-//        IW标识符
-//        AP02:命令字
-//        zh_cn: 语言标志
-//        0:回复标识,为0时不回复地址,为 1 时,服务器回复地址信息
-//        7: 表示共有7组基站
-//        460: MCC 国家码
-//        0: MNC运营商代码
-//        9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应  10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm)
-//        4: 表示WIFI组数,
-//                1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)
-
-        int apsum = 0;
-        String wifiinfo = ds.getWifiInfo();
-        if (!wifiinfo.isEmpty()) {
-            String[] list = wifiinfo.split("&");
-            apsum = list.length;
-        }
-
-        ICLogger.i("Wifi ap sum " + apsum);
-        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.LK)).append(CMDSPLIT)
-                .append(ds.getLanguage()).append(CMDSPLIT)
-                .append(0).append(CMDSPLIT) //为0时不回复地址
-                .append(ds.getLBSMultiStationData()).append(CMDSPLIT)  //基站信息数据
-                .append(apsum).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString();  //wifi信息数据
-    }
-
-    //处理 定位 BP01
-    public void handleUD2(String cmd) {
-        log("BP02定位接收成功");
-    }
-
-
+    /***
+     * [IC*334588000000156*00CD*AL,180916,064153,A,22.570512,N,113.8623267,E,0.00,154.8,0.0,11,10 0,100,0,0,00100018,7,0,460,1,9529,21809,155,9529,21242,132,9529,21405,131,9529,63554,131,9
+     * 529,63555,130,9529,63556,118,9529,21869,116,0,12.4]
+     * 平台回复:
+     * [IC*YYYYYYYYYYYYYYY*LEN*AL]
+     * 实例:[IC*334588000000156*0002*AL]
+     * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止.
+     */
     public static StringMessage AL(Runtime runtime) {
-        /***
-         * [IC*334588000000156*00CD*AL,180916,064153,A,22.570512,N,113.8623267,E,0.00,154.8,0.0,11,10 0,100,0,0,00100018,7,0,460,1,9529,21809,155,9529,21242,132,9529,21405,131,9529,63554,131,9
-         * 529,63555,130,9529,63556,118,9529,21869,116,0,12.4]
-         * 平台回复:
-         * [IC*YYYYYYYYYYYYYYY*LEN*AL]
-         * 实例:[IC*334588000000156*0002*AL]
-         * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止.
-         */
-
         StringBuilder sb = new StringBuilder();
         String cmd = cmdMap.get(CMD_TYPE.AL);
         sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
@@ -670,26 +628,14 @@ public class protocol_fzd {
     }
 
     public void handleWdstart(Connection connection, Runtime runtime, String data) {
-
         connection.send(wdstart());
         try {
             int freq = Integer.parseInt(data);
-
-
             Config.setTemperatureTestCycle(runtime, freq);
             CoreService.getInstance().setTempAlarm(true);
-
-            //if (runtime.check_stat_do_temp_test())
-            //    TemperatureUtil.getInstance().doTempTestInThread(FROM_SERVER);
         } catch (Exception e) {
             ICLogger.e(e.getMessage(), e);
         }
-//
-//        double wrist_temp,body_temp;
-//        wrist_temp= TemperatureUtil.get_temp_value_adjusted();
-//        body_temp=TemperatureUtil.getBodyTemp(wrist_temp,26.0f);
-//        String temperatureMsg=temp(body_temp);
-//        connection.send(genStringMessage("temp",temperatureMsg));
     }
 
     public static StringMessage hrtstart() {
@@ -760,16 +706,15 @@ public class protocol_fzd {
         return genFZDCMD(cmdMap.get(CMD_TYPE.PHL));
     }
 
+    /***
+     * [IC*334588000000156*len*PHL,号码,名字,号码,名字,号码,名字,号码,名字,号码,名字] len:发送长度 16 进制表示 占用 2 个字节
+     * 号码:ascii 字符 名字:Unicode 编码
+     * 该接口融合了白名单和电话本的功能,最多对应 50 组号码与名字,号码不超过 20 个 ascii 字符, 姓名不超过 10 个 Unicode 字符。
+     * 示 例 : [IC*334588000000156*0010*PHL,110,5F204E09]
+     * 5F204E09--->张三,是使用 unicode 编码
+     * 终端回复:[IC*334588000000156*0003*PHL]
+     */
     public void handlePHL(Connection connection, Runtime runtime, String cmd, String data) {
-        /***
-         * [IC*334588000000156*len*PHL,号码,名字,号码,名字,号码,名字,号码,名字,号码,名字] len:发送长度 16 进制表示 占用 2 个字节
-         * 号码:ascii 字符 名字:Unicode 编码
-         * 该接口融合了白名单和电话本的功能,最多对应 50 组号码与名字,号码不超过 20 个 ascii 字符, 姓名不超过 10 个 Unicode 字符。
-         * 示 例 : [IC*334588000000156*0010*PHL,110,5F204E09]
-         * 5F204E09--->张三,是使用 unicode 编码
-         * 终端回复:[IC*334588000000156*0003*PHL]
-         */
-
         String list[] = data.split(CMDSPLIT);
         int listlen = list.length;
         boolean ispared = ((listlen >= 0) && (listlen % 2 == 0));
@@ -807,7 +752,6 @@ public class protocol_fzd {
     }
 
     public boolean handleCmd(CMD_TYPE type, String cmd, String data) {
-
         //普通非二进制命令用此函数处理
         boolean ret = true;
         ICLogger.i("handleCmd " + type.name() + " strLen=" + data.length());
@@ -817,6 +761,7 @@ public class protocol_fzd {
                 ICLogger.i("收到本设备的佰锐Id == >  " + data);
                 //保存一份到sp里
                 //通知一callback
+                handleBRREG(mRuntime, data);
                 break;
             case MEMBERS:
                 ICLogger.i("收到群成员数据  ==>  " + data);
@@ -943,6 +888,34 @@ public class protocol_fzd {
 
     }
 
+
+    private static final String BRREG_ID = "brreg_id";
+
+    /**
+     * 处理佰锐ID结果
+     *
+     * @param runtime
+     * @param data
+     */
+    private void handleBRREG(Runtime runtime, String data) {
+        IFZDCallback fzdCallback = runtime.getFZDCallback();
+        if (fzdCallback == null) {
+            return;
+        }
+        try {
+            if (TextUtils.isEmpty(data)) {
+                ICLogger.i("佰锐ID为空...");
+                fzdCallback.onBRIdEmpty();
+            } else {
+                fzdCallback.onBRIdLoaded(data);
+            }
+            //保存到sp里面
+            sharedPreferences.edit().putString(BRREG_ID, data).apply();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     /**
      * 有通话请求
      * 注:终端一旦收到该请求,则需要确保音视频 sdk 处于连接状态的,如果未登陆,要登陆后回复服 务端,
@@ -958,6 +931,7 @@ public class protocol_fzd {
     private void handleCallRequest(Connection mConnection, Runtime mRuntime, String data) {
         //TODO:
         //需要回复平台结果
+
     }
 
     /**