completed make friends by location info.
authorTrillGates <williamtrillgates@gmail.com>
Mon, 12 Apr 2021 08:59:52 +0000 (16:59 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Mon, 12 Apr 2021 08:59:52 +0000 (16:59 +0800)
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/ic/protocols/protocol_fzd.java

index 85cb973..3e27034 100644 (file)
@@ -1771,11 +1771,15 @@ public class CoreService extends Service {
 
         @Override
         public void makeFriends() {
-
+            //交朋友的话是根据配置去走蓝牙交友
+            //还是位置交友
+            //目前先实现位置交友的功能
+            protocol_fzd.makeFriendsByPosition(runtime);
         }
 
         @Override
         public void unbindFriends(String remoteFriendId) {
+            ICLogger.d("unbindFriends == > " + remoteFriendId);
             StringMessage ppr = protocol_fzd.PPR(remoteFriendId);
             //解除朋友
             Deliver.sendLocationMSG(ppr);
index 0cbfeb8..2c9be5b 100644 (file)
@@ -41,6 +41,7 @@ import com.enqualcomm.support.provider.FZDFollowProvider;
 import com.enqualcomm.support.provider.FZDMembersProvider;
 import com.enqualcomm.support.provider.FZDMessageProvider;
 import com.enqualcomm.support.provider.FZDSettingsProvider;
+import com.enqualcomm.support.service.Deliver;
 import com.enqualcomm.support.service.HeartRateManager;
 import com.enqualcomm.support.utils.AlarmHelper;
 import com.enqualcomm.support.utils.CameraUtil;
@@ -412,6 +413,7 @@ public class protocol_fzd {
         TKOne,//一对一微聊
         TKIMG,//聊天图片
         PHL,//设置电话本+白名单(最多 50 条)
+        PP,//交友
         wdstart,//远程测温
         bldstart,//远程测血压
         hrtstart,//远程测量心率
@@ -448,6 +450,7 @@ public class protocol_fzd {
         cmdMap.put(CMD_TYPE.RECORD, "RECORD");
         cmdMap.put(CMD_TYPE.INFO, "INFO");
         cmdMap.put(CMD_TYPE.WIFISET, "WIFISET");
+        cmdMap.put(CMD_TYPE.PP, "PP");
         cmdMap.put(CMD_TYPE.BLE, "BLE");
         cmdMap.put(CMD_TYPE.PING, "PING");
         cmdMap.put(CMD_TYPE.rcapture, "rcapture");
@@ -1373,6 +1376,21 @@ public class protocol_fzd {
         return genFZDCMD(cmdMap.get(CMD_TYPE.PHL));
     }
 
+    public static StringMessage PP(Runtime runtime) {
+        //地理位置数据
+        String locationData = getLocationData(runtime);
+        return genFZDCMD(cmdMap.get(CMD_TYPE.PP), locationData);
+    }
+
+
+    /**
+     * 根据位置交朋友
+     */
+    public static void makeFriendsByPosition(Runtime runtime) {
+        StringMessage pp = PP(runtime);
+        Deliver.sendLocationMSG(pp);
+    }
+
     /***
      * [IC*334588000000156*len*PHL,号码,名字,号码,名字,号码,名字,号码,名字,号码,名字] len:发送长度 16 进制表示 占用 2 个字节
      * 号码:ascii 字符 名字:Unicode 编码
@@ -1703,11 +1721,75 @@ public class protocol_fzd {
                 handleFriendUnbindResult(mRuntime, data);
                 ICLogger.d("解除好友的指令..." + data);
                 break;
+            case PP:
+                //交友结果处理
+                ICLogger.d("收到交友的结果指令.");
+                handlePP(mRuntime, data);
+                break;
         }
         return ret;
 
     }
 
+    /**
+     * 平台回复: 情况一:交友成功 [XT*8800000015*LEN*PP*ID,昵称,手机号]
+     * 实例: [XT*8800000015*000A*8800000015, 5F204E0,555]
+     * 5F204E09--->张三,是使用 unicode 编码 如果手机号为空,
+     * 则为[XT*8800000015*000A*e476005866e8a2a6407502b3, 5F204E09,] 如果手机号昵称都为空,
+     * 则为[XT*8800000015*000A*e476005866e8a2a6407502b3,,]
+     * 情况二:交友失败 [XT*8800000015*LEN*X] X 的值为 1 表示没收到相应 PP 指令,为 2 表示超过好友上限。
+     * 如果服务端一直没返回 PP 指令,默认也是交友失败,终端可设三十秒的超时时间。
+     * 实例: [XT*8800000015*0001*PP,1] [XT*8800000015*0002*PP,2]
+     * 注:碰碰交友后,双向可互相打电话,另外可相互微聊对讲,微聊接口为 TK2(具体参见以 下接口)。
+     * 如果交友成功,但终端未收到 PP 确认指令,则终端可调用 PPQ 指令(文档最后 面),同步所有好友数据。
+     *
+     * @param mRuntime
+     */
+    private void handlePP(Runtime mRuntime, String data) {
+        ICLogger.d("交友结果--> " + data);
+        //第一种情况[XT*8800000015*000A*PP, 5F204E0,555]
+        //另外一种情况 情况[XT*8800000015*0001*PP,1]/[XT*8800000015*0002*PP,2]
+        //
+        boolean contains = data.contains(CMDSPLIT);
+        int result = 0;
+        if (contains) {
+            result = 0;
+            //成功的结果
+            String[] split = data.split(CMDSPLIT);
+            String friendName = Util.decodeUnicode2Utf8(split[0]);
+            String friendId = split[1];
+            ICLogger.d("friend name is == > " + friendName);
+            ICLogger.d("friend id is == > " + friendId);
+
+        } else {
+            //失败,具体拿出值
+            try {
+                result = Integer.parseInt(data);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        //处理结果
+        RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getFZDCallback();
+        try {
+            if (fzdCallback == null) {
+                ICLogger.d("fzdCallback -- > null");
+                return;
+            }
+            int i = fzdCallback.beginBroadcast();
+            while (i > 0) {
+                //TODO:
+                IFZDCallback broadcastItem = fzdCallback.getBroadcastItem(i);
+                broadcastItem.onFriendsMakeResult(result);
+                i--;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            fzdCallback.finishBroadcast();
+        }
+    }
+
     private void handleFriendUnbindResult(Runtime mRuntime, String data) {
         //解除有结果了,然去拉取一下新的用户列表吧
         RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getFZDCallback();