Android-WiFi开发之 WifiManager

前言:
在初始涉足Android系统开发时, 对于WiFi是一个门外汉; 逐渐开始接触做系统应用, 开始整理WiFi相关的知识点, 今天更新一下WiFi的管理类 ------> WifiManager;

一. 简介:
WifiManager这个类, 是 Android 暴露给开发者使用的一个系统服务管理类, 其中包含对WiFi的响应的操作函数; 其隐藏掉的系统服务类为IWifiService, 为Android私有的, 其具体实现, 未暴露给用户; 只需要使用WifiManager进行函数操作完成UI, 监听对应的广播消息, 就可完成功能了. 换言之, WifiManager会调用service简介地和framework层, 驱动层进行函数调用, 然后驱动层会回调至上层, 以广播的形式实现通知; 这是目前WiFi的简单介绍;

二. 一些简单的WiFi操作以及简要说明:
<1> 获取 WifiManager 实例:
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

    注意: 
        这是官方推荐的获取 WifiManager 类的方式; 其实在看源码的时候, 会有一个公共的构造函数, 但是是需要IWifiService的, 这个类是google私有的, 
        属于系统安全级别的API类, 所以, 调用上面的方法, 谷歌会帮你实例化IWifiService, 并且后续的连接, 忘记, 保存的真实实现都是由service来完成的;

<2> 开启, 关闭 WiFi:
    wifiManager.setWifiEnabled(boolean enable); 操作这个函数的时候, 就会触发系统回调WiFi状态发生改变的广播;

<3> 获取 WiFi 硬件的状态:
    int wifiState = wifiManager.getWifiState();

    注意:
        WiFi 的状态目前有五种, 分别是:
            WifiManager.WIFI_STATE_ENABLING: WiFi正要开启的状态, 是 Enabled 和 Disabled 的临界状态;
            WifiManager.WIFI_STATE_ENABLED: WiFi已经完全开启的状态;
            WifiManager.WIFI_STATE_DISABLING: WiFi正要关闭的状态, 是 Disabled 和 Enabled 的临界状态;
            WifiManager.WIFI_STATE_DISABLED: WiFi已经完全关闭的状态;
            WifiManager.WIFI_STATE_UNKNOWN: WiFi未知的状态, WiFi开启, 关闭过程中出现异常, 或是厂家未配备WiFi外挂模块会出现的情况;
<4> 开始扫描 WiFi 热点:
    在确认开启 WiFi 之后, 我们就可以调用 startScan() 函数开始扫描附近的热点了, 即:
        wifiManager.startScan();

<5> 获取扫描到的 WiFi 热点的结果:
    List<ScanResult> scanResults = wifiManager.getScanResult();

    然后, 我们看一下扫描到的结果是一个怎么样的构成?
    if (scanResults == null || scanResults.isEmpty()) return;
    for (ScanResult result : scanResults) {
        Log.v(TAG, "result = " + result.toString())
    }

<6> 获取配置好的 WiFi 信息:
    List<WifiConfiguration> wifiConfigurations = wifiManager.getConfiguredNetworks();

    然后, 我们看一下扫描到的结果是一个怎么样的构成?
    if (wifiConfigurations == null || wifiConfigurations.isEmpty()) return;
    for (WifiConfiguration configuration : wifiConfigurations) {
        Log.v(TAG, "configuration = " + configuration.toString());
    }

    注意: 
        Android 的 WiFi 连接, 大概可以分为如下两种情况:
            a. 无密码的, 可直接连接, 连接过程中, 此热点一直有, 不管最后是否需要其他方式进行验证操作, 但凡连接成功, 即刻进行了对此热点的配置进行保存;
            b. 有密码的, 暂且不论何种加密手段, 只要用户输入密码, 点击连接, 如果连接途中, 此热点一直有, 不论连接成功还是失败, 都即刻对此热点的配置进行了保存操作;
        使用上述的方式获取到的WiFi的配置, 就是上面进行操作保存的WiFi配置;
            c. 连接多个WiFi成功之后, 然后关闭WiFi, 下次开启WiFi的时候, 它会主动帮你连接这其中配置好的其中一个WiFi;
<7> 获取对应到ScanResult的WifiConfiguration, 通常, 此配置对应一个BSSID, 可能是null;
    List<WifiConfiguration> configs = wifiManager.getMatchingWifiConfig(scanResult);

    可以打印一下看具体的情况:
    if (configs == null || configs.isEmpty()) return;
    for (WifiConfiguration config : configs) {
        Log.v(TAG, "config = " + config);
    }

<8> 连接WiFi, 有两个函数:
    wifiManager.connect(WifiConfiguration config, ActionListener listener); 其中包含两个参数: 第一个是WifiConfiguration, 如果是之前连接过得, 是可以直接连接的;
    否则需要进行手动进行组合(无密码的除外); 第二个参数是ActionListener, 是WifiManager中的hide的接口, 是连接过程的状态回调; 包含 onSuccess() 和 onFailure(int reason);
    
    wifiManager.connect(int networkId, ActionListener listener); 其中包含两个参数: 第一个是只需传入networkId, Android使用这个参数, 对请求连接的WiFi进行识别鉴定;
    第二个参数同上, 可以传null

暂时先更新至此, 会尽快更新



作者:迷你小猪
链接:https://www.jianshu.com/p/67aaf1fdb921
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值