优化 wifi连接函数,做好注释
authorSnickerSun <scy@incartech.cn>
Wed, 25 Aug 2021 14:39:01 +0000 (22:39 +0800)
committerSnickerSun <scy@incartech.cn>
Wed, 25 Aug 2021 14:39:01 +0000 (22:39 +0800)
运动检测逻辑做好注释

app/src/main/java/com/enqualcomm/support/LocationClient.java
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/utils/Util.java

index 6f16850..2497454 100644 (file)
@@ -1003,7 +1003,12 @@ public class LocationClient {
         }
         //如果没有动,且超时。则跳过定位
         NoMoveTimeout = checkNoMoveTimeout();
-        // 不强制定位 且 (WorkingMod 不是紧急模式 或者 强制进行移动检测),且 没有移动过
+          /*
+        不强制定位(一次性强制取消移动检测用,定位后会恢复) &&
+         (( NORMAL_MOD , LOWPOWER_MOD, CUSTOM_MODE_WIFI  任意一种) || 强制移动检测(其它协议需GPS要强制移动检测用) ) &&
+         没有移动过 && 不跳过移动检测(其它协议所有项目都需要跳过移动检测时使用)
+         都满足才检测
+         */
         if ((forceLocation != 1) &&
                 (((mod == ICLocation.NORMAL_MOD) || (mod == ICLocation.LOWPOWER_MOD) || (mod == ICLocation.CUSTOM_MOD8_WIFI)) || Config.forceMoveCheck == true) &&
                 (NoMoveTimeout) && (skipMoveCheck == false)) {
index f44f454..f217030 100644 (file)
@@ -55,47 +55,26 @@ import static com.enqualcomm.support.bean.Content.CONTACT_CATEGORY_GROUP;
  * 负责发送除了login,心跳之外的所有指令
  */
 public class Deliver extends AbstractConnectionService {
-    private static final String RECEIVE_WAKE_LOCKTAG = "ReceiveWakelockTag";
 
     private static PowerManager.WakeLock WifiListWakeLock;
 
-    public static boolean haveSendH42 = false;
-
-    private static int isAppSetWifi = 0;
-
     private static boolean sendloopruning = false;
 
 
     private static ReentrantLock mLock = new ReentrantLock();
-    private static ReentrantLock lock = new ReentrantLock();
-    private static Condition mCondition = mLock.newCondition();
 
     public static LinkedBlockingDeque<StringMessage> queue = new LinkedBlockingDeque(200);
 
-    private static FileCache fileCache;
     private static Connection connection;
 
-    public static boolean is_active_location = false;
-
-    private static PowerManager.WakeLock ReceiveWakeLock;
-
-    private Handler delayHandler;
-
-    private Runnable delayTh;
-
     private Connection mConnection;
 
-    private ConWifiReceiver mMyWifiReceiver;
-
     private static Runtime mRuntime;
 
-    private static boolean wakeLockWifiList = false;
-
-    private static boolean wakeLockWifiSet = false;
-
     private static boolean wifiEnabled;
 
     public static Runnable delaySendMSG;
+
     private static final Handler mSendMSGHandler;
 
     static {
@@ -122,7 +101,7 @@ public class Deliver extends AbstractConnectionService {
         mRuntime = paramRuntime;
         //把queue 保存在磁盘中的缓存文件
         //此文件只缓存 除了 登录指令AP00,心跳AP03以及voice 分包指令以外的需要上传的指令。初步规划为 定位AP01和心率/血压 APHT
-        fileCache = new FileCache(paramRuntime.getFileDir());
+//        fileCache = new FileCache(paramRuntime.getFileDir());
     }
 
     private static boolean checkNetwork() {
@@ -681,197 +660,70 @@ public class Deliver extends AbstractConnectionService {
         AudioService.getInstance().play(voicefile);
     }
 
-    public static void releaseOneWakeLock() {
-        if (ReceiveWakeLock == null) {
-            ICLogger.i("ReceiveWakeLock 没有加锁");
-            return;
-        }
-        if (!wakeLockWifiList && !wakeLockWifiSet && ReceiveWakeLock.isHeld()) {
-            ReceiveWakeLock.release();
-            ReceiveWakeLock = null;
-        }
-    }
-
-    public void releaseReceiveWakeLock() {
-        if (this.ReceiveWakeLock == null) {
-            ICLogger.i("ReceiveWakeLock 没有加锁");
-            return;
-        }
-        if (this.ReceiveWakeLock.isHeld()) {
-            this.ReceiveWakeLock.release();
-            this.wakeLockWifiList = false;
-            this.wakeLockWifiSet = false;
-            this.ReceiveWakeLock = null;
-        }
-    }
 
     public static void connectToWifi(String ssid, String pwd, String encryptType) {
         int networkid;
         final WifiManager wifiManager = mRuntime.getContextProxy().getWifiManager();
+        String isUserOpen = Util.getSystemProperties("persist.sys.ic.wifi_enable", "false");
+        ICLogger.d("is open by user == > " + isUserOpen);
         wifiEnabled = wifiManager.isWifiEnabled();
         if (!wifiEnabled) {
             //没开就打开wifi
-            Util.turnOnWifiForConnect(mRuntime.getContextProxy().context, mRuntime);
+            wifiManager.setWifiEnabled(true);
         }
+
+        //断开当前连接
         if (Util.isConnectWifi(mRuntime.getContextProxy().context)) {
-            networkid = wifiManager.getConnectionInfo().getNetworkId();
+//            networkid = wifiManager.getConnectionInfo().getNetworkId();
             wifiManager.disconnect();
-            wifiManager.removeNetwork(networkid);
-            wifiManager.saveConfiguration();
+            //wifiManager.removeNetwork(networkid);
+            //wifiManager.saveConfiguration();
         }
 
-        Deliver.isAppSetWifi = 1;
+        //用当前SSID数据创建连接配置
         WifiConfiguration wifiConfiguration = Util.GetconfigWifiInfo(mRuntime.getContextProxy().context, ssid, pwd, encryptType);
         networkid = wifiConfiguration.networkId;
+        //如果有相同配置历史消息,则删除历史连接
         wifiManager.removeNetwork(networkid);
         wifiManager.saveConfiguration();
+        //添加新的Wifi连接到连接配置,并获取这个配置的networkid
         networkid = wifiManager.addNetwork(wifiConfiguration);
-        if (Util.connectWifiByReflectMethod(mRuntime.getContextProxy().context, networkid) == null && !wifiManager.enableNetwork(networkid, true)) {
-            ICLogger.i("连接失败 3");
-            SystemClock.sleep(3000L);
-            String isUserOpen = Util.getSystemProperties("persist.sys.ic.wifi_enable", "false");
-            ICLogger.d("is open by user == > " + isUserOpen);
-            if ("false".equals(isUserOpen)) {
-                //用户手动打开的,那么就不关闭wifi了
-                wifiManager.setWifiEnabled(false);
-            }
-            wakeLockWifiSet = false;
-            releaseOneWakeLock();
-            WifiListWakeLock = Deliver.WakeLockForGetWifiList(mRuntime);
-
-            return;
-        }
-
-        if (!wifiEnabled) {
-            //原来wifi没开就关闭wifi
-            Util.turnOffWifiForSleep(mRuntime.getContextProxy().context, mRuntime);
-        }
-
-    }
-
-    public void setWakeupAlarm(Runtime paramRuntime) {
-        AlarmManager alarmManager = (AlarmManager) (paramRuntime.getContextProxy()).context.getSystemService(Context.ALARM_SERVICE);
-        Intent intent = new Intent((paramRuntime.getContextProxy()).context, CoreService.class);
-        intent.setAction(ACTION_WAKEUP_ALARM);
-        PendingIntent pendingIntent = PendingIntent.getService((paramRuntime.getContextProxy()).context, 0, intent, FLAG_UPDATE_CURRENT);
-        alarmManager.cancel(pendingIntent);
-        long l = SystemClock.elapsedRealtime();
-        StringBuilder stringBuilder = new StringBuilder();
-        stringBuilder.append("SDK_INT=");
-        stringBuilder.append(Build.VERSION.SDK_INT);
-        stringBuilder.append(",m=,");
-        stringBuilder.append(23);
-        stringBuilder.append(",kitkat=");
-        stringBuilder.append(19);
-        ICLogger.i(stringBuilder.toString());
-        if (Build.VERSION.SDK_INT >= 19) {
-            alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
-            return;
-        }
-        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
-    }
-
-    class ConWifiReceiver extends BroadcastReceiver {
-        ConWifiReceiver() {
-        }
-
-        public void onReceive(final Context var1, Intent var2) {
-            String var3 = var2.getAction();
-            StringBuilder var4 = new StringBuilder();
-            var4.append(" receive action=");
-            var4.append(var3);
-            var4.append(" isAppSetWifi=");
-            var4.append(Deliver.isAppSetWifi);
-            ICLogger.i(var4.toString());
-            if (var3.equals("android.net.conn.CONNECTIVITY_CHANGE")) {
-                if (Deliver.isAppSetWifi == 0) {
-                    return;
-                }
+        //保存新加的网络配置
+        wifiManager.saveConfiguration();
 
-                if (Deliver.isAppSetWifi == 1) {
-                    Deliver.isAppSetWifi = 0;
-                    if (Deliver.this.delayHandler != null) {
-                        Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
-                        Deliver.this.delayHandler = null;
-                    }
-                }
+        //获取Wakelock保证Wifi能正常连接,保证不重复申请wakelock
+        releaseWakeLockForGetWifiList();
+        WifiListWakeLock = Deliver.WakeLockForGetWifiList(mRuntime);
 
-                WifiManager var5 = (WifiManager) var1.getSystemService(Context.WIFI_SERVICE);
-                if (((ConnectivityManager) var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
-                    ICLogger.i("连接成功");
-                    Deliver.isAppSetWifi = 0;
-                    Deliver.haveSendH42 = true;
-                    Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());
-                    if (Deliver.this.delayHandler != null) {
-                        Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
-                        Deliver.this.delayHandler = null;
-                    }
+        //尝试connect 指定networkid
+        if ( Util.connectWifiByReflectMethod(mRuntime.getContextProxy().context, networkid) == null/*连接wifi出错*/ ) {
+            ICLogger.i("连接失败 则重试");
+            SystemClock.sleep(3000L);
 
-                    var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
-                    Deliver.this.mMyWifiReceiver = null;
-                    Deliver.this.wakeLockWifiSet = false;
-                    Deliver.this.releaseOneWakeLock();
-                    Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
-                } else {
-                    StringBuilder var6 = new StringBuilder();
-                    var6.append("连接失败 222 delayHandler=");
-                    var6.append(Deliver.this.delayHandler);
-                    ICLogger.i(var6.toString());
-                    Deliver.isAppSetWifi = 2;
-                    var5.reconnect();
-                    if (Deliver.this.delayHandler == null) {
-                        Deliver.this.delayHandler = new Handler();
-                        Deliver.this.delayTh = new Runnable() {
-                            public void run() {
-                                StringBuilder var1x = new StringBuilder();
-                                var1x.append("连接失败 超时 wifiEnabled=");
-                                var1x.append(Deliver.this.wifiEnabled);
-                                ICLogger.i(var1x.toString());
-                                if (Deliver.isAppSetWifi != 1) {
-                                    Deliver.isAppSetWifi = 0;
-                                    var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
-                                    Deliver.this.mMyWifiReceiver = null;
-                                    WifiManager var3 = (WifiManager) var1.getSystemService(Context.WIFI_SERVICE);
-                                    if (((ConnectivityManager) var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
-                                        ICLogger.i("连接成功 1");
-                                        Deliver.haveSendH42 = true;
-                                        Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());
-                                        Deliver.this.wakeLockWifiSet = false;
-                                        Deliver.this.releaseOneWakeLock();
-                                        Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
-                                    } else {
-                                        int var2 = var3.getConnectionInfo().getNetworkId();
-                                        if (var2 != -1) {
-                                            var3.disableNetwork(var2);
-//                      ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));
-                                            Deliver.this.wakeLockWifiSet = false;
-                                            Deliver.this.releaseOneWakeLock();
-                                            Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
-                                        } else {
-                                            ICLogger.i("连接失败 2-2");
-//                      ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));
-                                            Deliver.this.wakeLockWifiSet = false;
-                                            Deliver.this.releaseOneWakeLock();
-                                            Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
-                                        }
-
-                                        if (!Deliver.this.wifiEnabled) {
-                                            var3.setWifiEnabled(false);
-                                        }
-                                    }
-
-                                    Deliver.this.delayHandler = null;
-                                }
-                            }
-                        };
-                        Deliver.this.delayHandler.postDelayed(Deliver.this.delayTh, 30000L);
-                    }
+            //如果失败 通过enableNetwork 连接指定networkid
+            //首先停止所有网络自动连接。
+            for (WifiConfiguration c: wifiManager.getConfiguredNetworks()){
+                wifiManager.disableNetwork(c.networkId);
+            }
+            //接着自动裂解wifi
+            if( !wifiManager.enableNetwork(networkid, true))
+            {
+                ICLogger.i("连接再次失败 ");
+                /*如果 连接 指定wifi networkid 再次失败*/
+                //所有连接都失败了, wifi还不是用户手动打开的,那么就关闭wifi
+                if ("false".equals(isUserOpen)) {
+                    wifiManager.setWifiEnabled(false);
+                    ICLogger.i("关闭WiFi");
                 }
             }
-
         }
-    }
 
+//        if (wifiEnabled && "false".equals(isUserOpen)) {
+//            //原来wifi没开,且不打算开启wifi则关闭wifi
+//            wifiManager.setWifiEnabled(false);
+//        }
+
+    }
 
 }
 
index c3223b9..0656c38 100644 (file)
@@ -541,61 +541,49 @@ public class Util {
         return var1;
     }
 
-    public static Method connectWifiByReflectMethod(Context var0, int var1) {
-        WifiManager var2 = (WifiManager) var0.getSystemService(WIFI_SERVICE);
-        Method[] var3;
-        int var4;
-        int var5;
-        Method var6;
+    public static Method connectWifiByReflectMethod(Context context, int networkid) {
+        WifiManager wifiManager = (WifiManager) context.getSystemService(WIFI_SERVICE);
+        Method[] wifimanagerMethods;
+        int methods_count;
+        int i;
+        Method method_connect;
         Method var7;
-        Class[] var8;
-        Method var11;
-        StringBuilder var12;
+        Class[] parameterTypes;
+        Method last_method;
+        StringBuilder sb;
 
         ICLogger.i("connectWifiByReflectMethod road 1");
-        var3 = var2.getClass().getDeclaredMethods();
-        var4 = var3.length;
-        var11 = null;
-
-        for (var5 = 0; var5 < var4; var11 = var7) {
-            var6 = var3[var5];
-            var7 = var11;
-            if ("connect".equalsIgnoreCase(var6.getName())) {
-                var8 = var6.getParameterTypes();
-                var7 = var11;
-                if (var8 != null) {
-                    var7 = var11;
-                    if (var8.length > 0) {
-                        var7 = var11;
-                        if ("int".equalsIgnoreCase(var8[0].getName())) {
-                            var7 = var6;
+        wifimanagerMethods = wifiManager.getClass().getDeclaredMethods();
+        methods_count = wifimanagerMethods.length;
+        last_method = null;
+        for (i = 0; i < methods_count;++i) {
+            method_connect = wifimanagerMethods[i];
+            if ("connect".equalsIgnoreCase(method_connect.getName())) {
+                parameterTypes = method_connect.getParameterTypes();
+                if (parameterTypes != null) {
+                    if (parameterTypes.length > 0) {
+                        if ("int".equalsIgnoreCase(parameterTypes[0].getName())) {
+                            last_method = method_connect;
                         }
                     }
                 }
             }
-
-            ++var5;
         }
-
-        var7 = var11;
-        if (var11 != null) {
+        if (last_method != null) {
             try {
-                var11.invoke(var2, var1, null);
+                last_method.invoke(wifiManager, networkid, null);
             } catch (Exception e) {
                 e.printStackTrace();
                 ICLogger.e(e.getMessage(), e);
-                var12 = new StringBuilder();
-                var12.append("connectWifiByReflectMethod Android ");
-                var12.append(Build.VERSION.SDK_INT);
-                var12.append(" error!");
-                ICLogger.i(var12.toString());
+                sb = new StringBuilder();
+                sb.append("connectWifiByReflectMethod Android ");
+                sb.append(Build.VERSION.SDK_INT);
+                sb.append(" error!");
+                ICLogger.i(sb.toString());
                 return null;
             }
-
-            var7 = var11;
         }
-
-        return var7;
+        return last_method;
     }