一、WifiManager相关类
WifiManager
WifiManager中公开API的具体实现,提供了Wi-Fi打开与关闭、配置和扫描、连接和断开等方法,其中也包含了对调用者的权限检查,WifiManager是WifiService的客户端,它与WifiService进行Binder交互。
WifiManager外部调用方式:
WifiManager wifiManager = (WifiManager)Context.getSystemService(Context.WIFI_SERVICE);
WifiManager文件路径:
packages/modules/Wifi/framework/java/android/net/wifi/WifiManager.java
WifiManager定义:
public class WifiManager {}
WifiConfiguration
表示已配置的 Wi-Fi 网络(包括安全配置)的类,Android 13中标记为Deprecated。
WifiConfiguration文件路径:
packages/modules/Wifi/framework/java/android/net/wifi/WifiConfiguration.java
WifiConfiguration定义:
public class WifiConfiguration implements Parcelable {}
WifiNetworkSuggestion
The Network Suggestion object is used to provide a Wi-Fi network for consideration when auto-connecting to networks.
网络建议对象用于提供 Wi-Fi 网络,以便在自动连接到网络时考虑。
WifiConfiguration文件路径:
packages/modules/Wifi/framework/java/android/net/wifi/WifiConfiguration.java
WifiConfiguration定义:
public final class WifiNetworkSuggestion implements Parcelable {}
SoftApConfiguration
Wifi Soft Ap的配置。
SoftApConfiguration文件路径:
packages/modules/Wifi/framework/java/android/net/wifi/SoftApConfiguration.java
SoftApConfiguration定义:
public final class SoftApConfiguration implements Parcelable {}
ScanResult
描述有关检测到的接入点的信息。
ScanResult文件路径:
packages/modules/Wifi/framework/java/android/net/wifi/ScanResult.java
ScanResult定义:
public final class ScanResult implements Parcelable {}
PasspointConfiguration
Class representing Passpoint configuration. This contains configurations specified in PerProviderSubscription (PPS) Management Object (MO) tree.
表示传递点配置的类。 这包含在每个提供程序订阅 (PPS) 管理对象 (MO) 树中指定的配置。
PasspointConfiguration文件路径:
packages/modules/Wifi/framework/java/android/net/wifi/hotspot2/PasspointConfiguration.java
packages/modules/Wifi/framework/aidl-export/android/net/wifi/hotspot2/PasspointConfiguration.aidl
PasspointConfiguration 定义:
public final class PasspointConfiguration implements Parcelable {}
二、WifiManager API
List<ScanResult> getScanResults() :返回搜索结果。
int getWifiState():返回Wifi状态。
void connect(@NonNull WifiConfiguration config, @Nullable ActionListener listener) :连接到具有给定配置的网络。该网络也会添加到前台用户的已配置网络列表中。
void connect(int networkId, @Nullable ActionListener listener) :连接到具有给定网络 ID 的网络。
void save(@NonNull WifiConfiguration config, @Nullable ActionListener listener):将给定网络保存到前台用户的已配置网络列表中。如果网络已存在,则会更新配置。默认情况下,任何新网络都处于启用状态。
void forget(int netId, @Nullable ActionListener listener):从前台用户的已配置网络列表中删除网络。
void disable(int netId, @Nullable ActionListener listener) :暂时禁用网络。应始终在用户断开网络时触发。
boolean startSoftAp(@Nullable WifiConfiguration wifiConfig):使用指定的配置启动软 AP(热点)模式以进行网络共享。
boolean stopSoftAp():停止软AP模式。
int getWifiApState():获取联机 Wi-Fi 热点启用状态。
boolean isWifiApEnabled() :返回联机 Wi-Fi AP 是启用还是禁用。
SoftApConfiguration getSoftApConfiguration():获取联机 Wi-Fi AP 配置。
boolean setSoftApConfiguration(@NonNull SoftApConfiguration softApConfig):设置联机 Wi-Fi 接入点配置。
void registerScanResultsCallback(@NonNull @CallbackExecutor Executor executor, @NonNull ScanResultsCallback callback):注册扫描结果的回调。
void unregisterScanResultsCallback(@NonNull ScanResultsCallback callback) :允许呼叫者取消注册以前注册的回调。调用此方法后,应用程序将不再收到扫描结果事件。
三、WifiManager流程分析
1、setWifiEnabled流程
通过代码分析一下setWifiEnabled流程:
//packages/modules/Wifi/framework/java/android/net/wifi/WifiManager.java
public class WifiManager {
IWifiManager mService;
public boolean setWifiEnabled(boolean enabled) {
try {
return mService.setWifiEnabled(mContext.getOpPackageName(), enabled); //调用IWifiManager的setWifiEnabled方法
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
}
2、getScanResults流程
通过代码分析一下getScanResults流程:
//packages/modules/Wifi/framework/java/android/net/wifi/WifiManager.java
public class WifiManager {
IWifiManager mService;
@RequiresPermission(allOf = {ACCESS_WIFI_STATE, ACCESS_FINE_LOCATION})
public List<ScanResult> getScanResults() {
try {
return mService.getScanResults(mContext.getOpPackageName(),
mContext.getAttributionTag()); //调用IWifiManager的getScanResults方法
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
}
在WifiManager的getScanResults方法中调用IWifiManager的getScanResults方法,IWifiManager为AIDL接口,由BaseWifiService继承,而WifiServiceImpl继承于BaseWifiService,实际的功能实现由WifiServiceImpl负责。
3、connect流程
通过代码分析一下connect流程:
//packages/modules/Wifi/framework/java/android/net/wifi/WifiManager.java
public class WifiManager {
IWifiManager mService;
public void connect(int networkId, @Nullable ActionListener listener) {
if (networkId < 0) throw new IllegalArgumentException("Network id cannot be negative");
connectInternal(null, networkId, listener);
}
private void connectInternal(@Nullable WifiConfiguration config, int networkId,
@Nullable ActionListener listener) {
ActionListenerProxy listenerProxy = null;
if (listener != null) {
listenerProxy = new ActionListenerProxy("connect", mLooper, listener);
}
try {
mService.connect(config, networkId, listenerProxy, mContext.getOpPackageName()); //调用IWifiManager的connect方法
} catch (RemoteException e) {
if (listenerProxy != null) {
listenerProxy.onFailure(ActionListener.FAILURE_INTERNAL_ERROR);
}
} catch (SecurityException e) {
if (listenerProxy != null) {
listenerProxy.onFailure(ActionListener.FAILURE_NOT_AUTHORIZED);
}
}
}
}
在WifiManager 的connect方法中调用IWifiManager的connect方法,IWifiManager为AIDL接口,由BaseWifiService继承,而WifiServiceImpl继承于BaseWifiService,实际的功能实现由WifiServiceImpl负责。