From 96e3d59112bea0ded44a84857d65fc962f45fc42 Mon Sep 17 00:00:00 2001 From: TrillGates Date: Wed, 4 Aug 2021 11:22:22 +0800 Subject: [PATCH] completed micphone mute enable or disable. --- .../com/enqualcomm/support/ICSmsManager.java | 1 - .../com/enqualcomm/support/bean/Runtime.java | 9 + .../java/com/ic/protocols/protocol_s123.java | 202 ++++++++++++++---- 3 files changed, 175 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java index 3c377a3f..1292ace6 100644 --- a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -610,7 +610,6 @@ public class ICSmsManager extends BroadcastReceiver { Config.setWiFiPasswd(mContext, Config.DefaultWiFiPWD); sendSMS(phoneNumber, "reset Wifi Setting to SSID " + Config.getWiFiSSID(mContext) + ", WiFiPassword " + Config.getWiFiPasswd(mContext) + "!"); } else if (tmp[1].startsWith("connect,")) { - String tmplist[] = tmp[1].split(","); if (tmplist.length == 4) { String SSID = tmplist[1]; diff --git a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java index 302e8119..3913ee3a 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java +++ b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java @@ -111,6 +111,11 @@ public class Runtime { private heartRateStatus HRS = null; private boolean FactoryTestingStat = false; + private int csq; + + public int getCsq() { + return this.csq; + } public void setFactoryTestingStat(boolean testing) { FactoryTestingStat = testing; @@ -248,6 +253,10 @@ public class Runtime { } } + public void setCSQ(int csq) { + this.csq = csq; + } + public enum AlarmType { ALARM_SOS, //sos diff --git a/app/src/main/java/com/ic/protocols/protocol_s123.java b/app/src/main/java/com/ic/protocols/protocol_s123.java index acf26dbd..ab969fc4 100644 --- a/app/src/main/java/com/ic/protocols/protocol_s123.java +++ b/app/src/main/java/com/ic/protocols/protocol_s123.java @@ -1,14 +1,22 @@ 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; @@ -29,6 +37,7 @@ import com.enqualcomm.support.provider.ICDatabaseHelper; 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; @@ -71,6 +80,7 @@ import static java.lang.Math.abs; * customserverip=47.74.9.33 * customserverport=8083 */ +@SuppressLint("MissingPermission") public class protocol_s123 { private static final String TAG = "ICSrv." + protocol_s123.class.getSimpleName(); @@ -195,6 +205,7 @@ public class protocol_s123 { BP47,//设置震动 BPCM,//照相禁用开关 BPMK,//关闭麦克风 + APMK,//关闭麦克风 APGJ,//关机前的确定 APFX,//飞行模式开关 BP75,//闹钟, @@ -206,6 +217,8 @@ public class protocol_s123 { APAP, BPIP,//设置服务器IP(域名)端口 APIP, + BPWF,//WIFI设置 + APWF, UNKNOWN_CMD, } @@ -328,6 +341,7 @@ public class protocol_s123 { 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"); @@ -337,6 +351,8 @@ public class protocol_s123 { 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"); } @@ -349,10 +365,56 @@ public class protocol_s123 { 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 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(); /* @@ -497,22 +559,50 @@ public class protocol_s123 { 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]); @@ -522,24 +612,20 @@ public class protocol_s123 { 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: 标识符 @@ -564,13 +650,11 @@ public class protocol_s123 { //处理 心跳 BP03 public void handleBP03(String cmd) { - log("BP03心跳接收成功"); } public static StringMessage AP10(Runtime ds) { - /** * IWAP10080524A2232.9806N11404.9355E000.1061830323.8706000908000502, * 460,0,9520,3671, @@ -598,7 +682,7 @@ public class protocol_s123 { //示例数据: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()))) @@ -612,7 +696,6 @@ public class protocol_s123 { log("BP01定位接收成功"); } - /*LBS+WiFi混合定位*/ public static StringMessage AP02(Runtime ds) { //示例数据:IWAP02, @@ -623,17 +706,16 @@ public class protocol_s123 { // 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()) { @@ -3359,7 +3441,7 @@ public class protocol_s123 { case BPMK: ICLogger.d("收到关闭麦克风的指令BPMK"); mConnection.DeliverCMDMessageToSystem("APMK", cmd);//通知下面线程状态变化 - handleBPMK(mRuntime, cmd); + handleBPMK(cmd); break; case BP75: ICLogger.d("收到闹钟设置指令BP75"); @@ -3405,6 +3487,10 @@ public class protocol_s123 { ICLogger.d("收到服务器设置IP的指令."); handleBPIP(cmd); break; + case BPWF: + ICLogger.d("收到服务器设置WIFI的指令."); + handleBPWF(cmd); + break; case APTM: break; case APCH: @@ -3512,6 +3598,38 @@ public class protocol_s123 { 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和端口号 * @@ -3753,18 +3871,30 @@ public class protocol_s123 { /** * 处理麦克风的指令 * - * @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..."); } -- 2.17.1