Android P Wi-Fi scan

1. 在WifiSettings界面,每10s扫描一次 

frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java

mWifiManager.startScan()
sendEmptyMessageDelayed(MSG_SCAN, WIFI_RESCAN_INTERVAL_MS);
WIFI_RESCAN_INTERVAL_MS=10s   

I WifiService: startScan uid=1000
D WifiHandler.WifiScanningService: handleMessage Received message=159765d sendingUid=1000
D WifiScanningService: addSingleScanRequest: ClientInfo[uid=1000,android.os.Messenger@4c0c49],Id=60,WorkSource{1000}, ScanSettings {  type:HIGH ACCURACY band:24Ghz & 5Ghz (DFS incl) period:0 reportEvents:3 numBssidsPerScan:0 maxScansToCache:0 channels:[  ]  hiddenNetworks:[  ]  } 
D WifiScanRequestProxy: Scan request succeeded
D WifiScanningService: replySucceeded replySucceeded recvdMessage=159765

 

2. 亮屏时 周期性扫描   20s-40s-80s-160s

WifiConnectivityManager.java ->WifiScanner ->WifiScanningServiceImpl ->WifiNative

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java
 startConnectivityScan
   亮屏时   startPeriodicScan(scanImmediately)    20s-40s-80s-160s
   灭屏时 且断开连接 startDisconnectedPnoScan     DISCONNECTED_PNO_SCAN_INTERVAL_MS=20s

startPeriodicScan      

   startPeriodicSingleScan()
      startSingleScan(isFullBandScan, WIFI_WORK_SOURCE);

             mScanner.startScan
      schedulePeriodicScanTimer(mPeriodicSingleScanInterval);

 

D WifiConnectivityManager: startConnectivityScan: screenOn=true wifiState=transitioning scanImmediately=true wifiEnabled=true wifiConnectivityManagerEnabled=true
I WifiStateMachine: disconnectedstate enter
D WifiStateMachine:  Enter DisconnectedState screenOn=true
D WifiConnectivityManager: handleConnectionStateChanged: state=disconnected
D WifiConnectivityManager: scheduleWatchdogTimer
D WifiConnectivityManager: startConnectivityScan: screenOn=true wifiState=disconnected scanImmediately=true wifiEnabled=true wifiConnectivityManagerEnabled=true
D WifiConnectivityManager: schedulePeriodicScanTimer, intervalMs: 20000
D WifiHandler.WifiScanningService: handleMessage Received message=159765d sendingUid=1000
D WifiScanningService: addSingleScanRequest: ClientInfo[uid=1000,android.os.Messenger@4c0c49],Id=28,WorkSource{1010}, ScanSettings {  type:HIGH ACCURACY band:24Ghz & 5Ghz (DFS incl) period:0 reportEvents:3 numBssidsPerScan:0 maxScansToCache:0 channels:[  ]  hiddenNetworks:[  ]  } 
D WifiScanningService: replySucceeded replySucceeded recvdMessage=159765
D WifiStateMachine:  DisconnectedState !CMD_GET_SUPPORTED_FEATURES uid=1000 rt=11953480/11953480 0 0
D WifiStateMachine:  ConnectModeState !CMD_GET_SUPPORTED_FEATURES uid=1000 rt=11953480/11953480 0 0
D WifiStateMachine:  DefaultState !CMD_GET_SUPPORTED_FEATURES uid=1000 rt=11953480/11953480 0 0
D WifiHAL : WifiRequest::create vendor command to iface 37, vendor_id=0x1a11, subcmd=0x0002, res=0

 

3. 灭屏 且断开连接,仅扫描已保存的ssid, 20s

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java
 startConnectivityScan
   亮屏时   startPeriodicScan(scanImmediately)    20s-40s-80s-160s
   灭屏时 且断开连接 startDisconnectedPnoScan     DISCONNECTED_PNO_SCAN_INTERVAL_MS=20s

startDisconnectedPnoScan      

   mScanner.startDisconnectedPnoScan          WifiScanner.java

         startPnoScan

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java  
startPnoScan
  mAsyncChannel.sendMessage(CMD_START_PNO_SCAN, 0, key, pnoParams);
     addHwPnoScanRequest
       addPnoScanRequest
          mActivePnoScans.addRequest()

   

4. 断开连接时 每20分钟一次WATCHDOG_INTERVAL_MS = 20 * 60 * 1000

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java
handleConnectionStateChanged
  scheduleWatchdogTimer()
  startConnectivityScan(SCAN_IMMEDIATELY)
  
watchdogHandler() 
  scheduleWatchdogTimer();
  startSingleScan(true, WIFI_WORK_SOURCE)  

D WifiConnectivityManager: start a single scan from watchdogHandler
D WifiConnectivityManager: scheduleWatchdogTimer
D WifiHandler.WifiScanningService: handleMessage Received message=159765d sendingUid=1000
D WifiScanningService: addSingleScanRequest: ClientInfo[uid=1000,android.os.Messenger@4c0c49],Id=29,WorkSource{1010}, ScanSettings {  type:HIGH ACCURACY band:24Ghz & 5Ghz (DFS incl) period:0 reportEvents:3 numBssidsPerScan:0 maxScansToCache:0 channels:[  ]  hiddenNetworks:[  ]  } 
D WifiScanningService: replySucceeded replySucceeded recvdMessage=159765
 

5. 其他应用触发的扫描,这是gms触发的

D WifiHandler.WifiScanningService: handleMessage Received message=159765d sendingUid=10018
D WifiScanningService: addSingleScanRequest: ClientInfo[uid=10018,android.os.Messenger@cafe09e],Id=9,WorkSource{10018 com.google.android.gms, 10061 com.google.android.googlequicksearchbox}, ScanSettings {  type:LOW LATENCY band:24Ghz & 5Ghz (no DFS) period:0 reportEvents:2 numBssidsPerScan:25 maxScansToCache:0 channels:[  ]  hiddenNetworks:[  ]  } 
D WifiScanningService: replySucceeded replySucceeded recvdMessage=159765

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
   public void onPnoNetworkFound(ScanResult[] results) {
       sendMessage(CMD_PNO_NETWORK_FOUND, 0, 0, results);
          addSingleScanRequest
            sendRequestToClientHandler(WifiScanner.CMD_START_SINGLE_SCAN...)
   
case WifiScanner.CMD_START_SINGLE_SCAN:   
     validateScanRequest
     mActiveScans.addRequest(ci, handler, workSource, scanSettings);
     mPendingScans.addRequest(ci, handler, workSource, scanSettings);

 

/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<integer name="def_wifi_scan_always_available">0</integer>

/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
            loadIntegerSetting(stmt, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE,
                     R.integer.def_wifi_scan_always_available);

/packages/apps/Settings/src/com/android/settings/wifi/WifiScanningRequiredFragment.java
public void onClick(DialogInterface dialog, int which) 
            case DialogInterface.BUTTON_POSITIVE:
                Settings.Global.putInt(contentResolver,
                         Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 1);

/packages/apps/Settings/src/com/android/settings/wifi/WifiScanModeActivity.java
    private void doPositiveClick() {
          Settings.Global.putInt(getContentResolver(),
                 Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 1);

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiSettingsStore.java
  public synchronized boolean isScanAlwaysAvailable() {
          return !mAirplaneModeOn && mScanAlwaysAvailable;
      }
  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值