Преглед изворни кода

主机WiFi自动连接优化,监听到设备网络变化时若WiFi开启状态则强制连接

weizhengliang пре 6 месеци
родитељ
комит
cc6dea5966

+ 20 - 3
android_host/src/main/java/com/wdkl/ncs/android/component/nursehome/activity/CallingHostActivationActivity.kt

@@ -135,7 +135,7 @@ class CallingHostActivationActivity : BaseActivity<DevicePresenter, CallinghostA
 
 
         //检查网络情况,如果当前打开wifi但是未连接wifi则尝试主动连接wifi(为了解决Android高版本在连接非internet网络时无法自动连接问题)
         //检查网络情况,如果当前打开wifi但是未连接wifi则尝试主动连接wifi(为了解决Android高版本在连接非internet网络时无法自动连接问题)
         if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
         if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
-            NetworkUtils.checkNetworkConnect(BaseApplication.appContext)
+            NetworkUtils.checkNetworkConnect(BaseApplication.appContext, true)
         }
         }
 
 
         showUI()
         showUI()
@@ -185,7 +185,7 @@ class CallingHostActivationActivity : BaseActivity<DevicePresenter, CallinghostA
     private fun registerNetworkBroadcast() {
     private fun registerNetworkBroadcast() {
         val intentFilter = IntentFilter()
         val intentFilter = IntentFilter()
         // 系统的网络被更改的过滤器
         // 系统的网络被更改的过滤器
-        //intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE")
+        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE")
         intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
         intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
         netWorkChangeReceiver = NetWorkChangeReceiver()
         netWorkChangeReceiver = NetWorkChangeReceiver()
         registerReceiver(netWorkChangeReceiver, intentFilter)
         registerReceiver(netWorkChangeReceiver, intentFilter)
@@ -259,8 +259,10 @@ class CallingHostActivationActivity : BaseActivity<DevicePresenter, CallinghostA
         }
         }
 
 
         val netInfo = NetHelper.getNetInfo(activity)
         val netInfo = NetHelper.getNetInfo(activity)
+        Constant.DEVICE_LOCAL_IP = NetHelper.getInstance().localIP
         activation_v.text = BuildConfig.VERSION_NAME + "_" + BuildConfig.VERSION_CODE + "_" + Build.MODEL
         activation_v.text = BuildConfig.VERSION_NAME + "_" + BuildConfig.VERSION_CODE + "_" + Build.MODEL
-        activation_ip.text = NetHelper.getInstance().localIP
+        activation_ip.text = Constant.DEVICE_LOCAL_IP
+
         if (netInfo != null) {
         if (netInfo != null) {
             activation_wg.text = netInfo.gateway
             activation_wg.text = netInfo.gateway
             if (netInfo.netMask != null) {
             if (netInfo.netMask != null) {
@@ -597,5 +599,20 @@ class CallingHostActivationActivity : BaseActivity<DevicePresenter, CallinghostA
 
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun onMoonEvent(messageEvent: MessageEvent) {
     fun onMoonEvent(messageEvent: MessageEvent) {
+        when (messageEvent.getType()) {
+            Constant.EVENT_WIFI_ENABLE -> {
+                //wifi打开时检查连接情况
+                if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
+                    NetworkUtils.checkNetworkConnect(BaseApplication.appContext, false)
+                }
+            }
+
+            Constant.EVENT_NETWORK_CHANGE -> {
+                //wifi断开,尝试重连
+                if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
+                    NetworkUtils.checkNetworkConnect(BaseApplication.appContext, true)
+                }
+            }
+        }
     }
     }
 }
 }

+ 10 - 3
android_host/src/main/java/com/wdkl/ncs/android/component/nursehome/activity/NurseHome2Activity.kt

