import android.content.ContentResolver;
import android.content.ContentValues;
+import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
AP31,//BP31回复
AP32,//BP32回复
AP34,//BP34回复
+ AP50,//app端发起视频通话到手表
/*终端发起*/
BP00,//开机对时
BP01,//AP01返回
cmdMap.put(CMD_TYPE.BP33, "BP33");
cmdMap.put(CMD_TYPE.BP34, "BP34");
cmdMap.put(CMD_TYPE.BP35, "BP35");
+ cmdMap.put(CMD_TYPE.AP50, "AP50");
}
//设置亲情号码
public void handleAP06(Runtime ds, Connection connection, String cmd) {
log("AP06 设置亲情号码 " + cmd);
-/*
-消息内容 Type取值:0-4
-0表示:其他人
-1表示:爸爸
-2表示:妈妈
-3表示:奶奶
-4表示:爷爷
-(013612345678AP06#number1#name1#type1#number2#name2#type2#number3#name3#type3#number4#...)最多不超过13组电话号码
-
-示例:
-(0094357593060153353AP06#13141516171#father#1#13141516172#mother#2#13141516173#grandma#3#13141516174#grandpa#4#13141516175#uncle#0,0000000000000005)
-设置控制号码为:
-father:13141516171,
-mother:13141516172,
-grandma:13141516173,
-grandpa:13141516174,
-uncle:13141516175
-响应: 失败:(002E0106357593060153353BP0600000000000000050)
-成功:(002E0106357593060153353BP0600000000000000051)
- */
+ /*
+ 消息内容 Type取值:0-4
+ 0表示:其他人
+ 1表示:爸爸
+ 2表示:妈妈
+ 3表示:奶奶
+ 4表示:爷爷
+ (013612345678AP06#number1#name1#type1#number2#name2#type2#number3#name3#type3#number4#...)最多不超过13组电话号码
+
+ 示例:
+ (0094357593060153353AP06#13141516171#father#1#13141516172#mother#2#13141516173#grandma#3#13141516174#grandpa#4#13141516175#uncle#0,0000000000000005)
+ 设置控制号码为:
+ father:13141516171,
+ mother:13141516172,
+ grandma:13141516173,
+ grandpa:13141516174,
+ uncle:13141516175
+ 响应: 失败:(002E0106357593060153353BP0600000000000000050)
+ 成功:(002E0106357593060153353BP0600000000000000051)
+ */
StringBuffer sb = new StringBuffer();
String cmdlist[] = cmd.split(",");
if (cmdlist.length == 2) {
//设置闹钟
public void handleAP09(Runtime runtime, Connection connection, String cmd) {
-// AP09,A,B,C,YYMMDD,HHMMSS
-//A:表示删除、添加(修改)闹钟功能,分别用0、1表示(类型%d)
-//B:闹铃索引(0-4)
-//C:表示闹钟类型(0-0x7F),如下:
-//0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
-//如果每天闹钟:0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
-// (0040357593060153353AP09,1,0,127,150728,152900,0000000000000008)
-//增加(修改)一条索引为0的闹铃,每天15:29:00响铃
-//(002E357593060153353AP09,0,0,0000000000000008)
-//删除一条索引为0的闹铃
+ // AP09,A,B,C,YYMMDD,HHMMSS
+ //A:表示删除、添加(修改)闹钟功能,分别用0、1表示(类型%d)
+ //B:闹铃索引(0-4)
+ //C:表示闹钟类型(0-0x7F),如下:
+ //0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
+ //如果每天闹钟:0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
+ // (0040357593060153353AP09,1,0,127,150728,152900,0000000000000008)
+ //增加(修改)一条索引为0的闹铃,每天15:29:00响铃
+ //(002E357593060153353AP09,0,0,0000000000000008)
+ //删除一条索引为0的闹铃
String cmdlist[] = cmd.split(CMDSPLIT);
if (cmdlist.length == 7) {
String cmdindex = cmdlist[6];
try {
String do_cmd = "";
int alarmindex = 0 /*alarm索引*/;
- int alarmswitch = 0 /*1为开,0 为关*/;
+ int alarmswitch = 1 /*1为开,0 为关*/;
int alarmcount = 0 /*表示闹钟个数*/;
String alarmtime = "";//0900表示早上09:00
- int repeat = 0;// //0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
+ StringBuilder repeat = new StringBuilder();// //0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
// 0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
do_cmd = cmdlist[1];//0删除、1添加(修改)闹钟功能
- alarmtime = cmdlist[4] + cmdlist[5]; //YYMMDDHHMMSS
+ alarmtime = cmdlist[5]; //HHMMSS
alarmindex = Integer.parseInt(cmdlist[2]);
-
+ String repeatStr = cmdlist[3];
+ //转成int,再转成2进进制,1表示开启,0表示不开启,111111表示7天都开启,0000001表示周一开启
+ int repeatInt = Integer.parseInt(repeatStr);
+ StringBuilder repeatCountStr = new StringBuilder(Integer.toBinaryString(repeatInt));
+ int repeatLen = 7 - repeatCountStr.length();
+ for (int i = 0; i < repeatLen; i++) {
+ repeatCountStr.insert(0, "0");
+ }
+ String repeatStrRev = repeatCountStr.reverse().toString();
+ char[] chars = repeatStrRev.toCharArray();
+ for (int i = 0; i < chars.length; i++) {
+ // ICLogger.d("item ==> " + chars[i]);
+ //第一个如果是1,直接插入7
+ if (i == 0 && '1' == chars[i]) {
+ repeat.insert(0, "7");
+ } else if ('1' == chars[i]) {
+ repeat.append(i);
+ }
+ }
+ if (repeat.length() == 0) {
+ repeat.append("0");
+ }
+ ICLogger.d("repeatCount == > " + repeat.toString());
ArrayList<Alarm> alarmList = new ArrayList<>();
- alarmList.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat, "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
+ if ("1".equals(do_cmd)) {
+ alarmList.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat.toString(), "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
+ }
//do clean and set alarm things
runtime.getDbHelper().saveAlarm(alarmList);
connection.send(BPXX_REPLY(runtime, CMD_TYPE.BP09, cmdindex, true));
} else {
ICLogger.e("AP09 format error!");
}
+
}
//静音设置
case AP34://服务器回复语音接收
handleAP34(mRuntime, mConnection, cmd);
break;
+ case AP50://收到服务器视频请求
+ ICLogger.d("app端发起视频通话到手表...");
+ handleAP50(mRuntime, mConnection, cmd);
+ break;
// case AP14:// wifi定位包
// handleBP02(cmd);
// ICLogger.i("服务器收到定位AP02");
}
+ /**
+ * 处理视频通话
+ * 00DA357593061269893AP50,
+ * 17688768961,亲情号
+ * tanmingxia0755@gmail.com;357593061269893,频道号
+ * 0065ad4f9aed8cf411aaef2e9a5fe4e2b7fIABuMKChZsPEdWZ+5Au/cONiTs7Vd6IoIjqOhXa9yA8Ng5r8vd0NvtUaIgCWg34FMhsCYQQAAQDuyQBhAgDuyQBhAwDuyQBhBADuyQBh
+ *
+ * @param mRuntime
+ * @param mConnection
+ * @param cmd
+ */
+ private void handleAP50(Runtime mRuntime, Connection mConnection, String cmd) {
+ ICLogger.d("handleAP50 ==> " + cmd);
+ String[] split = cmd.split(CMDSPLIT);
+ if (split.length == 4) {
+ //开启拨号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[2]);
+ intent.putExtra("token", split[3]);
+ mRuntime.getContextProxy().context.sendBroadcast(intent);
+ } else {
+ ICLogger.d("parse cmd error == > " + split.length);
+ }
+ }
+
public boolean handleCmd(CMD_TYPE type, String cmd, byte[] bytes) {
-
//只有需要传递二进制数据的才需要这个函数,目前只有BP28需要
boolean ret = true;
ICLogger.i("handleCmd " + type.name() + " " + cmd + " bytelen=" + bytes.length);