import android.telephony.TelephonyManager;
import com.enqualcomm.support.Config;
+import com.enqualcomm.support.CoreService;
+import com.enqualcomm.support.R;
+import com.enqualcomm.support.bean.Contact;
import com.enqualcomm.support.bean.Content;
+import com.enqualcomm.support.bean.ICLocation;
import com.enqualcomm.support.bean.Runtime;
import com.enqualcomm.support.bean.StringMessage;
import com.enqualcomm.support.bean.VoiceContent;
import com.enqualcomm.support.bean.voicePacket;
+import com.enqualcomm.support.service.HeartRateManager;
import com.enqualcomm.support.utils.Connection;
import com.enqualcomm.support.utils.ICLogger;
import com.enqualcomm.support.utils.TimeUtil;
import com.enqualcomm.support.utils.Util;
import java.io.File;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
+import static com.enqualcomm.support.Constants.FROM_SERVER;
import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
import static java.lang.Math.abs;
AP16/*立即定位*/,
AP17/*恢复出厂设置*/,
AP18/*重启上行*/,
- AP31/*关机上行*/
+ AP31/*关机上行*/,
+ AP12/*SOS名单上行*/,
+ APXL/*血压心率 上行*/,
+ APXY, AP88, AP15, AP84, AP14/*白名单电话本上行*/
}
ICLogger.i("收到服务器关机命令BP31");
mConnection.DeliverCMDMessageToSystem("poweroff", cmd);//通知下面线程状态变化
break;
+ case BP14:
+ //收到设置白名单号码
+ handleBP14(mConnection, cmd, mRuntime);
+ ICLogger.i("收到服务器设置白名单号码命令BP14");
+ break;
+ case BP12:
+ //收到设置SOS号码
+ handleBP12(mConnection, cmd, mRuntime);
+ ICLogger.i("收到服务器设置SOS号码命令BP12");
+ break;
+ case BPXL:
+ handleBPXL(cmd, mConnection);
+ ICLogger.i("收到服务器心率检测命令");
+ if (mRuntime.check_stat_do_ppg_test())
+ HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
+ break;
+ case BPXY:
+ handleBPXY(cmd, mConnection);
+ ICLogger.i("收到服务器血压检测命令");
+ if (mRuntime.check_stat_do_ppg_test())
+ HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
+ break;
+ case BP88:
+ //收到查找设备消息
+ handleBP88(cmd, mConnection);
+ mConnection.DeliverCMDMessageToSystem("findDev", cmd);//通知下面线程状态变化
+ break;
+ case BP15:
+ handleBP15(cmd, mConnection, mRuntime);
+ ICLogger.i("收到服务器设置定位命令BP15");
+ break;
+ case BP84:
+ handleBP84(cmd, mConnection);
+ ICLogger.i("收到服务器白名单命令");
+ break;
+ case BP07:
+ //收到发送的语音包
+ handleBP07(cmd, mConnection);
+ break;
+
+ }
+ }
+
+ public void handleBP07(String cmd, Connection connection) {
+//平台响应: IWBP07,20140818064408,6,1,1#
+//20140818064408:设备语音时间,yyyyMMddHHmmss 格式的年月日时分秒
+//6:语音包分包总数
+//1:当前设备收到的是第几个包
+//1:表示服务器接受数据成功,0表示服务器接受数据失败
+ String[] cmdlist = cmd.split(CMDSPLIT);
+ if (cmdlist.length == 5) {
+ try {
+ String time = cmdlist[1];
+ int packetCount = Integer.parseInt(cmdlist[2]);
+ int packetIndex = Integer.parseInt(cmdlist[3]);
+ int receiveSuccess = Integer.parseInt(cmdlist[4]);
+ ICLogger.i("服务器在" + time + " 收到语音 " +
+ packetIndex + "/" + packetCount + " " + (receiveSuccess == 1 ? "成功" : "失敗"));
+ if (receiveSuccess == 1) {
+ //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送
+ voicePacket.getInstanceSent().setCurrentIndexToSent(packetIndex);
+ }
+ //发送消息,再次检查要发送的语音包,确认其发送完毕
+ connection.DeliverCMDMessageToSystem("SentVoicePacket", "SentVoicePacket");
+ } catch (Exception e) {
+ ICLogger.e(e.getMessage(), e);
+ }
+ } else {
+ ICLogger.i(" BP07 Format error!");
+ }
+ }
+
+
+ public void handleBP84(String cmd, Connection connection) {
+//示例:
+ //IWBP84,353456789012345,080835,1#
+ //说明:
+ //IW:标识符
+ //BP84 : 命令字符
+ //353456789012345:IMEI号,设备唯一ID
+ //080835 :指令流水号
+ //1: 表示白名单开,0 表示白名单关
+ String[] list = cmd.split(CMDSPLIT);
+
+ if (list.length == 4) {
+ String index = list[2];
+ String whitelist_switch = list[3];
+ connection.send(AP84(index, 1));
+
+ if (whitelist_switch.equals("1")) {
+ Util.setSystemProperties("persist.sys.whitelist.enable", "true");
+ } else {
+ Util.setSystemProperties("persist.sys.whitelist.enable", "false");
+ }
+ ICLogger.i("收到服务器指令:白名单" + (whitelist_switch.equals("1") ? "开" : "关"));
+
+ } else {
+
+ ICLogger.i("BP84 format error!");
+ }
+
+ }
+
+
+ //白名单开关(下行协议号:BP84,响应:AP84)
+ public static StringMessage AP84(String index, int success) {
+
+ //设备响应: IWAP80,080835,1#
+ //080835:指令流水号
+ //1:表示设备执行成功,0 表示设备执行失败
+ return genStringMessage("AP84", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84))
+ .append(CMDSPLIT).append(index)
+ .append(CMDSPLIT).append(success)
+ .append(CMDEND).toString());
+ }
+
+
+ //设置定位周期
+ public void handleBP15(String cmd, Connection connection, Runtime runtime) {
+// IWBP15, 353456789012345, 080835, 30#
+// 353456789012345:IMEI号,设备唯一ID
+// 080835 :指令流水号
+// 30: 表示频率为30分钟
+
+ String[] list = cmd.split(CMDSPLIT);
+
+ if (list.length == 4) {
+ String index = list[2];
+ String time = list[3];
+ connection.send(AP15(index));
+ ICLogger.i("BP15 , 定位周期=" + time + "秒");
+
+ try {
+ Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS);
+ Config.setLocationCycle(runtime.getContextProxy().context, Integer.parseInt(time));
+ runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));
+ runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));
+ //set AlarmCycle and trigger Location
+ CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
+ } catch (Exception e) {
+ ICLogger.e(e.getMessage(), e);
+ }
+ } else {
+ ICLogger.i("BP15 format error");
+ }
+
+ }
+
+ public static StringMessage AP15(String index) {
+//IWAP15, 080835#
+//080835:指令流水号
+ return genStringMessage("AP15", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))
+ .append(CMDSPLIT).append(index)
+ .append(CMDEND).toString());
+ }
+
+
+ public static void handleBP88(String cmd, Connection connection) {
+// IWBP88,080835#
+ String[] list = cmd.split(CMDSPLIT);
+
+ if (list.length == 2) {
+ String index = list[1];
+ connection.send(AP88(index));
+ ICLogger.i("收到服务器消息:查询设备");
+
+ } else {
+ ICLogger.i("BP88 format error!");
+ }
+ }
+
+
+ public static StringMessage AP88(String index) {
+ //设备响应: IWAP88, 080835#
+ //080835:指令流水号
+ return genStringMessage("AP88",
+ new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88))
+ .append(CMDSPLIT).append(index)
+ .append(CMDEND).toString());
+ }
+
+ /**
+ * 测量血压
+ *
+ * @param cmd
+ * @param connection
+ */
+ public void handleBPXY(String cmd, Connection connection) {
+ //IWBPXY,353456789012345,080835#
+ //说明:
+ //IW:标识符
+ //BPXL : 命令字符
+ //353456789012345:IMEI号,设备唯一ID
+ //080835 :指令流水号
+ //设备响应: IWAPXY,080835#
+ //080835:指令流水号
+ String[] list = cmd.split(CMDSPLIT);
+ if (list.length == 3) {
+ String index = list[2];
+ String imei = list[1];
+ ICLogger.i("Handle BPXY IMEI " + imei + ",index " + index);
+ connection.send(APXY(index));
+ } else {
+ ICLogger.i("BPXY format error!");
+ }
+
+ }
+
+ public static StringMessage APXY(String id) {
+//设备响应: IWAPXY,080835#
+ //080835:指令流水号
+ return genStringMessage(cmdMap.get(CMD_TYPE.APXY),
+ new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))
+ .append(CMDSPLIT).append(id)
+ .append(CMDEND).toString());
+ }
+
+ /**
+ * 测量心率
+ *
+ * @param cmd
+ * @param connection
+ */
+ public void handleBPXL(String cmd, Connection connection) {
+ //IWBPXL,353456789012345,080835#
+ //说明:
+ //IW:标识符
+ //BPXL : 命令字符
+ //353456789012345:IMEI号,设备唯一ID
+ //080835 :指令流水号
+ //设备响应: IWAPXL,080835#
+ //080835:指令流水号
+ String[] list = cmd.split(CMDSPLIT);
+ if (list.length == 3) {
+ String index = list[2];
+ String imei = list[1];
+ ICLogger.i("Handle BPXL IMEI " + imei + ",index " + index);
+ connection.send(APXL(index));
+ } else {
+ ICLogger.i("BPXL format error!");
+ }
+
+ }
+
+ public static StringMessage APXL(String id) {
+//设备响应: IWAPXL,080835#
+ //080835:指令流水号
+ return genStringMessage(cmdMap.get(CMD_TYPE.APXL),
+ new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))
+ .append(CMDSPLIT).append(id)
+ .append(CMDEND).toString());
+ }
+
+
+ //设置SOS号码
+ public static StringMessage AP12(String index, String phNum1, String phNum2, String phNum3) {
+ return genStringMessage("AP12",
+ new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12))
+ .append(CMDSPLIT).append(index)
+ .append(CMDSPLIT).append(phNum1)
+ .append(CMDSPLIT).append(phNum2)
+ .append(CMDSPLIT).append(phNum3)
+ .append(CMDEND).toString());
+ }
+
+ //设置SOS号码
+ public void handleBP12(Connection connection, String cmd, Runtime runtime) {
+ // IWBP12,353456789012345,080835,135XXXXXXXX,135XXXXXXXX,135XXXXXXXX#
+ String[] cmdlist = cmd.split(CMDSPLIT);
+ if (cmdlist.length >= 3) {
+ String index = cmdlist[2];
+ String phNum1 = cmdlist.length == 3 ? "" : cmdlist[3];
+ String phNum2 = cmdlist.length > 3 ? (cmdlist.length == 4 ? "" : cmdlist[4]) : "";
+ String phNum3 = (cmdlist.length > 4) ? (cmdlist.length == 5 ? "" : cmdlist[5]) : "";
+ ICLogger.i(new StringBuffer().append("get Emegency Numbs " + phNum1 + "," + phNum2 + "," + phNum3).toString());
+ connection.send(AP12(index, phNum1, phNum2, phNum3));
+
+ ArrayList<Contact> contactArray = new ArrayList<Contact>();
+// if(Config.custom_branch_name.equals("AK")){
+//
+// contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", "07522312120"));
+// if (!phNum1.isEmpty())
+// contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum1));
+// if (!phNum2.isEmpty())
+// contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum2));
+// }else {
+ if (!phNum1.isEmpty())
+ contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", phNum1));
+ if (!phNum2.isEmpty())
+ contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum2));
+ if (!phNum3.isEmpty())
+ contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum3));
+// }
+ runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
+ } else {
+ ICLogger.i(" BP12 format error!");
}
}
+ //设置通讯录,白名单(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#
+ */
+ String[] cmdlist = cmd.split(CMDSPLIT);
+ String[] phnums = new String[]{"", "", "", "", "", "", "", "", "", ""};
+ StringBuffer sb = new StringBuffer().append("recv phone Numbs ");
+ if (cmdlist.length >= 3) {
+ switch (cmdlist.length) {
+ case 13:
+ phnums[9] = cmdlist[12];
+ sb.append(phnums[9]).append(",");
+ case 12:
+ phnums[8] = cmdlist[11];
+ sb.append(phnums[8]).append(",");
+ case 11:
+ phnums[7] = cmdlist[10];
+ sb.append(phnums[7]).append(",");
+ case 10:
+ phnums[6] = cmdlist[9];
+ sb.append(phnums[6]).append(",");
+ case 9:
+ phnums[5] = cmdlist[8];
+ sb.append(phnums[5]).append(",");
+ case 8:
+ phnums[4] = cmdlist[7];
+ sb.append(phnums[4]).append(",");
+ case 7:
+ phnums[3] = cmdlist[6];
+ sb.append(phnums[3]).append(",");
+ case 6:
+ phnums[2] = cmdlist[5];
+ sb.append(phnums[2]).append(",");
+ case 5:
+ phnums[1] = cmdlist[4];
+ sb.append(phnums[1]).append(",");
+ case 4:
+ phnums[0] = cmdlist[3];
+ sb.append(phnums[0]).append(",");
+
+ }
+
+ String index = cmdlist[2];
+ ICLogger.i(sb.toString());
+ connection.send(AP14(index, phnums));
+ ArrayList<Contact> contactArray = new ArrayList<Contact>();
+
+ if (Config.custom_name.equals("YT")) {
+ ICLogger.i("=====add hotline 96885 ");
+ contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));
+ }
+ for (int i = 0; i < phnums.length; i++) {
+ String[] tmp = phnums[i].split("\\|");
+ if (tmp.length == 2) {
+ String name = Util.decodeUnicode2Utf8(tmp[0]);
+ String phonem = tmp[1];
+ ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length + " , name=" + name + ",-" + phonem);
+ contactArray.add(new Contact(Contact.CATEGORY_CALL, name, phonem));
+ } else {
+ ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length);
+
+ }
+ }
+// contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));
+// contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));
+// contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));
+// contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));
+
+ runtime.getDbHelper().saveContacts(contactArray, false, false, true, false, false, false);
+
+ } else {
+ ICLogger.i(" BP14 format error!");
+ }
+
+ }
+
+
+ public static StringMessage AP14(String index, String[] phnumbs) {
+ return genStringMessage("AP14", new StringBuffer(CMDHEADER).append(
+ cmdMap.get(CMD_TYPE.AP14))
+ .append(CMDSPLIT).append(index)
+ .append(CMDSPLIT).append(phnumbs[0])
+ .append(CMDSPLIT).append(phnumbs[1])
+ .append(CMDSPLIT).append(phnumbs[2])
+ .append(CMDSPLIT).append(phnumbs[3])
+ .append(CMDSPLIT).append(phnumbs[4])
+ .append(CMDSPLIT).append(phnumbs[5])
+ .append(CMDSPLIT).append(phnumbs[6])
+ .append(CMDSPLIT).append(phnumbs[7])
+ .append(CMDSPLIT).append(phnumbs[8])
+ .append(CMDSPLIT).append(phnumbs[9])
+ .append(CMDEND).toString());
+ }
+
public void handleBP31(Connection connection, String cmd) {