From: TrillGates Date: Sat, 20 Feb 2021 07:03:45 +0000 (+0800) Subject: save bairui id and update to callback. X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=a7fa631012682fb7d2bd074c9c70d3b274bc1dc9;p=protocol_srv.git save bairui id and update to callback. --- diff --git a/app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl b/app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl index 2a86409a..14622ac0 100644 --- a/app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl +++ b/app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl @@ -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 diff --git a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java index 5c4d90dd..1d419f14 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java +++ b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java @@ -180,6 +180,10 @@ public class Runtime { private IFZDCallback mFZDCallback = null; + public IFZDCallback getFZDCallback() { + return mFZDCallback; + } + /** * 这个通知远程UI更新的callback,主要是负责音视频通讯相关的功能 * 防走丢的协议。 diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java index 189aff5e..d8018df2 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -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 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: //需要回复平台结果 + } /**