From: TrillGates Date: Tue, 19 Oct 2021 07:38:38 +0000 (+0800) Subject: 修改了S123回复转码溢出的问题 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=0493f143b8a13a2e163515256c0d18c8d55eb64e;p=icsupport.git 修改了S123回复转码溢出的问题 --- diff --git a/app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl b/app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl index 35356637..084ef1fa 100644 --- a/app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl +++ b/app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl @@ -12,5 +12,6 @@ interface IFZDCallback { void onFriendsUnbindResult(); void onFriendsListLoaded(); void onCalling(in String callerID,in String roomName,in String type,in String token); + void onCallingByUserName(in String userName,in String roomName,in String type,in String token); void onServerReady(); } \ No newline at end of file diff --git a/app/src/main/aidl/com/enqualcomm/support/IFZDService.aidl b/app/src/main/aidl/com/enqualcomm/support/IFZDService.aidl index caebea26..d0913e8d 100644 --- a/app/src/main/aidl/com/enqualcomm/support/IFZDService.aidl +++ b/app/src/main/aidl/com/enqualcomm/support/IFZDService.aidl @@ -12,6 +12,7 @@ interface IFZDService { void getServerReady(); void rejectCallInCome(in String remoteId,in int type); void requireCall(in int type,in int remoteUserId); + void requireCallByAccount(in int type,in String account); void test(); void setUpEnvState(in int state); void makeFriends(); diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index e0c205fc..30805842 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -19,7 +19,6 @@ import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.PowerManager; -import android.os.RemoteException; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; @@ -1492,7 +1491,7 @@ public class CoreService extends Service { Util.shutdown(); } }, 1000); - }else if (Constants.ACTION_TEMP_RESULT_SEND_TIMEOUT.equals(paramIntent.getAction())){ + } else if (Constants.ACTION_TEMP_RESULT_SEND_TIMEOUT.equals(paramIntent.getAction())) { TemperatureUtil.getInstance().sendTempResult(); } this.invokeHandlerServiceChain.processUserRequest(paramIntent, this.connection, this.runtime); @@ -1875,13 +1874,13 @@ public class CoreService extends Service { //定时,3个小时获取一次天气 } - public void sendAntiStatus(){ - if(Config.custom_name.equals("AA")) { + public void sendAntiStatus() { + if (Config.custom_name.equals("AA")) { Intent intent = new Intent(); if (antiService.getCurrentAntiStatus()) { intent.setAction(ACTION_ANTI_OFF0); intent.putExtra(KEY_ANTI_EVENT, 0); - }else { + } else { intent.setAction(ACTION_ANTI_OFF0); intent.putExtra(KEY_ANTI_EVENT, 1); } @@ -1922,7 +1921,8 @@ public class CoreService extends Service { } @Override - public void getServerReady() throws RemoteException { + public void getServerReady() { + ICLogger.d("requestServerReady..."); protocolAPIHelper.requestServerReady(); } @@ -1942,6 +1942,12 @@ public class CoreService extends Service { ICLogger.d("require call == > type is " + type + " remote user id is == > " + remoteUserId); } + @Override + public void requireCallByAccount(int type, String account) { + StringMessage talk = protocolAPIHelper.requireCallByAccount(runtime, type, account); + connection.send(talk); + } + @Override public void test() { //触发测试 diff --git a/app/src/main/java/com/enqualcomm/support/utils/Util.java b/app/src/main/java/com/enqualcomm/support/utils/Util.java index 45eee59d..76c33e49 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/Util.java +++ b/app/src/main/java/com/enqualcomm/support/utils/Util.java @@ -243,18 +243,20 @@ public class Util { Character.UnicodeBlock ub = Character.UnicodeBlock.of(myBuffer[i]); if (ub == Character.UnicodeBlock.BASIC_LATIN) { //英文及数字等 - short s = (short) myBuffer[i]; + int s = (int) myBuffer[i]; String hexS = Integer.toHexString(s); sb.append("00").append(hexS.toLowerCase()); } else if (ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { //全角半角字符 - short j = (short) ((short) myBuffer[i] - 65248); + int j = ((int) myBuffer[i] - 65248); String hexS = Integer.toHexString(j); sb.append("00").append(hexS); } else { //汉字 - short s = (short) myBuffer[i]; + int s = (int) myBuffer[i]; String hexS = Integer.toHexString(s); + //hexS = hexS.replace("ffff", ""); + ICLogger.d("hexS ==>" + hexS + "s ==> " + s); sb.append(hexS.toLowerCase()); } } diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index 43007c52..efb539c0 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -58,6 +58,30 @@ public class protocolAPIHelper { } } + public static StringMessage requireCallByAccount(Runtime runtime, int type, String account) { + StringMessage result = null; + switch (Config.protocol_no) { + case Config.PROTOCOL_JIAI: + break; + case Config.PROTOCOL_BEEHOME: + break; + case Config.PROTOCOL_IC: + break; + case Config.PROTOCOL_FZD: + break; + case Config.PROTOCOL_MQTT: + break; + case PROTOCOL_ANAN: + break; + case Config.PROTOCOL_S123: + break; + case Config.PROTOCOL_GATOR: + result = protocolgator_handler.BP50(runtime, type, account); + break; + } + return result; + } + public void release() { if (protocolanan_handler != null) { protocolanan_handler.unregister(); @@ -1298,7 +1322,10 @@ public class protocolAPIHelper { switch (Config.protocol_no) { case Config.PROTOCOL_FZD: protocolfzd_handler.getServerReady(); - return; + break; + case Config.PROTOCOL_GATOR: + protocolgator_handler.getServerReady(); + break; } } @@ -1362,19 +1389,15 @@ public class protocolAPIHelper { ret = null; break; case Config.PROTOCOL_FZD: - ret = protocolfzd_handler.RCALLING(remoteId, type); + ret = protocol_fzd.RCALLING(remoteId, type); break; case Config.PROTOCOL_MQTT: - ret = null; break; case PROTOCOL_ANAN: - ret = null; break; case Config.PROTOCOL_S123: - ret = null; break; case Config.PROTOCOL_GATOR: - ret = null; break; } return ret; diff --git a/app/src/main/java/com/ic/protocols/protocol_beehome.java b/app/src/main/java/com/ic/protocols/protocol_beehome.java index b6b835ef..c104fd91 100644 --- a/app/src/main/java/com/ic/protocols/protocol_beehome.java +++ b/app/src/main/java/com/ic/protocols/protocol_beehome.java @@ -762,19 +762,19 @@ public class protocol_beehome { //设置通讯录,白名单(10个) public void handleBP14(Connection connection, String cmd, Runtime runtime) { // IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,, -/** - * IWBP14,353456789012345,080835, - * D3590D54|135xxxxxxxxxx, - * D3590D54|135xxxxxxxxxx, - * D3590D54|135xxxxxxxxxx, - * D3590D54|135xxxxxxxxxx, - * D3590D54|135xxxxxxxxxx, - * D3590D54|135xxxxxxxxxx, - * D3590D54|135xxxxxxxxxx, - * D3590D54|135xxxxxxxxxx, - * D3590D54|135xxxxxxxxxx, - * D3590D54|135xxxxxxxxxx# - */ + /** + * IWBP14,353456789012345,080835, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx# + */ String[] cmdlist = cmd.split(CMDSPLIT); String[] phnums = new String[]{"", "", "", "", "", "", "", "", "", ""}; StringBuffer sb = new StringBuffer().append("recv phone Numbs "); diff --git a/app/src/main/java/com/ic/protocols/protocol_gator.java b/app/src/main/java/com/ic/protocols/protocol_gator.java index c1ba47a7..a4ce6f9d 100644 --- a/app/src/main/java/com/ic/protocols/protocol_gator.java +++ b/app/src/main/java/com/ic/protocols/protocol_gator.java @@ -71,6 +71,17 @@ public class protocol_gator { private static final String CMDSPLIT = ","; public static final String defaultServerIP = "watch.gatorcn.com"; public static final int defaultServerPort = 27015; + private boolean hasLogin = false; + + public void getServerReady() { + ICLogger.d("getServerReady..."); + //在登录的时候,会通知的了 + //可以加个flag + if (hasLogin) { + serverReady(); + } + } + // public static final String defaultServerIP = "snickersun.oicp.net"; // public static final int defaultServerPort = 54944; @@ -105,6 +116,7 @@ public class protocol_gator { AP32,//BP32回复 AP34,//BP34回复 AP50,//app端发起视频通话到手表 + BP50,//手表端发起请求到手机 /*终端发起*/ BP00,//开机对时 BP01,//AP01返回 @@ -199,6 +211,7 @@ public class protocol_gator { cmdMap.put(CMD_TYPE.BP34, "BP34"); cmdMap.put(CMD_TYPE.BP35, "BP35"); cmdMap.put(CMD_TYPE.AP50, "AP50"); + cmdMap.put(CMD_TYPE.BP50, "BP50"); } @@ -286,7 +299,7 @@ public class protocol_gator { } //根据协议添加头尾以及IMEI号 - private static String AddHeader(Runtime runtime, String msg) { + private static String addHeader(Runtime runtime, String msg) { /* ( CHAR 1 %04X HEX_STRING 4 @@ -295,13 +308,23 @@ public class protocol_gator { byte[] msg.lenght ) CHAR 1 */ - String len = String.format("%04X", 1 + 4 + 4 + 15 + msg.length() + 1); return new StringBuffer(CMDHEADER).append(len).append("0106").append(runtime.IMEI()).append(msg).append( CMDEND).toString(); } + + public StringMessage BP50(Runtime runtime, int type, String account) { + StringBuffer sb = new StringBuffer(); + sb.append(cmdMap.get(CMD_TYPE.BP50)); + sb.append(CMDSPLIT); + sb.append(account); + String targetResult = addHeader(runtime, sb.toString()); + ICLogger.d("targetResult==> " + targetResult); + return genStringMessage(cmdMap.get(CMD_TYPE.BP50), targetResult); + } + /**/ public static StringMessage genStringMessage(String cmdName, String msg) { //设置cmdName,在这里配置进去的msg没有实际用到 @@ -425,7 +448,7 @@ public class protocol_gator { TimeUtil.getSystemTimeHHmmss() + CMDSPLIT + MakeFriendsBtHelper.getSelfAddress() + CMDSPLIT + split.length + CMDSPLIT + btAddress); - String msg = AddHeader(runtime, + String msg = addHeader(runtime, sb.toString() ); StringMessage stringMessage = genStringMessage(cmdMap.get(CMD_TYPE.BP35), msg); @@ -438,9 +461,9 @@ public class protocol_gator { public StringMessage BPXX_REPLY(Runtime ds, CMD_TYPE type, String index, boolean success) { StringMessage ret = null; if (success) { - ret = genStringMessage(cmdMap.get(type), AddHeader(ds, cmdMap.get(type) + index + "1")); + ret = genStringMessage(cmdMap.get(type), addHeader(ds, cmdMap.get(type) + index + "1")); } else { - ret = genStringMessage(cmdMap.get(type), AddHeader(ds, cmdMap.get(type) + index + "0")); + ret = genStringMessage(cmdMap.get(type), addHeader(ds, cmdMap.get(type) + index + "0")); } return ret; } @@ -479,7 +502,7 @@ public class protocol_gator { .append(ds.getMccAndMnc()) .toString(); - return genStringMessage(cmdMap.get(CMD_TYPE.BP00), AddHeader(ds, msg)); + return genStringMessage(cmdMap.get(CMD_TYPE.BP00), addHeader(ds, msg)); } //时间同步,等同于登录成功回复 @@ -636,6 +659,22 @@ public class protocol_gator { } } appendContact(ds, numbers, names); + //不管有没有数据,都要通知UI。 + RemoteCallbackList fzdCallback = mRuntime.getVideoCallCallback(); + ICLogger.d("onContractsLoaded..."); + int i = fzdCallback.beginBroadcast(); + try { + while (i > 0) { + i--; + IFZDCallback broadcastItem = fzdCallback.getBroadcastItem(i); + //通知UI层数据已经准备好了,可以去获取了。 + broadcastItem.onContractsLoaded(); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + fzdCallback.finishBroadcast(); + } } else { ICLogger.e("AP06 format error1 !"); connection.send(BPXX_REPLY(ds, CMD_TYPE.BP06, cmdlist[1], false)); @@ -805,7 +844,7 @@ public class protocol_gator { StringMessage ret = null; StringBuilder sb = new StringBuilder(cmdMap.get(CMD_TYPE.BP11)); sb.append(CMDSPLIT).append(MSGType).append(CMDSPLIT).append(MSGCount); - ret = genStringMessage(cmdMap.get(CMD_TYPE.BP11), AddHeader(ds, sb.toString())); + ret = genStringMessage(cmdMap.get(CMD_TYPE.BP11), addHeader(ds, sb.toString())); return ret; } @@ -851,7 +890,7 @@ public class protocol_gator { } else { sb.append(0); } - ret = genStringMessage(cmdMap.get(CMD_TYPE.BP12), AddHeader(ds, sb.toString())); + ret = genStringMessage(cmdMap.get(CMD_TYPE.BP12), addHeader(ds, sb.toString())); return ret; } @@ -1026,7 +1065,7 @@ public class protocol_gator { .append("0,0,0") .toString(); - StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP33), AddHeader(ds, msg)); + StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP33), addHeader(ds, msg)); return ret; } @@ -1156,7 +1195,7 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255æ­¥,电量等级5,数 return null; } - StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP30), AddHeader(ds, sb.toString())); + StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP30), addHeader(ds, sb.toString())); return ret; } @@ -1367,7 +1406,7 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255æ­¥,电量等级5,数 StringMessage ret = null; StringBuilder sb = new StringBuilder(cmdMap.get(CMD_TYPE.BP32)); sb.append(CMDSPLIT).append(cmdMap.get(CMD_TYPE.AP26)); - ret = genStringMessage(cmdMap.get(CMD_TYPE.BP32), AddHeader(ds, sb.toString())); + ret = genStringMessage(cmdMap.get(CMD_TYPE.BP32), addHeader(ds, sb.toString())); return ret; } @@ -1517,6 +1556,7 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255æ­¥,电量等级5,数 switch (type) { case AP03: //登录包 handleAP03(mRuntime, mConnection, cmd); + hasLogin = true; ICLogger.i("服务器收到登录包"); mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化 serverReady(); @@ -1609,23 +1649,38 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255æ­¥,电量等级5,数 String[] split = cmd.split(CMDSPLIT); //服务器下发AP50,频道创建的秒为单位的时间戳,亲情号,频道ID,加入频道所需的token凭证 if (split.length == 5) { - //开启拨号UI - Intent intent = new Intent(); - //在VideoCall里有个接收者,收到了消息会拉起视频通话 - intent.setAction("com.ic.video_call.action.DO_CALL"); //调用声网SDK 加入频道的uid参数 手表端暂时固定为2 - intent.putExtra("targetId", split[1]); - intent.putExtra("selfId", 2); - intent.putExtra("channel", split[3]); - intent.putExtra("token", split[4]); - mRuntime.getContextProxy().context.sendBroadcast(intent); + String targetId = split[2]; + String channel = split[3]; + String token = split[4]; + ICLogger.d("targetId ==> " + targetId); + ICLogger.d("channel ==> " + channel); + ICLogger.d("token ==> " + token); //TODO:回复服务器 ICLogger.d("send broadcast...to video call..."); + dispatchAP50(targetId, channel, token); } else { ICLogger.d("parse cmd error == > " + split.length); } } + private void dispatchAP50(String userName, String channel, String token) { + //收到服务器时间消息的时候认为服务器已经准备好了 + RemoteCallbackList fzdCallback = mRuntime.getVideoCallCallback(); + int i = fzdCallback.beginBroadcast(); + try { + while (i > 0) { + i--; + //1是视频通话,0是语音通话 + fzdCallback.getBroadcastItem(i).onCallingByUserName(userName, channel, "1", token); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + fzdCallback.finishBroadcast(); + } + } + private void serverReady() { //收到服务器时间消息的时候认为服务器已经准备好了 RemoteCallbackList fzdCallback = mRuntime.getVideoCallCallback(); @@ -1634,6 +1689,7 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255æ­¥,电量等级5,数 while (i > 0) { i--; fzdCallback.getBroadcastItem(i).onServerReady(); + fzdCallback.getBroadcastItem(i).onBRIdLoaded("0"); } } catch (Exception e) { e.printStackTrace(); diff --git a/local.properties b/local.properties index c15156fc..a5707c55 100644 --- a/local.properties +++ b/local.properties @@ -5,4 +5,4 @@ # For customization when using a Version Control System, please read the # header note. #Fri Oct 15 10:40:33 CST 2021 -sdk.dir=D\:\\android\\Android\\sdk +sdk.dir=E\:\\Android\\Sdk