解决息屏状态下AP断开后WIFI自动回连的问题diff --git a/android/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java b/android/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.javaindex cac2ea2..a3f0d82 100644--- a/android/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java+++ b/android/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java@@ -171,6 +171,14 @@ public class WifiConnectivityManager { private long mLastPeriodicSingleScanTimeStamp = RESET_TIME_STAMP; private boolean mPnoScanStarted = false; private boolean mPeriodicScanTimerSet = false;+ // Flag for fast reconnect mode: screen-off disconnect triggers aggressive scan/reconnect+ private boolean mScreenOffFastReconnect = false;+ // Timestamp when fast reconnect mode was entered (elapsed boot millis)+ private long mScreenOffFastReconnectStartMs = 0;+ // Duration of fast reconnect window in milliseconds (30 seconds)+ private static final long SCREEN_OFF_FAST_RECONNECT_DURATION_MS = 30 * 1000;+ // PNO scan interval used during fast reconnect window (5 seconds)+ private static final int FAST_RECONNECT_PNO_SCAN_INTERVAL_MS = 5 * 1000; // Device configs private boolean mEnableAutoJoinWhenAssociated; private boolean mWaitForFullBandScanResults = false;@@ -481,7 +489,21 @@ public class WifiConnectivityManager { + " reason: " + reason + " description: " + description); if (reason == -3) {- Log.e(TAG, "PnoScanListener onFailure: -3(not supported), just skip");+ Log.e(TAG, "PnoScanListener onFailure: -3(not supported)");+ // PNO is not supported on this hardware.+ // During fast reconnect mode, retry via startConnectivityScan which will+ // fall back to single scan. Otherwise, skip as before.+ if (mScreenOffFastReconnect+ !mScreenOn+ mWifiState == WIFI_STATE_DISCONNECTED+ (mClock.getElapsedSinceBootMillis() - mScreenOffFastReconnectStartMs)+ SCREEN_OFF_FAST_RECONNECT_DURATION_MS) {+ localLog("PnoScanListener: PNO not supported, "+ + "retrying via single scan fallback");+ scheduleDelayedConnectivityScan(FAST_RECONNECT_PNO_SCAN_INTERVAL_MS);+ } else {+ Log.e(TAG, "PnoScanListener onFailure: -3(not supported), just skip");+ } return; }@@ -738,6 +760,16 @@ public class WifiConnectivityManager { } long elapsedTimeMillis = mClock.getElapsedSinceBootMillis();+ // During screen-off fast reconnect window, clear BSSID blacklist for the target+ // so that a recently restarted AP is not filtered out.+ if (!mScreenOn mScreenOffFastReconnect+ (elapsedTimeMillis - mScreenOffFastReconnectStartMs)+ SCREEN_OFF_FAST_RECONNECT_DURATION_MS) {+ clearBssidBlacklist(targetBssid);+ localLog("connectToNetwork: fast-reconnect mode, cleared blacklist for " + targetBssid);+ } else {+ mScreenOffFastReconnect = false;+ } if (!mScreenOn shouldSkipConnectionAttempt(elapsedTimeMillis)) { localLog("connectToNetwork: Too many connection attempts. Skipping this attempt!"); mTotalConnectivityAttemptsRateLimited++;@@ -1029,7 +1061,16 @@ public class WifiConnectivityManager { scanSettings.band = getScanBand(); scanSettings.reportEvents = WifiScanner.REPORT_EVENT_NO_BATCH; scanSettings.numBssidsPerScan = 0;- scanSettings.periodInMs = mPnoScanIntervalMs;+ // Use aggressive PNO interval during screen-off fast reconnect window (AP restart scenario)+ if (mScreenOffFastReconne