import com.enqualcomm.support.provider.ICMembersProvider;
import com.enqualcomm.support.provider.WebSmsProvider;
import com.enqualcomm.support.service.HeartRateManager;
+import com.enqualcomm.support.utils.APNUtil;
import com.enqualcomm.support.utils.CameraUtil;
import com.enqualcomm.support.utils.Connection;
import com.enqualcomm.support.utils.ICAudioManager;
APPH,
BPSS,//短信命令
APSS,
+ BPAP,//APN指令下发
+ APAP,
+ BPIP,//设置服务器IP(域名)端口
+ APIP,
UNKNOWN_CMD,
}
cmdMap.put(CMD_TYPE.APPH, "APPH");
cmdMap.put(CMD_TYPE.BPSS, "BPSS");
cmdMap.put(CMD_TYPE.APSS, "APSS");
+ cmdMap.put(CMD_TYPE.BPAP, "BPAP");
+ cmdMap.put(CMD_TYPE.APAP, "APAP");
+ cmdMap.put(CMD_TYPE.BPIP, "BPIP");
+ cmdMap.put(CMD_TYPE.APIP, "APIP");
}
ICLogger.d("收到服务器短信指令.");
handleBPSS(cmd);
break;
+ case BPAP:
+ ICLogger.d("收到服务器APN设置的指令.");
+ handleBPAP(cmd);
+ break;
+ case BPIP:
+ ICLogger.d("收到服务器设置IP的指令.");
+ handleBPIP(cmd);
+ break;
case APTM:
break;
case APCH:
return ret;
}
+ /**
+ * 处理服务器设置IP和端口号
+ *
+ * @param cmd
+ */
+ private void handleBPIP(String cmd) {
+ try {
+ //IWBPIP,353456789012345,080835,1,172.128.20.111:9999
+ //IW:标识符
+ //BPIP : 命令字符
+ //353456789012345:IMEI号,设备唯一ID
+ //080835 :指令流水号
+ //1: 服务器通道类型,1通信消息服务器通道,2软件升级消息服务器通道
+ String[] split = cmd.split(CMDSPLIT);
+ if (split.length == 5) {
+ String id = split[2];
+ String type = split[3];
+ String ipAndPort = split[4];
+ if (ipAndPort.contains(":")) {
+ String[] ipAndPortArray = ipAndPort.split(":");
+ String ip = ipAndPortArray[0];
+ String port = ipAndPortArray[1];
+ Config.setCustomServer(mRuntime.getContextProxy().context, true, ip,
+ Integer.parseInt(port));
+ //172.128.20.111:9999: IP(域名):端口
+ //响应IWAPIP,080835,1,172.128.20.111:9999
+ //1:表示设备接受数据成功,0表示设备接受数据失败.
+ responseWithId(cmdMap.get(CMD_TYPE.APIP), id, type, ipAndPort);
+ //以下内容必须在后回复的后面,否则就发送不了。
+ Config.loadServerSettings(mRuntime);
+ CoreService.getInstance().disconnect_server();
+ CoreService.getInstance().ReConnectToServer();
+ }
+ } else {
+ ICLogger.d("parse failed==> " + cmd);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 处理APN下发的指令
+ * IW:标识符
+ * BPAP : 命令字符
+ * 353456789012345:IMEI号,设备唯一ID
+ * 080835 :指令流水号
+ * 460: MCC
+ * 01:MNC
+ * CMNET: APN名称
+ * cmnet:apn
+ * user: 用户名,没有要留空位
+ * password:密码, 没有要留空位
+ *
+ * @param cmd
+ */
+ private void handleBPAP(String cmd) {
+ //IWBPAP,353456789012345,080835,460,01,CMNET,cmnet,user,password
+ String[] split = cmd.split(CMDSPLIT);
+ if (split.length == 9) {
+ String id = split[2];
+ //APNUtil.addVPN(apnName, apn, mcc, mnc, user, password, mContext)
+ //获取数据
+ String mcc = split[3];
+ String mnc = split[4];
+ String apnName = split[5];
+ String apn = split[6];
+ String user = split[7];
+ String password = split[8];
+ boolean isSuccess = APNUtil.addVPN(apnName, apn, mcc, mnc, user, password, mRuntime.getContextProxy().context);
+ ICLogger.d("is set apn success==> " + isSuccess);
+ //回复后台
+ // 1:表示设备接受数据成功,0表示设备接受数据失败
+ responseWithId(cmdMap.get(CMD_TYPE.APAP), id, "1");
+ } else {
+ ICLogger.d("parse error ==> " + cmd);
+ }
+ }
+
/**
* 解析短信指令,解析出来以后走mms的路子
*
ICLogger.d("content == > " + content);
ICSmsManager.handleSms(mRuntime, content, null, null);
//回复
- responseWithId(cmdMap.get(CMD_TYPE.APSS), id);
+ // 1:表示设备接受数据成功,0表示设备接受数据失败
+ responseWithId(cmdMap.get(CMD_TYPE.APSS), id, "1");
} else {
ICLogger.d("handleBPSS==parse error==> " + cmd);
}
}
}
- private void responseWithId(String cmd, String id) {
- StringMessage stringMessage = genStringMessage(cmd,
- new StringBuffer(CMDHEADER).append(cmd)
- .append(CMDSPLIT).append(id)
- .append(CMDEND).toString());
+ private void responseWithId(String cmd, String id, String... args) {
+ StringBuilder append = new StringBuilder(CMDHEADER).append(cmd)
+ .append(CMDSPLIT).append(id);
+ for (String arg : args) {
+ append.append(CMDSPLIT).append(arg);
+ }
+ append.append(CMDEND);
+ ICLogger.d("response content ==> " + append.toString());
+ StringMessage stringMessage = genStringMessage(cmd, append.toString());
mConnection.send(stringMessage);
}
String value = split[3];
//更新数据库
updateSettingValue("is_dial_enable", value);
+ //1 : 表示设备可以拨号 0:表示设备不可拨号, 用于同步平台设置。
//返回结果
- responseWithId(cmdMap.get(CMD_TYPE.APPH), id);
+ responseWithId(cmdMap.get(CMD_TYPE.APPH), id, value);
} catch (Exception e) {
e.printStackTrace();
}