- 在 WifiConfigManager 中通过 createNewInternalWifiConfigurationFromExternal 创建新的 WifiConfiguration 配置项,并且创建合法的 networkId 信息,通过 mNextNetworkId 参数递增的方式对新创建的 Network 赋值 Id;
- 创建过程发生在 addOrUpdateNetworkInternal 接口中,进行网络的添加,其中传入的 config 为空或者是新的 config 信息,networkId 为 INVALID 的;
- addOrUpdateNetworkInternal 的调用者很多,从新添加网络的方向来看是 addOrUpdateNetwork 接口,同属于 WifiConfigManager 类,而同样它也有多个调用者;
- 添加新网络的调用者为 ClientModeImpl 类中的 connect 接口,而它的调用者为 WifiServiceImpl 的 connect 接口:
/**
* see {@link android.net.wifi.WifiManager#connect(int, WifiManager.ActionListener)}
*/
@Override
public void connect(WifiConfiguration config, int netId, IBinder binder,
@Nullable IActionListener callback, int callbackIdentifier) {
int uid = Binder.getCallingUid();
if (!isPrivileged(Binder.getCallingPid(), uid)) {
throw new SecurityException(TAG + ": Permission denied");
}
mLog.info("connect uid=%").c(uid).flush();
mClientModeImpl.connect(config, netId, binder, callback, callbackIdentifier, uid);
if (mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)) {
mWifiMetrics.logUserActionEvent(UserActionEvent.EVENT_MANUAL_CONNECT, netId);
}
}
- 其调用为通过 binder 服务在 WifiManager 中发生,其中通过 connect 接口进行连接过程访问,而 connect 接口通过 connectInternal 接口调用了 mService.connect,即访问到 WifiServiceImpl 中对应的方法:
private void connectInternal(@Nullable WifiConfiguration config, int networkId,
@Nullable ActionListener listener) {
ActionListenerProxy listenerProxy = null;
Binder binder = null;
if (listener != null) {
listenerProxy = new ActionListenerProxy("connect", mLooper, listener);
binder = new Binder();
}
try {
mService.connect(config, networkId, binder, listenerProxy,
listener == null ? 0 : listener.hashCode());