@@ -402,7 +402,7 @@ class NurseHome2Activity  : BaseActivity<NurseHomeActivityPresenter, NurseMainDo
     private fun registerNetworkBroadcast() {
     private fun registerNetworkBroadcast() {
         val intentFilter = IntentFilter()
         val intentFilter = IntentFilter()
         // 系统的网络被更改的过滤器
         // 系统的网络被更改的过滤器
-        //intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE")
+        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE")
         intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
         intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
         netWorkChangeReceiver = NetWorkChangeReceiver()
         netWorkChangeReceiver = NetWorkChangeReceiver()
         registerReceiver(netWorkChangeReceiver, intentFilter)
         registerReceiver(netWorkChangeReceiver, intentFilter)
@@ -2131,7 +2131,7 @@ class NurseHome2Activity  : BaseActivity<NurseHomeActivityPresenter, NurseMainDo
                 if (!Constant.TCP_CONNECTED) {
                 if (!Constant.TCP_CONNECTED) {
                     //tcp连接断开,判断是否因为wifi断开导致,如果是则尝试重连
                     //tcp连接断开,判断是否因为wifi断开导致,如果是则尝试重连
                     if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
                     if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
-                        NetworkUtils.checkNetworkConnect(BaseApplication.appContext)
+                        NetworkUtils.checkNetworkConnect(BaseApplication.appContext, false)
                     }
                     }
                 }
                 }
             }
             }
@@ -2226,7 +2226,14 @@ class NurseHome2Activity  : BaseActivity<NurseHomeActivityPresenter, NurseMainDo
             Constant.EVENT_WIFI_ENABLE -> {
             Constant.EVENT_WIFI_ENABLE -> {
                 //wifi打开时检查连接情况
                 //wifi打开时检查连接情况
                 if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
                 if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
-                    NetworkUtils.checkNetworkConnect(BaseApplication.appContext)
+                    NetworkUtils.checkNetworkConnect(BaseApplication.appContext, false)
+                }
+            }
+
+            Constant.EVENT_NETWORK_CHANGE -> {
+                //wifi断开,尝试重连
+                if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
+                    NetworkUtils.checkNetworkConnect(BaseApplication.appContext, true)
                 }
                 }
             }
             }
 
 

+ 40 - 0
android_host/src/main/java/com/wdkl/ncs/android/component/nursehome/activity/NurseHomeActivity.kt

@@ -39,6 +39,7 @@ import com.wdkl.ncs.android.component.nursehome.helper.SoundPoolManager
 import com.wdkl.ncs.android.component.nursehome.launch.NurseHomeLaunch
 import com.wdkl.ncs.android.component.nursehome.launch.NurseHomeLaunch
 import com.wdkl.ncs.android.component.nursehome.led.LedItem
 import com.wdkl.ncs.android.component.nursehome.led.LedItem
 import com.wdkl.ncs.android.component.nursehome.led.LedManagerUtils
 import com.wdkl.ncs.android.component.nursehome.led.LedManagerUtils
+import com.wdkl.ncs.android.component.nursehome.receiver.NetWorkChangeReceiver
 import com.wdkl.ncs.android.component.nursehome.settingconfig.SettingConfig
 import com.wdkl.ncs.android.component.nursehome.settingconfig.SettingConfig
 import com.wdkl.ncs.android.component.nursehome.sip.callback.PhoneCallback
 import com.wdkl.ncs.android.component.nursehome.sip.callback.PhoneCallback
 import com.wdkl.ncs.android.component.nursehome.sip.core.LinphoneManager
 import com.wdkl.ncs.android.component.nursehome.sip.core.LinphoneManager
@@ -124,6 +125,8 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNewN
 
 
     private var receiver :TimeReceiver? = null
     private var receiver :TimeReceiver? = null
 
 
+    private var netWorkChangeReceiver: NetWorkChangeReceiver? = null
+
     //卡尔主机
     //卡尔主机
     var batteryBroadcastReceiver: BatteryBroadcastReceiver? = null
     var batteryBroadcastReceiver: BatteryBroadcastReceiver? = null
     private var executor: ScheduledExecutorService? = null
     private var executor: ScheduledExecutorService? = null
@@ -320,6 +323,7 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNewN
 
 
         presenter.loadServerInfo()
         presenter.loadServerInfo()
         regReceiver()//注册时间广播
         regReceiver()//注册时间广播
+        registerNetworkBroadcast()
 
 
         SoundPoolManager.getInstance().init()
         SoundPoolManager.getInstance().init()
         updateNetState()
         updateNetState()
@@ -546,6 +550,20 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNewN
         }
         }
     }
     }
 
 
