From 6a9fdd051dc9d2cb5f1a8ebf162309ec409550de Mon Sep 17 00:00:00 2001 From: SnickerSun Date: Wed, 25 Aug 2021 22:39:01 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=20wifi=E8=BF=9E=E6=8E=A5?= =?utf8?q?=E5=87=BD=E6=95=B0=EF=BC=8C=E5=81=9A=E5=A5=BD=E6=B3=A8=E9=87=8A?= =?utf8?q?=20=E8=BF=90=E5=8A=A8=E6=A3=80=E6=B5=8B=E9=80=BB=E8=BE=91?= =?utf8?q?=E5=81=9A=E5=A5=BD=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../enqualcomm/support/LocationClient.java | 7 +- .../enqualcomm/support/service/Deliver.java | 232 ++++-------------- .../com/enqualcomm/support/utils/Util.java | 68 +++-- 3 files changed, 76 insertions(+), 231 deletions(-) diff --git a/app/src/main/java/com/enqualcomm/support/LocationClient.java b/app/src/main/java/com/enqualcomm/support/LocationClient.java index 6f16850f..2497454c 100644 --- a/app/src/main/java/com/enqualcomm/support/LocationClient.java +++ b/app/src/main/java/com/enqualcomm/support/LocationClient.java @@ -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)) { diff --git a/app/src/main/java/com/enqualcomm/support/service/Deliver.java b/app/src/main/java/com/enqualcomm/support/service/Deliver.java index f44f4540..f2170309 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -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 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); +// } + + } } diff --git a/app/src/main/java/com/enqualcomm/support/utils/Util.java b/app/src/main/java/com/enqualcomm/support/utils/Util.java index c3223b90..0656c38c 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/Util.java +++ b/app/src/main/java/com/enqualcomm/support/utils/Util.java @@ -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; } -- 2.17.1