**
* “*[]” 表示文件名
* “├──” 表示文件内的对象,方法等
* “└──” 表示下一步执行
**
一、Settings wifi 列表选择AP SSID
packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.java
frameworks/opt/net/wifi/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
frameworks/opt/net/wifi/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
packages/apps/Settings/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
packages/modules/Connectivity/framework/src/android/net/ConnectivityManager.java
packages/modules/Connectivity/service/src/com/android/server/ConnectivityService.java
**[WifiSettings.java]
├──updateWifiEntryPreferences()
└──if (connectedEntry.canSignIn()) //判断是否已认证登录
└──connectedEntry.signIn(null /* callback */);//connect 方式一,selected 后直接sign in
|
**[StandardWifiEntry.java]-->[WifiEntry.java]
├──canSignIn()
└──return mNetworkCapabilities != null && mNetworkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
├──signIn(@Nullable SignInCallback callback)
└──((ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).startCaptivePortalApp(mWifiManager.getCurrentNetwork());//启动认证APP:CaptivePortalLogin
└──else
└──launchNetworkDetailsFragment(pref);//connect 方式二,selected 后进入详情界面
|
**[WifiDetailPreferenceController2.java]
├──updateCaptivePortalButton()
└──signIntoNetwork()
└──mWifiEntry.signIn(this)
|
*[StandardWifiEntry.java]-->[WifiEntry.java]
├──canSignIn()
└──return mNetworkCapabilities != null && mNetworkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
├──signIn(@Nullable SignInCallback callback)
└──((ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).startCaptivePortalApp(mWifiManager.getCurrentNetwork());//启动认证APP:CaptivePortalLogin
**[ConnectivityManager.java]
├──startCaptivePortalApp(Network network)//ConnectivityService.java
└──if (!nai.networkCapabilities.hasCapability(NET_CAPABILITY_CAPTIVE_PORTAL)) return;
└──nai.networkMonitor().launchCaptivePortalApp();
|
**[NetworkMonitor.java]
├──launchCaptivePortalApp()
└──sendMessage(CMD_LAUNCH_CAPTIVE_PORTAL_APP)
└──clase:MaybeNotifyState
└──processMessage(Message message)
└──case CMD_LAUNCH_CAPTIVE_PORTAL_APP:
└──mCm.startCaptivePortalApp(network, appExtras);
|
**[ConnectivityManager.java]
├──startCaptivePortalApp(@NonNull Network network, @NonNull Bundle appExtras)
└──startCaptivePortalAppInternal(network, appExtras)//ConnectivityService.java
└──final Intent appIntent = new Intent(ConnectivityManager.ACTION_CAPTIVE_PORTAL_SIGN_IN);
mContext.startActivityAsUser(appIntent, UserHandle.CURRENT);
二、网络有效性检查
packages/modules/Wifi/service/java/com/android/server/wifi/Clie