Android WifiManager

一、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负责。

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值