completed micphone mute enable or disable.
authorTrillGates <williamtrillgates@gmail.com>
Wed, 4 Aug 2021 03:22:22 +0000 (11:22 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Wed, 4 Aug 2021 03:22:22 +0000 (11:22 +0800)
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/ic/protocols/protocol_s123.java

index 3c377a3..1292ace 100644 (file)
@@ -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];
index 302e811..3913ee3 100644 (file)
@@ -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
index acf26db..ab969fc 100644 (file)
@@ -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<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();
 
     /*
@@ -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...");
             }