package com.ic.protocols;
+import android.annotation.SuppressLint;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
+import android.media.AudioManager;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
+import android.telephony.CellInfo;
+import android.telephony.CellInfoCdma;
+import android.telephony.CellInfoGsm;
+import android.telephony.CellInfoLte;
+import android.telephony.CellInfoWcdma;
+import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.enqualcomm.support.Config;
import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
import com.enqualcomm.support.provider.ICMembersProvider;
import com.enqualcomm.support.provider.WebSmsProvider;
+import com.enqualcomm.support.service.Deliver;
import com.enqualcomm.support.service.HeartRateManager;
import com.enqualcomm.support.utils.APNUtil;
import com.enqualcomm.support.utils.CameraUtil;
* customserverip=47.74.9.33
* customserverport=8083
*/
+@SuppressLint("MissingPermission")
public class protocol_s123 {
private static final String TAG = "ICSrv." + protocol_s123.class.getSimpleName();
BP47,//设置震动
BPCM,//照相禁用开关
BPMK,//关闭麦克风
+ APMK,//关闭麦克风
APGJ,//关机前的确定
APFX,//飞行模式开关
BP75,//闹钟,
APAP,
BPIP,//设置服务器IP(域名)端口
APIP,
+ BPWF,//WIFI设置
+ APWF,
UNKNOWN_CMD,
}
cmdMap.put(CMD_TYPE.BP47, "BP47");
cmdMap.put(CMD_TYPE.BPCM, "BPCM");
cmdMap.put(CMD_TYPE.BPMK, "BPMK");
+ cmdMap.put(CMD_TYPE.APMK, "APMK");
cmdMap.put(CMD_TYPE.APFX, "APFX");
cmdMap.put(CMD_TYPE.BPPH, "BPPH");
cmdMap.put(CMD_TYPE.APPH, "APPH");
cmdMap.put(CMD_TYPE.APAP, "APAP");
cmdMap.put(CMD_TYPE.BPIP, "BPIP");
cmdMap.put(CMD_TYPE.APIP, "APIP");
+ cmdMap.put(CMD_TYPE.BPWF, "BPWF");
+ cmdMap.put(CMD_TYPE.APWF, "APWF");
}
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper());
}
+ getPhoneStatus(runtime);
mConnection = connect;
mRuntime = runtime;
}
+ public static String getPhoneStatus(Runtime mRuntime) {
+ TelephonyManager tm = (TelephonyManager) mRuntime
+ .getContextProxy().context.getSystemService(Context.TELEPHONY_SERVICE);
+ String str = "";
+ //noinspection ConstantConditions
+ str += "DeviceId(IMEI) = " + tm.getDeviceId() + "\n";
+ str += "DeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion() + "\n";
+ str += "Line1Number = " + tm.getLine1Number() + "\n";
+ str += "NetworkCountryIso = " + tm.getNetworkCountryIso() + "\n";
+ str += "NetworkOperator = " + tm.getNetworkOperator() + "\n";
+ str += "NetworkOperatorName = " + tm.getNetworkOperatorName() + "\n";
+ str += "NetworkType = " + tm.getNetworkType() + "\n";
+ str += "PhoneType = " + tm.getPhoneType() + "\n";
+ str += "SimCountryIso = " + tm.getSimCountryIso() + "\n";
+ str += "SimOperator = " + tm.getSimOperator() + "\n";
+ str += "SimOperatorName = " + tm.getSimOperatorName() + "\n";
+ str += "SimSerialNumber = " + tm.getSimSerialNumber() + "\n";
+ mRuntime.setIccid(tm.getSimSerialNumber());
+ str += "SimState = " + tm.getSimState() + "\n";
+ str += "SubscriberId(IMSI) = " + tm.getSubscriberId() + "\n";
+ mRuntime.setImsi(tm.getSubscriberId());
+ str += "VoiceMailNumber = " + tm.getVoiceMailNumber();
+ List<CellInfo> cellInfoList = tm.getAllCellInfo();
+ //CSQ值=(接收信号强度dBm+113)/2。
+ int dbm = 0;
+ if (cellInfoList != null && cellInfoList.size() != 0) {
+ for (CellInfo cellInfo : cellInfoList) {
+ if (cellInfo instanceof CellInfoLte) {
+ dbm = ((CellInfoLte) cellInfo).getCellSignalStrength().getDbm();
+ } else if (cellInfo instanceof CellInfoCdma) {
+ dbm = ((CellInfoCdma) cellInfo).getCellSignalStrength().getDbm();
+ } else if (cellInfo instanceof CellInfoGsm) {
+ dbm = ((CellInfoGsm) cellInfo).getCellSignalStrength().getDbm();
+ } else if (cellInfo instanceof CellInfoWcdma) {
+ dbm = ((CellInfoWcdma) cellInfo).getCellSignalStrength().getDbm();
+ }
+ }
+ }
+ ICLogger.d("dbm is==> " + dbm);
+ int csq = (dbm + 113) / 2;
+ ICLogger.d("csq==> " + csq);
+ mRuntime.setCSQ(csq);
+ return str;
+ }
+
private StringBuffer cmdBuf = new StringBuffer();
/*
return -1;
}
- /*登录*/
- public static StringMessage AP00(Runtime ds) {
+ /**
+ * 登录
+ * AP00:命令字
+ * 353456789012345: 设备IMEI号,固定15位
+ * 8612345678901234567:ICCID号
+ * V2.1.2.11:设备当前软件版本号
+ * 2021-06-11:软件版本日期
+ * 113.15.26.11:8888: 业务通信服务器IP(域名)和端口
+ * 113.15.26.11:9999: 软件升级服务器IP(域名)和端口,可以与通信服务器一样
+ * cmnet: APN
+ * 28:CSQ值,前的信号强度
+ */
+ public static StringMessage AP00(Runtime runtime) {
+ if (TextUtils.isEmpty(runtime.getIccid()) || TextUtils.isEmpty(runtime.getImsi())) {
+ String phoneStatus = getPhoneStatus(runtime);
+ ICLogger.d("phoneStatus == > " + phoneStatus);
+ return null;
+ }
+ //准备数据
+ String iccid = runtime.getIccid();
+ String currentVersion = "V2.1.2.11";
+ String protocolReleaseDate = "2021-06-11";
+ String ip = runtime.getHost();
+ int port = runtime.getPort();
+ int csq = runtime.getCsq();
+ String cmnet = "cmnet";//这个有多个如何获取?/
//示例数据:IWAP00867155030001063#
return genStringMessage(cmdMap.get(CMD_TYPE.AP00),
- new StringBuffer(CMDHEADER).append(
- cmdMap.get(CMD_TYPE.AP00)
- ).append(ds.IMEI()).append(
- CMDEND).toString());
+ new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP00)).append(runtime.IMEI())
+ .append(CMDSPLIT).append(iccid)
+ .append(CMDSPLIT).append(currentVersion)
+ .append(CMDSPLIT).append(protocolReleaseDate)
+ .append(CMDSPLIT).append(ip + ":" + port)
+ .append(CMDSPLIT).append(ip + ":" + port)
+ .append(CMDSPLIT).append(cmnet)
+ .append(CMDSPLIT).append(csq)
+ .append(CMDEND).toString());
}
//处理 登录 BP00
public void handleBP00(Runtime runtime, String cmd) {
String[] msg = cmd.split(CMDSPLIT);
-// get Msg :IWBP00,20191229171933,8# (size)24
-// 12-30 01:19:33.861 6492-6492/com.enqualcomm.support I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 , IWBP00,20191229171933,8
-
+ //get Msg :IWBP00,20191229171933,8# (size)24
+ // 12-30 01:19:33.861 6492-6492/com.enqualcomm.support I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 , IWBP00,20191229171933,8
if (msg.length >= 3) {
log("handleBP00", "Set Datetime " + msg[1]);
log("handleBP00", "Set TimeZone " + msg[2]);
if (datetime != null) {
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
TimeUtil.setTimeZone(runtime.getContextProxy().context, timezone);
-
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
TimeUtil.setSysDateTime(runtime.getContextProxy().context, datetime, timezone, true);
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
-
}
} catch (Exception e) {
ICLogger.e(e.getMessage(), e);
}
-// Set Datetime 20200505112734
-// Set TimeZone 8
-
+ //Set Datetime 20200505112734
+ //Set TimeZone 8
} else {
log("handleBP00", "format Error");
}
}
-
public static StringMessage AP03(Runtime ds) {
//示例数据:IWAP03,06000908000102,5555,30# IWAP03,000000null00000,0,0#
//IW: 标识符
//处理 心跳 BP03
public void handleBP03(String cmd) {
-
log("BP03心跳接收成功");
}
public static StringMessage AP10(Runtime ds) {
-
/**
* IWAP10080524A2232.9806N11404.9355E000.1061830323.8706000908000502,
* 460,0,9520,3671,
//示例数据:IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102,
// 460,0,9520,3671,
// Home|74-DE-2B-44-88-8C|97& Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97& Home3|74-DE-2B-44-88-8C|97#
-// IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,#
+ //IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,#
return genStringMessage(cmdMap.get(CMD_TYPE.AP01),
new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01)).append(TimeUtil.getShortDate())
.append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d", abs(ds.getSignalStrength())))
log("BP01定位接收成功");
}
-
/*LBS+WiFi混合定位*/
public static StringMessage AP02(Runtime ds) {
//示例数据:IWAP02,
// 9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7,
// 4,
// 1|D8-24-BD-79-FA-1F|59&2|3C-46-D8-6D-CE-01|81&3|0C-4C-39-1A-7C-65|69&4|70-A8-E3-5D-D7-C0|65#
-// IW标识符
-// AP02:命令字
-// zh_cn: 语言标志
-// 0:回复标识,为0时不回复地址,为 1 时,服务器回复地址信息
-// 7: 表示共有7组基站
-// 460: MCC 国家码
-// 0: MNC运营商代码
-// 9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应 10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm)
-// 4: 表示WIFI组数,
-// 1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)
-
+ //IW标识符
+ //AP02:命令字
+ //zh_cn: 语言标志
+ //0:回复标识,为0时不回复地址,为 1 时,服务器回复地址信息
+ //7: 表示共有7组基站
+ //460: MCC 国家码
+ //0: MNC运营商代码
+ //9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应 10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm)
+ //4: 表示WIFI组数,
+ //1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)
int apsum = 0;
String wifiinfo = ds.getWifiInfo();
if (!wifiinfo.isEmpty()) {
case BPMK:
ICLogger.d("收到关闭麦克风的指令BPMK");
mConnection.DeliverCMDMessageToSystem("APMK", cmd);//通知下面线程状态变化
- handleBPMK(mRuntime, cmd);
+ handleBPMK(cmd);
break;
case BP75:
ICLogger.d("收到闹钟设置指令BP75");
ICLogger.d("收到服务器设置IP的指令.");
handleBPIP(cmd);
break;
+ case BPWF:
+ ICLogger.d("收到服务器设置WIFI的指令.");
+ handleBPWF(cmd);
+ break;
case APTM:
break;
case APCH:
return ret;
}
+ /**
+ * 设置WIFI数据
+ * IWBPWF,353456789012345,080835,SSIDName,Password,psk#
+ * IW:标识符
+ * BPWF : 命令字符
+ * 353456789012345:IMEI号,设备唯一ID
+ * 080835 :指令流水号
+ * SSIDName: wifi名称,暂时不支持中文。
+ * Password: wifi密码
+ * psk:安全算法,默认psk。
+ */
+ private void handleBPWF(String cmd) {
+ String[] split = cmd.split(CMDSPLIT);
+ if (split.length == 6) {
+ String id = split[2];
+ String wifiName = split[3];
+ String password = split[4];
+ String encyptType = split[5];
+ Context context = mRuntime.getContextProxy().context;
+ Config.setWiFiSSID(context, wifiName);
+ Config.setWiFiPasswd(context, password);
+ Deliver.connectToWifi(wifiName, password, encyptType);
+ //回复内容
+ //IWAPWF,080835,1#
+ //080835:指令流水号
+ //1:表示设备接受数据成功,0表示设备接受数据失败
+ responseWithId(cmdMap.get(CMD_TYPE.APWF), id, "1");
+ } else {
+ ICLogger.d("parse error==> " + cmd);
+ }
+ }
+
/**
* 处理服务器设置IP和端口号
*
/**
* 处理麦克风的指令
*
- * @param mRuntime
* @param cmd
*/
- private void handleBPMK(Runtime mRuntime, String cmd) {
+ private void handleBPMK(String cmd) {
ICLogger.d(cmd + " handleBPMK --> " + cmd);
try {
- //IWBPMK,353456789012345,080835,1#
+ //IWBPMK,353456789012345,080835,1
String[] split = cmd.split(CMDSPLIT);
if (split.length == 4) {
- updateSettingValue("is_mic_enable", split[3].replace(CMDEND, ""));
+ String value = split[3];
+ ICLogger.d("value is===> " + value);
+ updateSettingValue("is_mic_enable", value);
+ //设置麦克风开关
+ //根据值去开关麦克风
+ //UI状态栏是否需要去显示Icon没有说明嗷
+ AudioManager audioManager = (AudioManager) mRuntime.getContextProxy().context.getSystemService(Context.AUDIO_SERVICE);
+ if (audioManager != null) {
+ audioManager.setMicrophoneMute("1".equals(value));
+ }
+ String id = split[2];
//返回消息
- //TODO:
+ //IWAPMK,080835,1#
+ //080835:指令流水号
+ //1:表示设备接受数据成功,0表示设备接受数据失败
+ responseWithId(cmdMap.get(CMD_TYPE.APMK), id, "1");
} else {
ICLogger.d("parse cmd error...");
}