+    private fun registerNetworkBroadcast() {
+        val intentFilter = IntentFilter()
+        // 系统的网络被更改的过滤器
+        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE")
+        intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+        netWorkChangeReceiver = NetWorkChangeReceiver()
+        registerReceiver(netWorkChangeReceiver, intentFilter)
+    }
+
+    private fun unregisterNetworkBroadcast() {
+        if (netWorkChangeReceiver != null) {
+            unregisterReceiver(netWorkChangeReceiver)
+        }
+    }
 
 
     /**
     /**
      * 时间变化监听
      * 时间变化监听
@@ -723,6 +741,7 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNewN
         if (batteryBroadcastReceiver != null) {
         if (batteryBroadcastReceiver != null) {
             unregisterReceiver(batteryBroadcastReceiver)
             unregisterReceiver(batteryBroadcastReceiver)
         }
         }
+        unregisterNetworkBroadcast()
 
 
         if (executor != null) {
         if (executor != null) {
             executor!!.shutdownNow()
             executor!!.shutdownNow()
@@ -2630,6 +2649,13 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNewN
             //TCP连接状态
             //TCP连接状态
             Constant.EVENT_TCP_STATE -> {
             Constant.EVENT_TCP_STATE -> {
                 updateTcpState()
                 updateTcpState()
+
+                if (!Constant.TCP_CONNECTED) {
+                    //tcp连接断开,判断是否因为wifi断开导致,如果是则尝试重连
+                    if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
+                        NetworkUtils.checkNetworkConnect(BaseApplication.appContext, false)
+                    }
+                }
             }
             }
 
 
             Constant.EVENT_RESTART_APP -> {
             Constant.EVENT_RESTART_APP -> {
@@ -2724,6 +2750,20 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNewN
                 }
                 }
             }
             }
 
 
+            Constant.EVENT_WIFI_ENABLE -> {
+                //wifi打开时检查连接情况
+                if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
+                    NetworkUtils.checkNetworkConnect(BaseApplication.appContext, false)
+                }
+            }
+
+            Constant.EVENT_NETWORK_CHANGE -> {
+                //wifi断开,尝试重连
+                if (BuildConfig.flag.equals(Constant.DEV_W_KAER)) {
+                    NetworkUtils.checkNetworkConnect(BaseApplication.appContext, true)
+                }
+            }
+
         }
         }
 
 
     }
     }

+ 11 - 1
android_host/src/main/java/com/wdkl/ncs/android/component/nursehome/receiver/NetWorkChangeReceiver.kt

@@ -3,10 +3,16 @@ package com.wdkl.ncs.android.component.nursehome.receiver
 import android.content.BroadcastReceiver
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Context
 import android.content.Intent
 import android.content.Intent
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkInfo
 import android.net.wifi.WifiManager
 import android.net.wifi.WifiManager
+import android.os.Build
 import android.util.Log
 import android.util.Log
 import com.wdkl.ncs.android.middleware.common.Constant
 import com.wdkl.ncs.android.middleware.common.Constant
 import com.wdkl.ncs.android.middleware.common.MessageEvent
 import com.wdkl.ncs.android.middleware.common.MessageEvent
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClientHandler
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.EventBus
 
 
 class NetWorkChangeReceiver : BroadcastReceiver() {
 class NetWorkChangeReceiver : BroadcastReceiver() {
@@ -14,13 +20,17 @@ class NetWorkChangeReceiver : BroadcastReceiver() {
 
 
     override fun onReceive(context: Context, intent: Intent) {
     override fun onReceive(context: Context, intent: Intent) {
         val action = intent.getAction()
         val action = intent.getAction()
+        Log.e(TAG, "action: $action")
         if (WifiManager.WIFI_STATE_CHANGED_ACTION == action) {
         if (WifiManager.WIFI_STATE_CHANGED_ACTION == action) {
             val wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1)
             val wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1)
             if (wifiState == WifiManager.WIFI_STATE_ENABLED) {
             if (wifiState == WifiManager.WIFI_STATE_ENABLED) {
                 //打开wifi
                 //打开wifi
-                Log.e(TAG, "监听到打开wifi...")
+                Log.e(TAG, "监听到wifi打开...")
                 EventBus.getDefault().post(MessageEvent("wifi", Constant.EVENT_WIFI_ENABLE))
                 EventBus.getDefault().post(MessageEvent("wifi", Constant.EVENT_WIFI_ENABLE))
             }
             }
+        } else {
+            Log.e(TAG, "网络连接变化...")
+            EventBus.getDefault().post(MessageEvent("wifi", Constant.EVENT_NETWORK_CHANGE))
         }
         }
     }
     }
 }
 }

+ 28 - 12
android_host/src/main/java/com/wdkl/ncs/android/component/nursehome/util/NetworkUtils.java

@@ -305,22 +305,14 @@ public class NetworkUtils {
         return false;
         return false;
     }
     }
 
 
-    public static void checkNetworkConnect(final Context context) {
+    public static void checkNetworkConnect(final Context context, final boolean forceConnect) {
         threadPool.execute(() -> {
         threadPool.execute(() -> {
             if (checkNetConnection) {
             if (checkNetConnection) {
                 Log.e(TAG, "正在检查网络连接状态...");
                 Log.e(TAG, "正在检查网络连接状态...");
             } else {
             } else {
                 checkNetConnection = true;
                 checkNetConnection = true;
                 boolean connected = false;
                 boolean connected = false;
-                if (NetworkUtils.isNetConnection(context)) {
-                    //网络连接正常,返回
-                    connected = true;
-                    Log.e(TAG, "network available...");
-                    /*if (NetworkUtils.getNetworkInfoType(context) == ConnectivityManager.TYPE_WIFI) {
-                        String wifiSSID = NetworkUtils.getConnectWifi(context);
-                        SettingConfig.setWifiSSID(context, wifiSSID);
-                    }*/
-                } else {
+                if (forceConnect) {
                     //无网络连接,判断是否开启了wifi,如开启了则尝试自动连接
                     //无网络连接,判断是否开启了wifi,如开启了则尝试自动连接
                     boolean wifiState = NetworkUtils.getWifiStatus(context);
                     boolean wifiState = NetworkUtils.getWifiStatus(context);
                     if (wifiState) {
                     if (wifiState) {
@@ -333,11 +325,35 @@ public class NetworkUtils {
                         connected = NetworkUtils.connectWifi(context, "");
                         connected = NetworkUtils.connectWifi(context, "");
                     }
                     }
                     Log.e(TAG, "network unavailable...wifiState: " + wifiState + ", connected: " + connected);
                     Log.e(TAG, "network unavailable...wifiState: " + wifiState + ", connected: " + connected);
+                } else {
+                    if (NetworkUtils.isNetConnection(context)) {
+                        //网络连接正常,返回
+                        connected = true;
+                        Log.e(TAG, "network available...");
+                        /*if (NetworkUtils.getNetworkInfoType(context) == ConnectivityManager.TYPE_WIFI) {
+                            String wifiSSID = NetworkUtils.getConnectWifi(context);
+                            SettingConfig.setWifiSSID(context, wifiSSID);
+                        }*/
+                    } else {
+                        //无网络连接,判断是否开启了wifi,如开启了则尝试自动连接
+                        boolean wifiState = NetworkUtils.getWifiStatus(context);
+                        if (wifiState) {
+                            //wifi扫描需要时间,延迟3s后再连接
+                            try {
+                                Thread.sleep(3000);
+                            } catch (Exception e) {
+                                //
+                            }
+                            connected = NetworkUtils.connectWifi(context, "");
+                        }
+                        Log.e(TAG, "network unavailable...wifiState: " + wifiState + ", connected: " + connected);
+                    }
                 }
                 }
 
 
                 checkNetConnection = false;
                 checkNetConnection = false;
 
 
-                if (!connected) {
+                //WiFi没有连接成功且WiFi是开启状态则再次等待重连
+                if (!connected && NetworkUtils.getWifiStatus(context)) {
                     Log.e(TAG, "wifi not connect, wait 30s try again...");
                     Log.e(TAG, "wifi not connect, wait 30s try again...");
                     try {
                     try {
                         Thread.sleep(30000);
                         Thread.sleep(30000);
@@ -345,7 +361,7 @@ public class NetworkUtils {
                         //
                         //
                     }
                     }
 
 
-                    checkNetworkConnect(context);
+                    checkNetworkConnect(context, forceConnect);
                 }
                 }
             }
             }
         });
         });